OSDN Git Service

PR c++/45625 - Template parm name doesn't hide outer class scope's member name
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6    Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct GTY ((chain_next ("%h.next"))) pending_template {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 enum template_base_result {
113   tbr_incomplete_type,
114   tbr_ambiguous_baseclass,
115   tbr_success
116 };
117
118 static void push_access_scope (tree);
119 static void pop_access_scope (tree);
120 static void push_deduction_access_scope (tree);
121 static void pop_deduction_access_scope (tree);
122 static bool resolve_overloaded_unification (tree, tree, tree, tree,
123                                             unification_kind_t, int,
124                                             bool);
125 static int try_one_overload (tree, tree, tree, tree, tree,
126                              unification_kind_t, int, bool, bool);
127 static int unify (tree, tree, tree, tree, int, bool);
128 static void add_pending_template (tree);
129 static tree reopen_tinst_level (struct tinst_level *);
130 static tree tsubst_initializer_list (tree, tree);
131 static tree get_class_bindings (tree, tree, tree);
132 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
133                                    bool, bool);
134 static void tsubst_enum (tree, tree, tree);
135 static tree add_to_template_args (tree, tree);
136 static tree add_outermost_template_args (tree, tree);
137 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
138 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
139                                              tree);
140 static int type_unification_real (tree, tree, tree, const tree *,
141                                   unsigned int, int, unification_kind_t, int,
142                                   bool);
143 static void note_template_header (int);
144 static tree convert_nontype_argument_function (tree, tree);
145 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
146 static tree convert_template_argument (tree, tree, tree,
147                                        tsubst_flags_t, int, tree);
148 static int for_each_template_parm (tree, tree_fn_t, void*,
149                                    struct pointer_set_t*, bool);
150 static tree expand_template_argument_pack (tree);
151 static tree build_template_parm_index (int, int, int, int, tree, tree);
152 static bool inline_needs_template_parms (tree);
153 static void push_inline_template_parms_recursive (tree, int);
154 static tree retrieve_local_specialization (tree);
155 static void register_local_specialization (tree, tree);
156 static hashval_t hash_specialization (const void *p);
157 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
158 static int mark_template_parm (tree, void *);
159 static int template_parm_this_level_p (tree, void *);
160 static tree tsubst_friend_function (tree, tree);
161 static tree tsubst_friend_class (tree, tree);
162 static int can_complete_type_without_circularity (tree);
163 static tree get_bindings (tree, tree, tree, bool);
164 static int template_decl_level (tree);
165 static int check_cv_quals_for_unify (int, tree, tree);
166 static void template_parm_level_and_index (tree, int*, int*);
167 static int unify_pack_expansion (tree, tree, tree,
168                                  tree, int, bool, bool, bool);
169 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
171 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
172 static void regenerate_decl_from_template (tree, tree);
173 static tree most_specialized_class (tree, tree, tsubst_flags_t);
174 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
175 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
176 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
177 static bool check_specialization_scope (void);
178 static tree process_partial_specialization (tree);
179 static void set_current_access_from_decl (tree);
180 static enum template_base_result get_template_base (tree, tree, tree, tree,
181                                                     bool , tree *);
182 static tree try_class_unification (tree, tree, tree, tree, bool);
183 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
184                                            tree, tree);
185 static bool template_template_parm_bindings_ok_p (tree, tree);
186 static int template_args_equal (tree, tree);
187 static void tsubst_default_arguments (tree);
188 static tree for_each_template_parm_r (tree *, int *, void *);
189 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
190 static void copy_default_args_to_explicit_spec (tree);
191 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
192 static int eq_local_specializations (const void *, const void *);
193 static bool dependent_template_arg_p (tree);
194 static bool any_template_arguments_need_structural_equality_p (tree);
195 static bool dependent_type_p_r (tree);
196 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
197 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
198 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
199 static tree tsubst_decl (tree, tree, tsubst_flags_t);
200 static void perform_typedefs_access_check (tree tmpl, tree targs);
201 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
202                                                         location_t);
203 static tree listify (tree);
204 static tree listify_autos (tree, tree);
205 static tree template_parm_to_arg (tree t);
206 static tree current_template_args (void);
207 static tree fixup_template_type_parm_type (tree, int);
208 static tree fixup_template_parm_index (tree, tree, int);
209 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
210
211 /* Make the current scope suitable for access checking when we are
212    processing T.  T can be FUNCTION_DECL for instantiated function
213    template, or VAR_DECL for static member variable (need by
214    instantiate_decl).  */
215
216 static void
217 push_access_scope (tree t)
218 {
219   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
220               || TREE_CODE (t) == VAR_DECL);
221
222   if (DECL_FRIEND_CONTEXT (t))
223     push_nested_class (DECL_FRIEND_CONTEXT (t));
224   else if (DECL_CLASS_SCOPE_P (t))
225     push_nested_class (DECL_CONTEXT (t));
226   else
227     push_to_top_level ();
228
229   if (TREE_CODE (t) == FUNCTION_DECL)
230     {
231       saved_access_scope = tree_cons
232         (NULL_TREE, current_function_decl, saved_access_scope);
233       current_function_decl = t;
234     }
235 }
236
237 /* Restore the scope set up by push_access_scope.  T is the node we
238    are processing.  */
239
240 static void
241 pop_access_scope (tree t)
242 {
243   if (TREE_CODE (t) == FUNCTION_DECL)
244     {
245       current_function_decl = TREE_VALUE (saved_access_scope);
246       saved_access_scope = TREE_CHAIN (saved_access_scope);
247     }
248
249   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
250     pop_nested_class ();
251   else
252     pop_from_top_level ();
253 }
254
255 /* Do any processing required when DECL (a member template
256    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
257    to DECL, unless it is a specialization, in which case the DECL
258    itself is returned.  */
259
260 tree
261 finish_member_template_decl (tree decl)
262 {
263   if (decl == error_mark_node)
264     return error_mark_node;
265
266   gcc_assert (DECL_P (decl));
267
268   if (TREE_CODE (decl) == TYPE_DECL)
269     {
270       tree type;
271
272       type = TREE_TYPE (decl);
273       if (type == error_mark_node)
274         return error_mark_node;
275       if (MAYBE_CLASS_TYPE_P (type)
276           && CLASSTYPE_TEMPLATE_INFO (type)
277           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
278         {
279           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
280           check_member_template (tmpl);
281           return tmpl;
282         }
283       return NULL_TREE;
284     }
285   else if (TREE_CODE (decl) == FIELD_DECL)
286     error ("data member %qD cannot be a member template", decl);
287   else if (DECL_TEMPLATE_INFO (decl))
288     {
289       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
290         {
291           check_member_template (DECL_TI_TEMPLATE (decl));
292           return DECL_TI_TEMPLATE (decl);
293         }
294       else
295         return decl;
296     }
297   else
298     error ("invalid member template declaration %qD", decl);
299
300   return error_mark_node;
301 }
302
303 /* Create a template info node.  */
304
305 tree
306 build_template_info (tree template_decl, tree template_args)
307 {
308   tree result = make_node (TEMPLATE_INFO);
309   TI_TEMPLATE (result) = template_decl;
310   TI_ARGS (result) = template_args;
311   return result;
312 }
313
314 /* Return the template info node corresponding to T, whatever T is.  */
315
316 tree
317 get_template_info (const_tree t)
318 {
319   tree tinfo = NULL_TREE;
320
321   if (!t || t == error_mark_node)
322     return NULL;
323
324   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
325     tinfo = DECL_TEMPLATE_INFO (t);
326
327   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
328     t = TREE_TYPE (t);
329
330   if (TAGGED_TYPE_P (t))
331     tinfo = TYPE_TEMPLATE_INFO (t);
332   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
333     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
334
335   return tinfo;
336 }
337
338 /* Returns the template nesting level of the indicated class TYPE.
339
340    For example, in:
341      template <class T>
342      struct A
343      {
344        template <class U>
345        struct B {};
346      };
347
348    A<T>::B<U> has depth two, while A<T> has depth one.
349    Both A<T>::B<int> and A<int>::B<U> have depth one, if
350    they are instantiations, not specializations.
351
352    This function is guaranteed to return 0 if passed NULL_TREE so
353    that, for example, `template_class_depth (current_class_type)' is
354    always safe.  */
355
356 int
357 template_class_depth (tree type)
358 {
359   int depth;
360
361   for (depth = 0;
362        type && TREE_CODE (type) != NAMESPACE_DECL;
363        type = (TREE_CODE (type) == FUNCTION_DECL)
364          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
365     {
366       tree tinfo = get_template_info (type);
367
368       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
369           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
370         ++depth;
371     }
372
373   return depth;
374 }
375
376 /* Subroutine of maybe_begin_member_template_processing.
377    Returns true if processing DECL needs us to push template parms.  */
378
379 static bool
380 inline_needs_template_parms (tree decl)
381 {
382   if (! DECL_TEMPLATE_INFO (decl))
383     return false;
384
385   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
386           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
387 }
388
389 /* Subroutine of maybe_begin_member_template_processing.
390    Push the template parms in PARMS, starting from LEVELS steps into the
391    chain, and ending at the beginning, since template parms are listed
392    innermost first.  */
393
394 static void
395 push_inline_template_parms_recursive (tree parmlist, int levels)
396 {
397   tree parms = TREE_VALUE (parmlist);
398   int i;
399
400   if (levels > 1)
401     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
402
403   ++processing_template_decl;
404   current_template_parms
405     = tree_cons (size_int (processing_template_decl),
406                  parms, current_template_parms);
407   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
408
409   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
410                NULL);
411   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
412     {
413       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
414
415       if (parm == error_mark_node)
416         continue;
417
418       gcc_assert (DECL_P (parm));
419
420       switch (TREE_CODE (parm))
421         {
422         case TYPE_DECL:
423         case TEMPLATE_DECL:
424           pushdecl (parm);
425           break;
426
427         case PARM_DECL:
428           {
429             /* Make a CONST_DECL as is done in process_template_parm.
430                It is ugly that we recreate this here; the original
431                version built in process_template_parm is no longer
432                available.  */
433             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
434                                     CONST_DECL, DECL_NAME (parm),
435                                     TREE_TYPE (parm));
436             DECL_ARTIFICIAL (decl) = 1;
437             TREE_CONSTANT (decl) = 1;
438             TREE_READONLY (decl) = 1;
439             DECL_INITIAL (decl) = DECL_INITIAL (parm);
440             SET_DECL_TEMPLATE_PARM_P (decl);
441             pushdecl (decl);
442           }
443           break;
444
445         default:
446           gcc_unreachable ();
447         }
448     }
449 }
450
451 /* Restore the template parameter context for a member template or
452    a friend template defined in a class definition.  */
453
454 void
455 maybe_begin_member_template_processing (tree decl)
456 {
457   tree parms;
458   int levels = 0;
459
460   if (inline_needs_template_parms (decl))
461     {
462       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
463       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
464
465       if (DECL_TEMPLATE_SPECIALIZATION (decl))
466         {
467           --levels;
468           parms = TREE_CHAIN (parms);
469         }
470
471       push_inline_template_parms_recursive (parms, levels);
472     }
473
474   /* Remember how many levels of template parameters we pushed so that
475      we can pop them later.  */
476   VEC_safe_push (int, heap, inline_parm_levels, levels);
477 }
478
479 /* Undo the effects of maybe_begin_member_template_processing.  */
480
481 void
482 maybe_end_member_template_processing (void)
483 {
484   int i;
485   int last;
486
487   if (VEC_length (int, inline_parm_levels) == 0)
488     return;
489
490   last = VEC_pop (int, inline_parm_levels);
491   for (i = 0; i < last; ++i)
492     {
493       --processing_template_decl;
494       current_template_parms = TREE_CHAIN (current_template_parms);
495       poplevel (0, 0, 0);
496     }
497 }
498
499 /* Return a new template argument vector which contains all of ARGS,
500    but has as its innermost set of arguments the EXTRA_ARGS.  */
501
502 static tree
503 add_to_template_args (tree args, tree extra_args)
504 {
505   tree new_args;
506   int extra_depth;
507   int i;
508   int j;
509
510   if (args == NULL_TREE || extra_args == error_mark_node)
511     return extra_args;
512
513   extra_depth = TMPL_ARGS_DEPTH (extra_args);
514   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
515
516   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
517     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
518
519   for (j = 1; j <= extra_depth; ++j, ++i)
520     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
521
522   return new_args;
523 }
524
525 /* Like add_to_template_args, but only the outermost ARGS are added to
526    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
527    (EXTRA_ARGS) levels are added.  This function is used to combine
528    the template arguments from a partial instantiation with the
529    template arguments used to attain the full instantiation from the
530    partial instantiation.  */
531
532 static tree
533 add_outermost_template_args (tree args, tree extra_args)
534 {
535   tree new_args;
536
537   /* If there are more levels of EXTRA_ARGS than there are ARGS,
538      something very fishy is going on.  */
539   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
540
541   /* If *all* the new arguments will be the EXTRA_ARGS, just return
542      them.  */
543   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
544     return extra_args;
545
546   /* For the moment, we make ARGS look like it contains fewer levels.  */
547   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
548
549   new_args = add_to_template_args (args, extra_args);
550
551   /* Now, we restore ARGS to its full dimensions.  */
552   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
553
554   return new_args;
555 }
556
557 /* Return the N levels of innermost template arguments from the ARGS.  */
558
559 tree
560 get_innermost_template_args (tree args, int n)
561 {
562   tree new_args;
563   int extra_levels;
564   int i;
565
566   gcc_assert (n >= 0);
567
568   /* If N is 1, just return the innermost set of template arguments.  */
569   if (n == 1)
570     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
571
572   /* If we're not removing anything, just return the arguments we were
573      given.  */
574   extra_levels = TMPL_ARGS_DEPTH (args) - n;
575   gcc_assert (extra_levels >= 0);
576   if (extra_levels == 0)
577     return args;
578
579   /* Make a new set of arguments, not containing the outer arguments.  */
580   new_args = make_tree_vec (n);
581   for (i = 1; i <= n; ++i)
582     SET_TMPL_ARGS_LEVEL (new_args, i,
583                          TMPL_ARGS_LEVEL (args, i + extra_levels));
584
585   return new_args;
586 }
587
588 /* The inverse of get_innermost_template_args: Return all but the innermost
589    EXTRA_LEVELS levels of template arguments from the ARGS.  */
590
591 static tree
592 strip_innermost_template_args (tree args, int extra_levels)
593 {
594   tree new_args;
595   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
596   int i;
597
598   gcc_assert (n >= 0);
599
600   /* If N is 1, just return the outermost set of template arguments.  */
601   if (n == 1)
602     return TMPL_ARGS_LEVEL (args, 1);
603
604   /* If we're not removing anything, just return the arguments we were
605      given.  */
606   gcc_assert (extra_levels >= 0);
607   if (extra_levels == 0)
608     return args;
609
610   /* Make a new set of arguments, not containing the inner arguments.  */
611   new_args = make_tree_vec (n);
612   for (i = 1; i <= n; ++i)
613     SET_TMPL_ARGS_LEVEL (new_args, i,
614                          TMPL_ARGS_LEVEL (args, i));
615
616   return new_args;
617 }
618
619 /* We've got a template header coming up; push to a new level for storing
620    the parms.  */
621
622 void
623 begin_template_parm_list (void)
624 {
625   /* We use a non-tag-transparent scope here, which causes pushtag to
626      put tags in this scope, rather than in the enclosing class or
627      namespace scope.  This is the right thing, since we want
628      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
629      global template class, push_template_decl handles putting the
630      TEMPLATE_DECL into top-level scope.  For a nested template class,
631      e.g.:
632
633        template <class T> struct S1 {
634          template <class T> struct S2 {};
635        };
636
637      pushtag contains special code to call pushdecl_with_scope on the
638      TEMPLATE_DECL for S2.  */
639   begin_scope (sk_template_parms, NULL);
640   ++processing_template_decl;
641   ++processing_template_parmlist;
642   note_template_header (0);
643 }
644
645 /* This routine is called when a specialization is declared.  If it is
646    invalid to declare a specialization here, an error is reported and
647    false is returned, otherwise this routine will return true.  */
648
649 static bool
650 check_specialization_scope (void)
651 {
652   tree scope = current_scope ();
653
654   /* [temp.expl.spec]
655
656      An explicit specialization shall be declared in the namespace of
657      which the template is a member, or, for member templates, in the
658      namespace of which the enclosing class or enclosing class
659      template is a member.  An explicit specialization of a member
660      function, member class or static data member of a class template
661      shall be declared in the namespace of which the class template
662      is a member.  */
663   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
664     {
665       error ("explicit specialization in non-namespace scope %qD", scope);
666       return false;
667     }
668
669   /* [temp.expl.spec]
670
671      In an explicit specialization declaration for a member of a class
672      template or a member template that appears in namespace scope,
673      the member template and some of its enclosing class templates may
674      remain unspecialized, except that the declaration shall not
675      explicitly specialize a class member template if its enclosing
676      class templates are not explicitly specialized as well.  */
677   if (current_template_parms)
678     {
679       error ("enclosing class templates are not explicitly specialized");
680       return false;
681     }
682
683   return true;
684 }
685
686 /* We've just seen template <>.  */
687
688 bool
689 begin_specialization (void)
690 {
691   begin_scope (sk_template_spec, NULL);
692   note_template_header (1);
693   return check_specialization_scope ();
694 }
695
696 /* Called at then end of processing a declaration preceded by
697    template<>.  */
698
699 void
700 end_specialization (void)
701 {
702   finish_scope ();
703   reset_specialization ();
704 }
705
706 /* Any template <>'s that we have seen thus far are not referring to a
707    function specialization.  */
708
709 void
710 reset_specialization (void)
711 {
712   processing_specialization = 0;
713   template_header_count = 0;
714 }
715
716 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
717    it was of the form template <>.  */
718
719 static void
720 note_template_header (int specialization)
721 {
722   processing_specialization = specialization;
723   template_header_count++;
724 }
725
726 /* We're beginning an explicit instantiation.  */
727
728 void
729 begin_explicit_instantiation (void)
730 {
731   gcc_assert (!processing_explicit_instantiation);
732   processing_explicit_instantiation = true;
733 }
734
735
736 void
737 end_explicit_instantiation (void)
738 {
739   gcc_assert (processing_explicit_instantiation);
740   processing_explicit_instantiation = false;
741 }
742
743 /* An explicit specialization or partial specialization TMPL is being
744    declared.  Check that the namespace in which the specialization is
745    occurring is permissible.  Returns false iff it is invalid to
746    specialize TMPL in the current namespace.  */
747
748 static bool
749 check_specialization_namespace (tree tmpl)
750 {
751   tree tpl_ns = decl_namespace_context (tmpl);
752
753   /* [tmpl.expl.spec]
754
755      An explicit specialization shall be declared in the namespace of
756      which the template is a member, or, for member templates, in the
757      namespace of which the enclosing class or enclosing class
758      template is a member.  An explicit specialization of a member
759      function, member class or static data member of a class template
760      shall be declared in the namespace of which the class template is
761      a member.  */
762   if (current_scope() != DECL_CONTEXT (tmpl)
763       && !at_namespace_scope_p ())
764     {
765       error ("specialization of %qD must appear at namespace scope", tmpl);
766       return false;
767     }
768   if (is_associated_namespace (current_namespace, tpl_ns))
769     /* Same or super-using namespace.  */
770     return true;
771   else
772     {
773       permerror (input_location, "specialization of %qD in different namespace", tmpl);
774       permerror (input_location, "  from definition of %q+#D", tmpl);
775       return false;
776     }
777 }
778
779 /* SPEC is an explicit instantiation.  Check that it is valid to
780    perform this explicit instantiation in the current namespace.  */
781
782 static void
783 check_explicit_instantiation_namespace (tree spec)
784 {
785   tree ns;
786
787   /* DR 275: An explicit instantiation shall appear in an enclosing
788      namespace of its template.  */
789   ns = decl_namespace_context (spec);
790   if (!is_ancestor (current_namespace, ns))
791     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
792                "(which does not enclose namespace %qD)",
793                spec, current_namespace, ns);
794 }
795
796 /* The TYPE is being declared.  If it is a template type, that means it
797    is a partial specialization.  Do appropriate error-checking.  */
798
799 tree
800 maybe_process_partial_specialization (tree type)
801 {
802   tree context;
803
804   if (type == error_mark_node)
805     return error_mark_node;
806
807   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
808     {
809       error ("name of class shadows template template parameter %qD",
810              TYPE_NAME (type));
811       return error_mark_node;
812     }
813
814   context = TYPE_CONTEXT (type);
815
816   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
817     {
818       /* This is for ordinary explicit specialization and partial
819          specialization of a template class such as:
820
821            template <> class C<int>;
822
823          or:
824
825            template <class T> class C<T*>;
826
827          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
828
829       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
830           && !COMPLETE_TYPE_P (type))
831         {
832           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
833           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
834           if (processing_template_decl)
835             {
836               if (push_template_decl (TYPE_MAIN_DECL (type))
837                   == error_mark_node)
838                 return error_mark_node;
839             }
840         }
841       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
842         error ("specialization of %qT after instantiation", type);
843     }
844   else if (CLASS_TYPE_P (type)
845            && !CLASSTYPE_USE_TEMPLATE (type)
846            && CLASSTYPE_TEMPLATE_INFO (type)
847            && context && CLASS_TYPE_P (context)
848            && CLASSTYPE_TEMPLATE_INFO (context))
849     {
850       /* This is for an explicit specialization of member class
851          template according to [temp.expl.spec/18]:
852
853            template <> template <class U> class C<int>::D;
854
855          The context `C<int>' must be an implicit instantiation.
856          Otherwise this is just a member class template declared
857          earlier like:
858
859            template <> class C<int> { template <class U> class D; };
860            template <> template <class U> class C<int>::D;
861
862          In the first case, `C<int>::D' is a specialization of `C<T>::D'
863          while in the second case, `C<int>::D' is a primary template
864          and `C<T>::D' may not exist.  */
865
866       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
867           && !COMPLETE_TYPE_P (type))
868         {
869           tree t;
870           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
871
872           if (current_namespace
873               != decl_namespace_context (tmpl))
874             {
875               permerror (input_location, "specializing %q#T in different namespace", type);
876               permerror (input_location, "  from definition of %q+#D", tmpl);
877             }
878
879           /* Check for invalid specialization after instantiation:
880
881                template <> template <> class C<int>::D<int>;
882                template <> template <class U> class C<int>::D;  */
883
884           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
885                t; t = TREE_CHAIN (t))
886             {
887               tree inst = TREE_VALUE (t);
888               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
889                 {
890                   /* We already have a full specialization of this partial
891                      instantiation.  Reassign it to the new member
892                      specialization template.  */
893                   spec_entry elt;
894                   spec_entry **slot;
895
896                   elt.tmpl = most_general_template (tmpl);
897                   elt.args = CLASSTYPE_TI_ARGS (inst);
898                   elt.spec = inst;
899
900                   htab_remove_elt (type_specializations, &elt);
901
902                   elt.tmpl = tmpl;
903                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
904
905                   slot = (spec_entry **)
906                     htab_find_slot (type_specializations, &elt, INSERT);
907                   *slot = ggc_alloc_spec_entry ();
908                   **slot = elt;
909                 }
910               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
911                 /* But if we've had an implicit instantiation, that's a
912                    problem ([temp.expl.spec]/6).  */
913                 error ("specialization %qT after instantiation %qT",
914                        type, inst);
915             }
916
917           /* Mark TYPE as a specialization.  And as a result, we only
918              have one level of template argument for the innermost
919              class template.  */
920           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
921           CLASSTYPE_TI_ARGS (type)
922             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
923         }
924     }
925   else if (processing_specialization)
926     {
927        /* Someday C++0x may allow for enum template specialization.  */
928       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
929           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
930         pedwarn (input_location, OPT_pedantic, "template specialization "
931                  "of %qD not allowed by ISO C++", type);
932       else
933         {
934           error ("explicit specialization of non-template %qT", type);
935           return error_mark_node;
936         }
937     }
938
939   return type;
940 }
941
942 /* Returns nonzero if we can optimize the retrieval of specializations
943    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
944    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
945
946 static inline bool
947 optimize_specialization_lookup_p (tree tmpl)
948 {
949   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
950           && DECL_CLASS_SCOPE_P (tmpl)
951           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
952              parameter.  */
953           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
954           /* The optimized lookup depends on the fact that the
955              template arguments for the member function template apply
956              purely to the containing class, which is not true if the
957              containing class is an explicit or partial
958              specialization.  */
959           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
960           && !DECL_MEMBER_TEMPLATE_P (tmpl)
961           && !DECL_CONV_FN_P (tmpl)
962           /* It is possible to have a template that is not a member
963              template and is not a member of a template class:
964
965              template <typename T>
966              struct S { friend A::f(); };
967
968              Here, the friend function is a template, but the context does
969              not have template information.  The optimized lookup relies
970              on having ARGS be the template arguments for both the class
971              and the function template.  */
972           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
973 }
974
975 /* Retrieve the specialization (in the sense of [temp.spec] - a
976    specialization is either an instantiation or an explicit
977    specialization) of TMPL for the given template ARGS.  If there is
978    no such specialization, return NULL_TREE.  The ARGS are a vector of
979    arguments, or a vector of vectors of arguments, in the case of
980    templates with more than one level of parameters.
981
982    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
983    then we search for a partial specialization matching ARGS.  This
984    parameter is ignored if TMPL is not a class template.  */
985
986 static tree
987 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
988 {
989   if (args == error_mark_node)
990     return NULL_TREE;
991
992   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
993
994   /* There should be as many levels of arguments as there are
995      levels of parameters.  */
996   gcc_assert (TMPL_ARGS_DEPTH (args)
997               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
998
999   if (optimize_specialization_lookup_p (tmpl))
1000     {
1001       tree class_template;
1002       tree class_specialization;
1003       VEC(tree,gc) *methods;
1004       tree fns;
1005       int idx;
1006
1007       /* The template arguments actually apply to the containing
1008          class.  Find the class specialization with those
1009          arguments.  */
1010       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1011       class_specialization
1012         = retrieve_specialization (class_template, args, 0);
1013       if (!class_specialization)
1014         return NULL_TREE;
1015       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1016          for the specialization.  */
1017       idx = class_method_index_for_fn (class_specialization, tmpl);
1018       if (idx == -1)
1019         return NULL_TREE;
1020       /* Iterate through the methods with the indicated name, looking
1021          for the one that has an instance of TMPL.  */
1022       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1023       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1024         {
1025           tree fn = OVL_CURRENT (fns);
1026           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1027               /* using-declarations can add base methods to the method vec,
1028                  and we don't want those here.  */
1029               && DECL_CONTEXT (fn) == class_specialization)
1030             return fn;
1031         }
1032       return NULL_TREE;
1033     }
1034   else
1035     {
1036       spec_entry *found;
1037       spec_entry elt;
1038       htab_t specializations;
1039
1040       elt.tmpl = tmpl;
1041       elt.args = args;
1042       elt.spec = NULL_TREE;
1043
1044       if (DECL_CLASS_TEMPLATE_P (tmpl))
1045         specializations = type_specializations;
1046       else
1047         specializations = decl_specializations;
1048
1049       if (hash == 0)
1050         hash = hash_specialization (&elt);
1051       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1052       if (found)
1053         return found->spec;
1054     }
1055
1056   return NULL_TREE;
1057 }
1058
1059 /* Like retrieve_specialization, but for local declarations.  */
1060
1061 static tree
1062 retrieve_local_specialization (tree tmpl)
1063 {
1064   tree spec;
1065
1066   if (local_specializations == NULL)
1067     return NULL_TREE;
1068
1069   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1070                                      htab_hash_pointer (tmpl));
1071   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1072 }
1073
1074 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1075
1076 int
1077 is_specialization_of (tree decl, tree tmpl)
1078 {
1079   tree t;
1080
1081   if (TREE_CODE (decl) == FUNCTION_DECL)
1082     {
1083       for (t = decl;
1084            t != NULL_TREE;
1085            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1086         if (t == tmpl)
1087           return 1;
1088     }
1089   else
1090     {
1091       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1092
1093       for (t = TREE_TYPE (decl);
1094            t != NULL_TREE;
1095            t = CLASSTYPE_USE_TEMPLATE (t)
1096              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1097         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1098           return 1;
1099     }
1100
1101   return 0;
1102 }
1103
1104 /* Returns nonzero iff DECL is a specialization of friend declaration
1105    FRIEND_DECL according to [temp.friend].  */
1106
1107 bool
1108 is_specialization_of_friend (tree decl, tree friend_decl)
1109 {
1110   bool need_template = true;
1111   int template_depth;
1112
1113   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1114               || TREE_CODE (decl) == TYPE_DECL);
1115
1116   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1117      of a template class, we want to check if DECL is a specialization
1118      if this.  */
1119   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1120       && DECL_TEMPLATE_INFO (friend_decl)
1121       && !DECL_USE_TEMPLATE (friend_decl))
1122     {
1123       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1124       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1125       need_template = false;
1126     }
1127   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1128            && !PRIMARY_TEMPLATE_P (friend_decl))
1129     need_template = false;
1130
1131   /* There is nothing to do if this is not a template friend.  */
1132   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1133     return false;
1134
1135   if (is_specialization_of (decl, friend_decl))
1136     return true;
1137
1138   /* [temp.friend/6]
1139      A member of a class template may be declared to be a friend of a
1140      non-template class.  In this case, the corresponding member of
1141      every specialization of the class template is a friend of the
1142      class granting friendship.
1143
1144      For example, given a template friend declaration
1145
1146        template <class T> friend void A<T>::f();
1147
1148      the member function below is considered a friend
1149
1150        template <> struct A<int> {
1151          void f();
1152        };
1153
1154      For this type of template friend, TEMPLATE_DEPTH below will be
1155      nonzero.  To determine if DECL is a friend of FRIEND, we first
1156      check if the enclosing class is a specialization of another.  */
1157
1158   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1159   if (template_depth
1160       && DECL_CLASS_SCOPE_P (decl)
1161       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1162                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1163     {
1164       /* Next, we check the members themselves.  In order to handle
1165          a few tricky cases, such as when FRIEND_DECL's are
1166
1167            template <class T> friend void A<T>::g(T t);
1168            template <class T> template <T t> friend void A<T>::h();
1169
1170          and DECL's are
1171
1172            void A<int>::g(int);
1173            template <int> void A<int>::h();
1174
1175          we need to figure out ARGS, the template arguments from
1176          the context of DECL.  This is required for template substitution
1177          of `T' in the function parameter of `g' and template parameter
1178          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1179
1180       tree context = DECL_CONTEXT (decl);
1181       tree args = NULL_TREE;
1182       int current_depth = 0;
1183
1184       while (current_depth < template_depth)
1185         {
1186           if (CLASSTYPE_TEMPLATE_INFO (context))
1187             {
1188               if (current_depth == 0)
1189                 args = TYPE_TI_ARGS (context);
1190               else
1191                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1192               current_depth++;
1193             }
1194           context = TYPE_CONTEXT (context);
1195         }
1196
1197       if (TREE_CODE (decl) == FUNCTION_DECL)
1198         {
1199           bool is_template;
1200           tree friend_type;
1201           tree decl_type;
1202           tree friend_args_type;
1203           tree decl_args_type;
1204
1205           /* Make sure that both DECL and FRIEND_DECL are templates or
1206              non-templates.  */
1207           is_template = DECL_TEMPLATE_INFO (decl)
1208                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1209           if (need_template ^ is_template)
1210             return false;
1211           else if (is_template)
1212             {
1213               /* If both are templates, check template parameter list.  */
1214               tree friend_parms
1215                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1216                                          args, tf_none);
1217               if (!comp_template_parms
1218                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1219                       friend_parms))
1220                 return false;
1221
1222               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1223             }
1224           else
1225             decl_type = TREE_TYPE (decl);
1226
1227           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1228                                               tf_none, NULL_TREE);
1229           if (friend_type == error_mark_node)
1230             return false;
1231
1232           /* Check if return types match.  */
1233           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1234             return false;
1235
1236           /* Check if function parameter types match, ignoring the
1237              `this' parameter.  */
1238           friend_args_type = TYPE_ARG_TYPES (friend_type);
1239           decl_args_type = TYPE_ARG_TYPES (decl_type);
1240           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1241             friend_args_type = TREE_CHAIN (friend_args_type);
1242           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1243             decl_args_type = TREE_CHAIN (decl_args_type);
1244
1245           return compparms (decl_args_type, friend_args_type);
1246         }
1247       else
1248         {
1249           /* DECL is a TYPE_DECL */
1250           bool is_template;
1251           tree decl_type = TREE_TYPE (decl);
1252
1253           /* Make sure that both DECL and FRIEND_DECL are templates or
1254              non-templates.  */
1255           is_template
1256             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1257               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1258
1259           if (need_template ^ is_template)
1260             return false;
1261           else if (is_template)
1262             {
1263               tree friend_parms;
1264               /* If both are templates, check the name of the two
1265                  TEMPLATE_DECL's first because is_friend didn't.  */
1266               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1267                   != DECL_NAME (friend_decl))
1268                 return false;
1269
1270               /* Now check template parameter list.  */
1271               friend_parms
1272                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1273                                          args, tf_none);
1274               return comp_template_parms
1275                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1276                  friend_parms);
1277             }
1278           else
1279             return (DECL_NAME (decl)
1280                     == DECL_NAME (friend_decl));
1281         }
1282     }
1283   return false;
1284 }
1285
1286 /* Register the specialization SPEC as a specialization of TMPL with
1287    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1288    is actually just a friend declaration.  Returns SPEC, or an
1289    equivalent prior declaration, if available.  */
1290
1291 static tree
1292 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1293                          hashval_t hash)
1294 {
1295   tree fn;
1296   spec_entry **slot = NULL;
1297   spec_entry elt;
1298
1299   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1300
1301   if (TREE_CODE (spec) == FUNCTION_DECL
1302       && uses_template_parms (DECL_TI_ARGS (spec)))
1303     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1304        register it; we want the corresponding TEMPLATE_DECL instead.
1305        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1306        the more obvious `uses_template_parms (spec)' to avoid problems
1307        with default function arguments.  In particular, given
1308        something like this:
1309
1310           template <class T> void f(T t1, T t = T())
1311
1312        the default argument expression is not substituted for in an
1313        instantiation unless and until it is actually needed.  */
1314     return spec;
1315
1316   if (optimize_specialization_lookup_p (tmpl))
1317     /* We don't put these specializations in the hash table, but we might
1318        want to give an error about a mismatch.  */
1319     fn = retrieve_specialization (tmpl, args, 0);
1320   else
1321     {
1322       elt.tmpl = tmpl;
1323       elt.args = args;
1324       elt.spec = spec;
1325
1326       if (hash == 0)
1327         hash = hash_specialization (&elt);
1328
1329       slot = (spec_entry **)
1330         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1331       if (*slot)
1332         fn = (*slot)->spec;
1333       else
1334         fn = NULL_TREE;
1335     }
1336
1337   /* We can sometimes try to re-register a specialization that we've
1338      already got.  In particular, regenerate_decl_from_template calls
1339      duplicate_decls which will update the specialization list.  But,
1340      we'll still get called again here anyhow.  It's more convenient
1341      to simply allow this than to try to prevent it.  */
1342   if (fn == spec)
1343     return spec;
1344   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1345     {
1346       if (DECL_TEMPLATE_INSTANTIATION (fn))
1347         {
1348           if (DECL_ODR_USED (fn)
1349               || DECL_EXPLICIT_INSTANTIATION (fn))
1350             {
1351               error ("specialization of %qD after instantiation",
1352                      fn);
1353               return error_mark_node;
1354             }
1355           else
1356             {
1357               tree clone;
1358               /* This situation should occur only if the first
1359                  specialization is an implicit instantiation, the
1360                  second is an explicit specialization, and the
1361                  implicit instantiation has not yet been used.  That
1362                  situation can occur if we have implicitly
1363                  instantiated a member function and then specialized
1364                  it later.
1365
1366                  We can also wind up here if a friend declaration that
1367                  looked like an instantiation turns out to be a
1368                  specialization:
1369
1370                    template <class T> void foo(T);
1371                    class S { friend void foo<>(int) };
1372                    template <> void foo(int);
1373
1374                  We transform the existing DECL in place so that any
1375                  pointers to it become pointers to the updated
1376                  declaration.
1377
1378                  If there was a definition for the template, but not
1379                  for the specialization, we want this to look as if
1380                  there were no definition, and vice versa.  */
1381               DECL_INITIAL (fn) = NULL_TREE;
1382               duplicate_decls (spec, fn, is_friend);
1383               /* The call to duplicate_decls will have applied
1384                  [temp.expl.spec]:
1385
1386                    An explicit specialization of a function template
1387                    is inline only if it is explicitly declared to be,
1388                    and independently of whether its function template
1389                    is.
1390
1391                 to the primary function; now copy the inline bits to
1392                 the various clones.  */
1393               FOR_EACH_CLONE (clone, fn)
1394                 {
1395                   DECL_DECLARED_INLINE_P (clone)
1396                     = DECL_DECLARED_INLINE_P (fn);
1397                   DECL_SOURCE_LOCATION (clone)
1398                     = DECL_SOURCE_LOCATION (fn);
1399                 }
1400               check_specialization_namespace (fn);
1401
1402               return fn;
1403             }
1404         }
1405       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1406         {
1407           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1408             /* Dup decl failed, but this is a new definition. Set the
1409                line number so any errors match this new
1410                definition.  */
1411             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1412
1413           return fn;
1414         }
1415     }
1416   else if (fn)
1417     return duplicate_decls (spec, fn, is_friend);
1418
1419   /* A specialization must be declared in the same namespace as the
1420      template it is specializing.  */
1421   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1422       && !check_specialization_namespace (tmpl))
1423     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1424
1425   if (!optimize_specialization_lookup_p (tmpl))
1426     {
1427       gcc_assert (tmpl && args && spec);
1428       *slot = ggc_alloc_spec_entry ();
1429       **slot = elt;
1430       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1431           && PRIMARY_TEMPLATE_P (tmpl)
1432           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1433         /* TMPL is a forward declaration of a template function; keep a list
1434            of all specializations in case we need to reassign them to a friend
1435            template later in tsubst_friend_function.  */
1436         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1437           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1438     }
1439
1440   return spec;
1441 }
1442
1443 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1444    TMPL and ARGS members, ignores SPEC.  */
1445
1446 static int
1447 eq_specializations (const void *p1, const void *p2)
1448 {
1449   const spec_entry *e1 = (const spec_entry *)p1;
1450   const spec_entry *e2 = (const spec_entry *)p2;
1451
1452   return (e1->tmpl == e2->tmpl
1453           && comp_template_args (e1->args, e2->args));
1454 }
1455
1456 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1457
1458 static hashval_t
1459 hash_tmpl_and_args (tree tmpl, tree args)
1460 {
1461   hashval_t val = DECL_UID (tmpl);
1462   return iterative_hash_template_arg (args, val);
1463 }
1464
1465 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1466    ignoring SPEC.  */
1467
1468 static hashval_t
1469 hash_specialization (const void *p)
1470 {
1471   const spec_entry *e = (const spec_entry *)p;
1472   return hash_tmpl_and_args (e->tmpl, e->args);
1473 }
1474
1475 /* Recursively calculate a hash value for a template argument ARG, for use
1476    in the hash tables of template specializations.  */
1477
1478 hashval_t
1479 iterative_hash_template_arg (tree arg, hashval_t val)
1480 {
1481   unsigned HOST_WIDE_INT i;
1482   enum tree_code code;
1483   char tclass;
1484
1485   if (arg == NULL_TREE)
1486     return iterative_hash_object (arg, val);
1487
1488   if (!TYPE_P (arg))
1489     STRIP_NOPS (arg);
1490
1491   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1492     /* We can get one of these when re-hashing a previous entry in the middle
1493        of substituting into a pack expansion.  Just look through it.  */
1494     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1495
1496   code = TREE_CODE (arg);
1497   tclass = TREE_CODE_CLASS (code);
1498
1499   val = iterative_hash_object (code, val);
1500
1501   switch (code)
1502     {
1503     case ERROR_MARK:
1504       return val;
1505
1506     case IDENTIFIER_NODE:
1507       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1508
1509     case TREE_VEC:
1510       {
1511         int i, len = TREE_VEC_LENGTH (arg);
1512         for (i = 0; i < len; ++i)
1513           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1514         return val;
1515       }
1516
1517     case TYPE_PACK_EXPANSION:
1518     case EXPR_PACK_EXPANSION:
1519       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1520
1521     case TYPE_ARGUMENT_PACK:
1522     case NONTYPE_ARGUMENT_PACK:
1523       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1524
1525     case TREE_LIST:
1526       for (; arg; arg = TREE_CHAIN (arg))
1527         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1528       return val;
1529
1530     case OVERLOAD:
1531       for (; arg; arg = OVL_NEXT (arg))
1532         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1533       return val;
1534
1535     case CONSTRUCTOR:
1536       {
1537         tree field, value;
1538         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1539           {
1540             val = iterative_hash_template_arg (field, val);
1541             val = iterative_hash_template_arg (value, val);
1542           }
1543         return val;
1544       }
1545
1546     case PARM_DECL:
1547       if (!DECL_ARTIFICIAL (arg))
1548         {
1549           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1550           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1551         }
1552       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1553
1554     case TARGET_EXPR:
1555       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1556
1557     case PTRMEM_CST:
1558       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1559       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1560
1561     case TEMPLATE_PARM_INDEX:
1562       val = iterative_hash_template_arg
1563         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1564       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1565       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1566
1567     case TRAIT_EXPR:
1568       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1569       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1570       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1571
1572     case BASELINK:
1573       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1574                                          val);
1575       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1576                                           val);
1577
1578     case MODOP_EXPR:
1579       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1580       code = TREE_CODE (TREE_OPERAND (arg, 1));
1581       val = iterative_hash_object (code, val);
1582       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1583
1584     case LAMBDA_EXPR:
1585       /* A lambda can't appear in a template arg, but don't crash on
1586          erroneous input.  */
1587       gcc_assert (seen_error ());
1588       return val;
1589
1590     case CAST_EXPR:
1591     case STATIC_CAST_EXPR:
1592     case REINTERPRET_CAST_EXPR:
1593     case CONST_CAST_EXPR:
1594     case DYNAMIC_CAST_EXPR:
1595     case NEW_EXPR:
1596       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1597       /* Now hash operands as usual.  */
1598       break;
1599
1600     default:
1601       break;
1602     }
1603
1604   switch (tclass)
1605     {
1606     case tcc_type:
1607       if (TYPE_CANONICAL (arg))
1608         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1609                                       val);
1610       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1611         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1612       /* Otherwise just compare the types during lookup.  */
1613       return val;
1614
1615     case tcc_declaration:
1616     case tcc_constant:
1617       return iterative_hash_expr (arg, val);
1618
1619     default:
1620       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1621       {
1622         unsigned n = cp_tree_operand_length (arg);
1623         for (i = 0; i < n; ++i)
1624           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1625         return val;
1626       }
1627     }
1628   gcc_unreachable ();
1629   return 0;
1630 }
1631
1632 /* Unregister the specialization SPEC as a specialization of TMPL.
1633    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1634    if the SPEC was listed as a specialization of TMPL.
1635
1636    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1637
1638 bool
1639 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1640 {
1641   spec_entry **slot;
1642   spec_entry elt;
1643
1644   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1645   elt.args = TI_ARGS (tinfo);
1646   elt.spec = NULL_TREE;
1647
1648   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1649   if (*slot)
1650     {
1651       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1652       gcc_assert (new_spec != NULL_TREE);
1653       (*slot)->spec = new_spec;
1654       return 1;
1655     }
1656
1657   return 0;
1658 }
1659
1660 /* Compare an entry in the local specializations hash table P1 (which
1661    is really a pointer to a TREE_LIST) with P2 (which is really a
1662    DECL).  */
1663
1664 static int
1665 eq_local_specializations (const void *p1, const void *p2)
1666 {
1667   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1668 }
1669
1670 /* Hash P1, an entry in the local specializations table.  */
1671
1672 static hashval_t
1673 hash_local_specialization (const void* p1)
1674 {
1675   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1676 }
1677
1678 /* Like register_specialization, but for local declarations.  We are
1679    registering SPEC, an instantiation of TMPL.  */
1680
1681 static void
1682 register_local_specialization (tree spec, tree tmpl)
1683 {
1684   void **slot;
1685
1686   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1687                                    htab_hash_pointer (tmpl), INSERT);
1688   *slot = build_tree_list (spec, tmpl);
1689 }
1690
1691 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1692    specialized class.  */
1693
1694 bool
1695 explicit_class_specialization_p (tree type)
1696 {
1697   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1698     return false;
1699   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1700 }
1701
1702 /* Print the list of functions at FNS, going through all the overloads
1703    for each element of the list.  Alternatively, FNS can not be a
1704    TREE_LIST, in which case it will be printed together with all the
1705    overloads.
1706
1707    MORE and *STR should respectively be FALSE and NULL when the function
1708    is called from the outside.  They are used internally on recursive
1709    calls.  print_candidates manages the two parameters and leaves NULL
1710    in *STR when it ends.  */
1711
1712 static void
1713 print_candidates_1 (tree fns, bool more, const char **str)
1714 {
1715   tree fn, fn2;
1716   char *spaces = NULL;
1717
1718   for (fn = fns; fn; fn = OVL_NEXT (fn))
1719     if (TREE_CODE (fn) == TREE_LIST)
1720       {
1721         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1722           print_candidates_1 (TREE_VALUE (fn2),
1723                               TREE_CHAIN (fn2) || more, str);
1724       }
1725     else
1726       {
1727         if (!*str)
1728           {
1729             /* Pick the prefix string.  */
1730             if (!more && !OVL_NEXT (fns))
1731               {
1732                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1733                 continue;
1734               }
1735
1736             *str = _("candidates are:");
1737             spaces = get_spaces (*str);
1738           }
1739         error ("%s %+#D", *str, OVL_CURRENT (fn));
1740         *str = spaces ? spaces : *str;
1741       }
1742
1743   if (!more)
1744     {
1745       free (spaces);
1746       *str = NULL;
1747     }
1748 }
1749
1750 /* Print the list of candidate FNS in an error message.  FNS can also
1751    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1752
1753 void
1754 print_candidates (tree fns)
1755 {
1756   const char *str = NULL;
1757   print_candidates_1 (fns, false, &str);
1758   gcc_assert (str == NULL);
1759 }
1760
1761 /* Returns the template (one of the functions given by TEMPLATE_ID)
1762    which can be specialized to match the indicated DECL with the
1763    explicit template args given in TEMPLATE_ID.  The DECL may be
1764    NULL_TREE if none is available.  In that case, the functions in
1765    TEMPLATE_ID are non-members.
1766
1767    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1768    specialization of a member template.
1769
1770    The TEMPLATE_COUNT is the number of references to qualifying
1771    template classes that appeared in the name of the function. See
1772    check_explicit_specialization for a more accurate description.
1773
1774    TSK indicates what kind of template declaration (if any) is being
1775    declared.  TSK_TEMPLATE indicates that the declaration given by
1776    DECL, though a FUNCTION_DECL, has template parameters, and is
1777    therefore a template function.
1778
1779    The template args (those explicitly specified and those deduced)
1780    are output in a newly created vector *TARGS_OUT.
1781
1782    If it is impossible to determine the result, an error message is
1783    issued.  The error_mark_node is returned to indicate failure.  */
1784
1785 static tree
1786 determine_specialization (tree template_id,
1787                           tree decl,
1788                           tree* targs_out,
1789                           int need_member_template,
1790                           int template_count,
1791                           tmpl_spec_kind tsk)
1792 {
1793   tree fns;
1794   tree targs;
1795   tree explicit_targs;
1796   tree candidates = NULL_TREE;
1797   /* A TREE_LIST of templates of which DECL may be a specialization.
1798      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1799      corresponding TREE_PURPOSE is the set of template arguments that,
1800      when used to instantiate the template, would produce a function
1801      with the signature of DECL.  */
1802   tree templates = NULL_TREE;
1803   int header_count;
1804   cp_binding_level *b;
1805
1806   *targs_out = NULL_TREE;
1807
1808   if (template_id == error_mark_node || decl == error_mark_node)
1809     return error_mark_node;
1810
1811   fns = TREE_OPERAND (template_id, 0);
1812   explicit_targs = TREE_OPERAND (template_id, 1);
1813
1814   if (fns == error_mark_node)
1815     return error_mark_node;
1816
1817   /* Check for baselinks.  */
1818   if (BASELINK_P (fns))
1819     fns = BASELINK_FUNCTIONS (fns);
1820
1821   if (!is_overloaded_fn (fns))
1822     {
1823       error ("%qD is not a function template", fns);
1824       return error_mark_node;
1825     }
1826
1827   /* Count the number of template headers specified for this
1828      specialization.  */
1829   header_count = 0;
1830   for (b = current_binding_level;
1831        b->kind == sk_template_parms;
1832        b = b->level_chain)
1833     ++header_count;
1834
1835   for (; fns; fns = OVL_NEXT (fns))
1836     {
1837       tree fn = OVL_CURRENT (fns);
1838
1839       if (TREE_CODE (fn) == TEMPLATE_DECL)
1840         {
1841           tree decl_arg_types;
1842           tree fn_arg_types;
1843
1844           /* In case of explicit specialization, we need to check if
1845              the number of template headers appearing in the specialization
1846              is correct. This is usually done in check_explicit_specialization,
1847              but the check done there cannot be exhaustive when specializing
1848              member functions. Consider the following code:
1849
1850              template <> void A<int>::f(int);
1851              template <> template <> void A<int>::f(int);
1852
1853              Assuming that A<int> is not itself an explicit specialization
1854              already, the first line specializes "f" which is a non-template
1855              member function, whilst the second line specializes "f" which
1856              is a template member function. So both lines are syntactically
1857              correct, and check_explicit_specialization does not reject
1858              them.
1859
1860              Here, we can do better, as we are matching the specialization
1861              against the declarations. We count the number of template
1862              headers, and we check if they match TEMPLATE_COUNT + 1
1863              (TEMPLATE_COUNT is the number of qualifying template classes,
1864              plus there must be another header for the member template
1865              itself).
1866
1867              Notice that if header_count is zero, this is not a
1868              specialization but rather a template instantiation, so there
1869              is no check we can perform here.  */
1870           if (header_count && header_count != template_count + 1)
1871             continue;
1872
1873           /* Check that the number of template arguments at the
1874              innermost level for DECL is the same as for FN.  */
1875           if (current_binding_level->kind == sk_template_parms
1876               && !current_binding_level->explicit_spec_p
1877               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1878                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1879                                       (current_template_parms))))
1880             continue;
1881
1882           /* DECL might be a specialization of FN.  */
1883           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1884           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1885
1886           /* For a non-static member function, we need to make sure
1887              that the const qualification is the same.  Since
1888              get_bindings does not try to merge the "this" parameter,
1889              we must do the comparison explicitly.  */
1890           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1891               && !same_type_p (TREE_VALUE (fn_arg_types),
1892                                TREE_VALUE (decl_arg_types)))
1893             continue;
1894
1895           /* Skip the "this" parameter and, for constructors of
1896              classes with virtual bases, the VTT parameter.  A
1897              full specialization of a constructor will have a VTT
1898              parameter, but a template never will.  */ 
1899           decl_arg_types 
1900             = skip_artificial_parms_for (decl, decl_arg_types);
1901           fn_arg_types 
1902             = skip_artificial_parms_for (fn, fn_arg_types);
1903
1904           /* Check that the number of function parameters matches.
1905              For example,
1906                template <class T> void f(int i = 0);
1907                template <> void f<int>();
1908              The specialization f<int> is invalid but is not caught
1909              by get_bindings below.  */
1910           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1911             continue;
1912
1913           /* Function templates cannot be specializations; there are
1914              no partial specializations of functions.  Therefore, if
1915              the type of DECL does not match FN, there is no
1916              match.  */
1917           if (tsk == tsk_template)
1918             {
1919               if (compparms (fn_arg_types, decl_arg_types))
1920                 candidates = tree_cons (NULL_TREE, fn, candidates);
1921               continue;
1922             }
1923
1924           /* See whether this function might be a specialization of this
1925              template.  */
1926           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1927
1928           if (!targs)
1929             /* We cannot deduce template arguments that when used to
1930                specialize TMPL will produce DECL.  */
1931             continue;
1932
1933           /* Save this template, and the arguments deduced.  */
1934           templates = tree_cons (targs, fn, templates);
1935         }
1936       else if (need_member_template)
1937         /* FN is an ordinary member function, and we need a
1938            specialization of a member template.  */
1939         ;
1940       else if (TREE_CODE (fn) != FUNCTION_DECL)
1941         /* We can get IDENTIFIER_NODEs here in certain erroneous
1942            cases.  */
1943         ;
1944       else if (!DECL_FUNCTION_MEMBER_P (fn))
1945         /* This is just an ordinary non-member function.  Nothing can
1946            be a specialization of that.  */
1947         ;
1948       else if (DECL_ARTIFICIAL (fn))
1949         /* Cannot specialize functions that are created implicitly.  */
1950         ;
1951       else
1952         {
1953           tree decl_arg_types;
1954
1955           /* This is an ordinary member function.  However, since
1956              we're here, we can assume it's enclosing class is a
1957              template class.  For example,
1958
1959                template <typename T> struct S { void f(); };
1960                template <> void S<int>::f() {}
1961
1962              Here, S<int>::f is a non-template, but S<int> is a
1963              template class.  If FN has the same type as DECL, we
1964              might be in business.  */
1965
1966           if (!DECL_TEMPLATE_INFO (fn))
1967             /* Its enclosing class is an explicit specialization
1968                of a template class.  This is not a candidate.  */
1969             continue;
1970
1971           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1972                             TREE_TYPE (TREE_TYPE (fn))))
1973             /* The return types differ.  */
1974             continue;
1975
1976           /* Adjust the type of DECL in case FN is a static member.  */
1977           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1978           if (DECL_STATIC_FUNCTION_P (fn)
1979               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1980             decl_arg_types = TREE_CHAIN (decl_arg_types);
1981
1982           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1983                          decl_arg_types))
1984             /* They match!  */
1985             candidates = tree_cons (NULL_TREE, fn, candidates);
1986         }
1987     }
1988
1989   if (templates && TREE_CHAIN (templates))
1990     {
1991       /* We have:
1992
1993            [temp.expl.spec]
1994
1995            It is possible for a specialization with a given function
1996            signature to be instantiated from more than one function
1997            template.  In such cases, explicit specification of the
1998            template arguments must be used to uniquely identify the
1999            function template specialization being specialized.
2000
2001          Note that here, there's no suggestion that we're supposed to
2002          determine which of the candidate templates is most
2003          specialized.  However, we, also have:
2004
2005            [temp.func.order]
2006
2007            Partial ordering of overloaded function template
2008            declarations is used in the following contexts to select
2009            the function template to which a function template
2010            specialization refers:
2011
2012            -- when an explicit specialization refers to a function
2013               template.
2014
2015          So, we do use the partial ordering rules, at least for now.
2016          This extension can only serve to make invalid programs valid,
2017          so it's safe.  And, there is strong anecdotal evidence that
2018          the committee intended the partial ordering rules to apply;
2019          the EDG front end has that behavior, and John Spicer claims
2020          that the committee simply forgot to delete the wording in
2021          [temp.expl.spec].  */
2022       tree tmpl = most_specialized_instantiation (templates);
2023       if (tmpl != error_mark_node)
2024         {
2025           templates = tmpl;
2026           TREE_CHAIN (templates) = NULL_TREE;
2027         }
2028     }
2029
2030   if (templates == NULL_TREE && candidates == NULL_TREE)
2031     {
2032       error ("template-id %qD for %q+D does not match any template "
2033              "declaration", template_id, decl);
2034       if (header_count && header_count != template_count + 1)
2035         inform (input_location, "saw %d %<template<>%>, need %d for "
2036                 "specializing a member function template",
2037                 header_count, template_count + 1);
2038       return error_mark_node;
2039     }
2040   else if ((templates && TREE_CHAIN (templates))
2041            || (candidates && TREE_CHAIN (candidates))
2042            || (templates && candidates))
2043     {
2044       error ("ambiguous template specialization %qD for %q+D",
2045              template_id, decl);
2046       candidates = chainon (candidates, templates);
2047       print_candidates (candidates);
2048       return error_mark_node;
2049     }
2050
2051   /* We have one, and exactly one, match.  */
2052   if (candidates)
2053     {
2054       tree fn = TREE_VALUE (candidates);
2055       *targs_out = copy_node (DECL_TI_ARGS (fn));
2056       /* DECL is a re-declaration or partial instantiation of a template
2057          function.  */
2058       if (TREE_CODE (fn) == TEMPLATE_DECL)
2059         return fn;
2060       /* It was a specialization of an ordinary member function in a
2061          template class.  */
2062       return DECL_TI_TEMPLATE (fn);
2063     }
2064
2065   /* It was a specialization of a template.  */
2066   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2067   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2068     {
2069       *targs_out = copy_node (targs);
2070       SET_TMPL_ARGS_LEVEL (*targs_out,
2071                            TMPL_ARGS_DEPTH (*targs_out),
2072                            TREE_PURPOSE (templates));
2073     }
2074   else
2075     *targs_out = TREE_PURPOSE (templates);
2076   return TREE_VALUE (templates);
2077 }
2078
2079 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2080    but with the default argument values filled in from those in the
2081    TMPL_TYPES.  */
2082
2083 static tree
2084 copy_default_args_to_explicit_spec_1 (tree spec_types,
2085                                       tree tmpl_types)
2086 {
2087   tree new_spec_types;
2088
2089   if (!spec_types)
2090     return NULL_TREE;
2091
2092   if (spec_types == void_list_node)
2093     return void_list_node;
2094
2095   /* Substitute into the rest of the list.  */
2096   new_spec_types =
2097     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2098                                           TREE_CHAIN (tmpl_types));
2099
2100   /* Add the default argument for this parameter.  */
2101   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2102                          TREE_VALUE (spec_types),
2103                          new_spec_types);
2104 }
2105
2106 /* DECL is an explicit specialization.  Replicate default arguments
2107    from the template it specializes.  (That way, code like:
2108
2109      template <class T> void f(T = 3);
2110      template <> void f(double);
2111      void g () { f (); }
2112
2113    works, as required.)  An alternative approach would be to look up
2114    the correct default arguments at the call-site, but this approach
2115    is consistent with how implicit instantiations are handled.  */
2116
2117 static void
2118 copy_default_args_to_explicit_spec (tree decl)
2119 {
2120   tree tmpl;
2121   tree spec_types;
2122   tree tmpl_types;
2123   tree new_spec_types;
2124   tree old_type;
2125   tree new_type;
2126   tree t;
2127   tree object_type = NULL_TREE;
2128   tree in_charge = NULL_TREE;
2129   tree vtt = NULL_TREE;
2130
2131   /* See if there's anything we need to do.  */
2132   tmpl = DECL_TI_TEMPLATE (decl);
2133   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2134   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2135     if (TREE_PURPOSE (t))
2136       break;
2137   if (!t)
2138     return;
2139
2140   old_type = TREE_TYPE (decl);
2141   spec_types = TYPE_ARG_TYPES (old_type);
2142
2143   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2144     {
2145       /* Remove the this pointer, but remember the object's type for
2146          CV quals.  */
2147       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2148       spec_types = TREE_CHAIN (spec_types);
2149       tmpl_types = TREE_CHAIN (tmpl_types);
2150
2151       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2152         {
2153           /* DECL may contain more parameters than TMPL due to the extra
2154              in-charge parameter in constructors and destructors.  */
2155           in_charge = spec_types;
2156           spec_types = TREE_CHAIN (spec_types);
2157         }
2158       if (DECL_HAS_VTT_PARM_P (decl))
2159         {
2160           vtt = spec_types;
2161           spec_types = TREE_CHAIN (spec_types);
2162         }
2163     }
2164
2165   /* Compute the merged default arguments.  */
2166   new_spec_types =
2167     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2168
2169   /* Compute the new FUNCTION_TYPE.  */
2170   if (object_type)
2171     {
2172       if (vtt)
2173         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2174                                          TREE_VALUE (vtt),
2175                                          new_spec_types);
2176
2177       if (in_charge)
2178         /* Put the in-charge parameter back.  */
2179         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2180                                          TREE_VALUE (in_charge),
2181                                          new_spec_types);
2182
2183       new_type = build_method_type_directly (object_type,
2184                                              TREE_TYPE (old_type),
2185                                              new_spec_types);
2186     }
2187   else
2188     new_type = build_function_type (TREE_TYPE (old_type),
2189                                     new_spec_types);
2190   new_type = cp_build_type_attribute_variant (new_type,
2191                                               TYPE_ATTRIBUTES (old_type));
2192   new_type = build_exception_variant (new_type,
2193                                       TYPE_RAISES_EXCEPTIONS (old_type));
2194   TREE_TYPE (decl) = new_type;
2195 }
2196
2197 /* Check to see if the function just declared, as indicated in
2198    DECLARATOR, and in DECL, is a specialization of a function
2199    template.  We may also discover that the declaration is an explicit
2200    instantiation at this point.
2201
2202    Returns DECL, or an equivalent declaration that should be used
2203    instead if all goes well.  Issues an error message if something is
2204    amiss.  Returns error_mark_node if the error is not easily
2205    recoverable.
2206
2207    FLAGS is a bitmask consisting of the following flags:
2208
2209    2: The function has a definition.
2210    4: The function is a friend.
2211
2212    The TEMPLATE_COUNT is the number of references to qualifying
2213    template classes that appeared in the name of the function.  For
2214    example, in
2215
2216      template <class T> struct S { void f(); };
2217      void S<int>::f();
2218
2219    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2220    classes are not counted in the TEMPLATE_COUNT, so that in
2221
2222      template <class T> struct S {};
2223      template <> struct S<int> { void f(); }
2224      template <> void S<int>::f();
2225
2226    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2227    invalid; there should be no template <>.)
2228
2229    If the function is a specialization, it is marked as such via
2230    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2231    is set up correctly, and it is added to the list of specializations
2232    for that template.  */
2233
2234 tree
2235 check_explicit_specialization (tree declarator,
2236                                tree decl,
2237                                int template_count,
2238                                int flags)
2239 {
2240   int have_def = flags & 2;
2241   int is_friend = flags & 4;
2242   int specialization = 0;
2243   int explicit_instantiation = 0;
2244   int member_specialization = 0;
2245   tree ctype = DECL_CLASS_CONTEXT (decl);
2246   tree dname = DECL_NAME (decl);
2247   tmpl_spec_kind tsk;
2248
2249   if (is_friend)
2250     {
2251       if (!processing_specialization)
2252         tsk = tsk_none;
2253       else
2254         tsk = tsk_excessive_parms;
2255     }
2256   else
2257     tsk = current_tmpl_spec_kind (template_count);
2258
2259   switch (tsk)
2260     {
2261     case tsk_none:
2262       if (processing_specialization)
2263         {
2264           specialization = 1;
2265           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2266         }
2267       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2268         {
2269           if (is_friend)
2270             /* This could be something like:
2271
2272                template <class T> void f(T);
2273                class S { friend void f<>(int); }  */
2274             specialization = 1;
2275           else
2276             {
2277               /* This case handles bogus declarations like template <>
2278                  template <class T> void f<int>(); */
2279
2280               error ("template-id %qD in declaration of primary template",
2281                      declarator);
2282               return decl;
2283             }
2284         }
2285       break;
2286
2287     case tsk_invalid_member_spec:
2288       /* The error has already been reported in
2289          check_specialization_scope.  */
2290       return error_mark_node;
2291
2292     case tsk_invalid_expl_inst:
2293       error ("template parameter list used in explicit instantiation");
2294
2295       /* Fall through.  */
2296
2297     case tsk_expl_inst:
2298       if (have_def)
2299         error ("definition provided for explicit instantiation");
2300
2301       explicit_instantiation = 1;
2302       break;
2303
2304     case tsk_excessive_parms:
2305     case tsk_insufficient_parms:
2306       if (tsk == tsk_excessive_parms)
2307         error ("too many template parameter lists in declaration of %qD",
2308                decl);
2309       else if (template_header_count)
2310         error("too few template parameter lists in declaration of %qD", decl);
2311       else
2312         error("explicit specialization of %qD must be introduced by "
2313               "%<template <>%>", decl);
2314
2315       /* Fall through.  */
2316     case tsk_expl_spec:
2317       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2318       if (ctype)
2319         member_specialization = 1;
2320       else
2321         specialization = 1;
2322       break;
2323
2324     case tsk_template:
2325       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2326         {
2327           /* This case handles bogus declarations like template <>
2328              template <class T> void f<int>(); */
2329
2330           if (uses_template_parms (declarator))
2331             error ("function template partial specialization %qD "
2332                    "is not allowed", declarator);
2333           else
2334             error ("template-id %qD in declaration of primary template",
2335                    declarator);
2336           return decl;
2337         }
2338
2339       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2340         /* This is a specialization of a member template, without
2341            specialization the containing class.  Something like:
2342
2343              template <class T> struct S {
2344                template <class U> void f (U);
2345              };
2346              template <> template <class U> void S<int>::f(U) {}
2347
2348            That's a specialization -- but of the entire template.  */
2349         specialization = 1;
2350       break;
2351
2352     default:
2353       gcc_unreachable ();
2354     }
2355
2356   if (specialization || member_specialization)
2357     {
2358       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2359       for (; t; t = TREE_CHAIN (t))
2360         if (TREE_PURPOSE (t))
2361           {
2362             permerror (input_location, 
2363                        "default argument specified in explicit specialization");
2364             break;
2365           }
2366     }
2367
2368   if (specialization || member_specialization || explicit_instantiation)
2369     {
2370       tree tmpl = NULL_TREE;
2371       tree targs = NULL_TREE;
2372
2373       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2374       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2375         {
2376           tree fns;
2377
2378           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2379           if (ctype)
2380             fns = dname;
2381           else
2382             {
2383               /* If there is no class context, the explicit instantiation
2384                  must be at namespace scope.  */
2385               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2386
2387               /* Find the namespace binding, using the declaration
2388                  context.  */
2389               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2390                                            false, true);
2391               if (fns == error_mark_node || !is_overloaded_fn (fns))
2392                 {
2393                   error ("%qD is not a template function", dname);
2394                   fns = error_mark_node;
2395                 }
2396               else
2397                 {
2398                   tree fn = OVL_CURRENT (fns);
2399                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2400                                                 CP_DECL_CONTEXT (fn)))
2401                     error ("%qD is not declared in %qD",
2402                            decl, current_namespace);
2403                 }
2404             }
2405
2406           declarator = lookup_template_function (fns, NULL_TREE);
2407         }
2408
2409       if (declarator == error_mark_node)
2410         return error_mark_node;
2411
2412       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2413         {
2414           if (!explicit_instantiation)
2415             /* A specialization in class scope.  This is invalid,
2416                but the error will already have been flagged by
2417                check_specialization_scope.  */
2418             return error_mark_node;
2419           else
2420             {
2421               /* It's not valid to write an explicit instantiation in
2422                  class scope, e.g.:
2423
2424                    class C { template void f(); }
2425
2426                    This case is caught by the parser.  However, on
2427                    something like:
2428
2429                    template class C { void f(); };
2430
2431                    (which is invalid) we can get here.  The error will be
2432                    issued later.  */
2433               ;
2434             }
2435
2436           return decl;
2437         }
2438       else if (ctype != NULL_TREE
2439                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2440                    IDENTIFIER_NODE))
2441         {
2442           /* Find the list of functions in ctype that have the same
2443              name as the declared function.  */
2444           tree name = TREE_OPERAND (declarator, 0);
2445           tree fns = NULL_TREE;
2446           int idx;
2447
2448           if (constructor_name_p (name, ctype))
2449             {
2450               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2451
2452               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2453                   : !CLASSTYPE_DESTRUCTORS (ctype))
2454                 {
2455                   /* From [temp.expl.spec]:
2456
2457                      If such an explicit specialization for the member
2458                      of a class template names an implicitly-declared
2459                      special member function (clause _special_), the
2460                      program is ill-formed.
2461
2462                      Similar language is found in [temp.explicit].  */
2463                   error ("specialization of implicitly-declared special member function");
2464                   return error_mark_node;
2465                 }
2466
2467               name = is_constructor ? ctor_identifier : dtor_identifier;
2468             }
2469
2470           if (!DECL_CONV_FN_P (decl))
2471             {
2472               idx = lookup_fnfields_1 (ctype, name);
2473               if (idx >= 0)
2474                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2475             }
2476           else
2477             {
2478               VEC(tree,gc) *methods;
2479               tree ovl;
2480
2481               /* For a type-conversion operator, we cannot do a
2482                  name-based lookup.  We might be looking for `operator
2483                  int' which will be a specialization of `operator T'.
2484                  So, we find *all* the conversion operators, and then
2485                  select from them.  */
2486               fns = NULL_TREE;
2487
2488               methods = CLASSTYPE_METHOD_VEC (ctype);
2489               if (methods)
2490                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2491                      VEC_iterate (tree, methods, idx, ovl);
2492                      ++idx)
2493                   {
2494                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2495                       /* There are no more conversion functions.  */
2496                       break;
2497
2498                     /* Glue all these conversion functions together
2499                        with those we already have.  */
2500                     for (; ovl; ovl = OVL_NEXT (ovl))
2501                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2502                   }
2503             }
2504
2505           if (fns == NULL_TREE)
2506             {
2507               error ("no member function %qD declared in %qT", name, ctype);
2508               return error_mark_node;
2509             }
2510           else
2511             TREE_OPERAND (declarator, 0) = fns;
2512         }
2513
2514       /* Figure out what exactly is being specialized at this point.
2515          Note that for an explicit instantiation, even one for a
2516          member function, we cannot tell apriori whether the
2517          instantiation is for a member template, or just a member
2518          function of a template class.  Even if a member template is
2519          being instantiated, the member template arguments may be
2520          elided if they can be deduced from the rest of the
2521          declaration.  */
2522       tmpl = determine_specialization (declarator, decl,
2523                                        &targs,
2524                                        member_specialization,
2525                                        template_count,
2526                                        tsk);
2527
2528       if (!tmpl || tmpl == error_mark_node)
2529         /* We couldn't figure out what this declaration was
2530            specializing.  */
2531         return error_mark_node;
2532       else
2533         {
2534           tree gen_tmpl = most_general_template (tmpl);
2535
2536           if (explicit_instantiation)
2537             {
2538               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2539                  is done by do_decl_instantiation later.  */
2540
2541               int arg_depth = TMPL_ARGS_DEPTH (targs);
2542               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2543
2544               if (arg_depth > parm_depth)
2545                 {
2546                   /* If TMPL is not the most general template (for
2547                      example, if TMPL is a friend template that is
2548                      injected into namespace scope), then there will
2549                      be too many levels of TARGS.  Remove some of them
2550                      here.  */
2551                   int i;
2552                   tree new_targs;
2553
2554                   new_targs = make_tree_vec (parm_depth);
2555                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2556                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2557                       = TREE_VEC_ELT (targs, i);
2558                   targs = new_targs;
2559                 }
2560
2561               return instantiate_template (tmpl, targs, tf_error);
2562             }
2563
2564           /* If we thought that the DECL was a member function, but it
2565              turns out to be specializing a static member function,
2566              make DECL a static member function as well.  */
2567           if (DECL_STATIC_FUNCTION_P (tmpl)
2568               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2569             revert_static_member_fn (decl);
2570
2571           /* If this is a specialization of a member template of a
2572              template class, we want to return the TEMPLATE_DECL, not
2573              the specialization of it.  */
2574           if (tsk == tsk_template)
2575             {
2576               tree result = DECL_TEMPLATE_RESULT (tmpl);
2577               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2578               DECL_INITIAL (result) = NULL_TREE;
2579               if (have_def)
2580                 {
2581                   tree parm;
2582                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2583                   DECL_SOURCE_LOCATION (result)
2584                     = DECL_SOURCE_LOCATION (decl);
2585                   /* We want to use the argument list specified in the
2586                      definition, not in the original declaration.  */
2587                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2588                   for (parm = DECL_ARGUMENTS (result); parm;
2589                        parm = DECL_CHAIN (parm))
2590                     DECL_CONTEXT (parm) = result;
2591                 }
2592               return register_specialization (tmpl, gen_tmpl, targs,
2593                                               is_friend, 0);
2594             }
2595
2596           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2597           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2598
2599           /* Inherit default function arguments from the template
2600              DECL is specializing.  */
2601           copy_default_args_to_explicit_spec (decl);
2602
2603           /* This specialization has the same protection as the
2604              template it specializes.  */
2605           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2606           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2607
2608           /* 7.1.1-1 [dcl.stc]
2609
2610              A storage-class-specifier shall not be specified in an
2611              explicit specialization...
2612
2613              The parser rejects these, so unless action is taken here,
2614              explicit function specializations will always appear with
2615              global linkage.
2616
2617              The action recommended by the C++ CWG in response to C++
2618              defect report 605 is to make the storage class and linkage
2619              of the explicit specialization match the templated function:
2620
2621              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2622            */
2623           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2624             {
2625               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2626               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2627
2628               /* This specialization has the same linkage and visibility as
2629                  the function template it specializes.  */
2630               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2631               if (! TREE_PUBLIC (decl))
2632                 {
2633                   DECL_INTERFACE_KNOWN (decl) = 1;
2634                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2635                 }
2636               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2637               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2638                 {
2639                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2640                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2641                 }
2642             }
2643
2644           /* If DECL is a friend declaration, declared using an
2645              unqualified name, the namespace associated with DECL may
2646              have been set incorrectly.  For example, in:
2647
2648                template <typename T> void f(T);
2649                namespace N {
2650                  struct S { friend void f<int>(int); }
2651                }
2652
2653              we will have set the DECL_CONTEXT for the friend
2654              declaration to N, rather than to the global namespace.  */
2655           if (DECL_NAMESPACE_SCOPE_P (decl))
2656             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2657
2658           if (is_friend && !have_def)
2659             /* This is not really a declaration of a specialization.
2660                It's just the name of an instantiation.  But, it's not
2661                a request for an instantiation, either.  */
2662             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2663           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2664             /* This is indeed a specialization.  In case of constructors
2665                and destructors, we need in-charge and not-in-charge
2666                versions in V3 ABI.  */
2667             clone_function_decl (decl, /*update_method_vec_p=*/0);
2668
2669           /* Register this specialization so that we can find it
2670              again.  */
2671           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2672         }
2673     }
2674
2675   return decl;
2676 }
2677
2678 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2679    parameters.  These are represented in the same format used for
2680    DECL_TEMPLATE_PARMS.  */
2681
2682 int
2683 comp_template_parms (const_tree parms1, const_tree parms2)
2684 {
2685   const_tree p1;
2686   const_tree p2;
2687
2688   if (parms1 == parms2)
2689     return 1;
2690
2691   for (p1 = parms1, p2 = parms2;
2692        p1 != NULL_TREE && p2 != NULL_TREE;
2693        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2694     {
2695       tree t1 = TREE_VALUE (p1);
2696       tree t2 = TREE_VALUE (p2);
2697       int i;
2698
2699       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2700       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2701
2702       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2703         return 0;
2704
2705       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2706         {
2707           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2708           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2709
2710           /* If either of the template parameters are invalid, assume
2711              they match for the sake of error recovery. */
2712           if (parm1 == error_mark_node || parm2 == error_mark_node)
2713             return 1;
2714
2715           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2716             return 0;
2717
2718           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2719               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2720                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2721             continue;
2722           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2723             return 0;
2724         }
2725     }
2726
2727   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2728     /* One set of parameters has more parameters lists than the
2729        other.  */
2730     return 0;
2731
2732   return 1;
2733 }
2734
2735 /* Determine whether PARM is a parameter pack.  */
2736
2737 bool 
2738 template_parameter_pack_p (const_tree parm)
2739 {
2740   /* Determine if we have a non-type template parameter pack.  */
2741   if (TREE_CODE (parm) == PARM_DECL)
2742     return (DECL_TEMPLATE_PARM_P (parm) 
2743             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2744
2745   /* If this is a list of template parameters, we could get a
2746      TYPE_DECL or a TEMPLATE_DECL.  */ 
2747   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2748     parm = TREE_TYPE (parm);
2749
2750   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2751            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2752           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2753 }
2754
2755 /* Determine if T is a function parameter pack.  */
2756
2757 bool
2758 function_parameter_pack_p (const_tree t)
2759 {
2760   if (t && TREE_CODE (t) == PARM_DECL)
2761     return FUNCTION_PARAMETER_PACK_P (t);
2762   return false;
2763 }
2764
2765 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2766    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2767
2768 tree
2769 get_function_template_decl (const_tree primary_func_tmpl_inst)
2770 {
2771   if (! primary_func_tmpl_inst
2772       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2773       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2774     return NULL;
2775
2776   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2777 }
2778
2779 /* Return true iff the function parameter PARAM_DECL was expanded
2780    from the function parameter pack PACK.  */
2781
2782 bool
2783 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2784 {
2785   if (DECL_ARTIFICIAL (param_decl)
2786       || !function_parameter_pack_p (pack))
2787     return false;
2788
2789   /* The parameter pack and its pack arguments have the same
2790      DECL_PARM_INDEX.  */
2791   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2792 }
2793
2794 /* Determine whether ARGS describes a variadic template args list,
2795    i.e., one that is terminated by a template argument pack.  */
2796
2797 static bool 
2798 template_args_variadic_p (tree args)
2799 {
2800   int nargs;
2801   tree last_parm;
2802
2803   if (args == NULL_TREE)
2804     return false;
2805
2806   args = INNERMOST_TEMPLATE_ARGS (args);
2807   nargs = TREE_VEC_LENGTH (args);
2808
2809   if (nargs == 0)
2810     return false;
2811
2812   last_parm = TREE_VEC_ELT (args, nargs - 1);
2813
2814   return ARGUMENT_PACK_P (last_parm);
2815 }
2816
2817 /* Generate a new name for the parameter pack name NAME (an
2818    IDENTIFIER_NODE) that incorporates its */
2819
2820 static tree
2821 make_ith_pack_parameter_name (tree name, int i)
2822 {
2823   /* Munge the name to include the parameter index.  */
2824 #define NUMBUF_LEN 128
2825   char numbuf[NUMBUF_LEN];
2826   char* newname;
2827   int newname_len;
2828
2829   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2830   newname_len = IDENTIFIER_LENGTH (name)
2831                 + strlen (numbuf) + 2;
2832   newname = (char*)alloca (newname_len);
2833   snprintf (newname, newname_len,
2834             "%s#%i", IDENTIFIER_POINTER (name), i);
2835   return get_identifier (newname);
2836 }
2837
2838 /* Return true if T is a primary function
2839    or class template instantiation.  */
2840
2841 bool
2842 primary_template_instantiation_p (const_tree t)
2843 {
2844   if (!t)
2845     return false;
2846
2847   if (TREE_CODE (t) == FUNCTION_DECL)
2848     return DECL_LANG_SPECIFIC (t)
2849            && DECL_TEMPLATE_INSTANTIATION (t)
2850            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2851   else if (CLASS_TYPE_P (t))
2852     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2853            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2854   return false;
2855 }
2856
2857 /* Return true if PARM is a template template parameter.  */
2858
2859 bool
2860 template_template_parameter_p (const_tree parm)
2861 {
2862   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2863 }
2864
2865 /* Return the template parameters of T if T is a
2866    primary template instantiation, NULL otherwise.  */
2867
2868 tree
2869 get_primary_template_innermost_parameters (const_tree t)
2870 {
2871   tree parms = NULL, template_info = NULL;
2872
2873   if ((template_info = get_template_info (t))
2874       && primary_template_instantiation_p (t))
2875     parms = INNERMOST_TEMPLATE_PARMS
2876         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2877
2878   return parms;
2879 }
2880
2881 /* Return the template parameters of the LEVELth level from the full list
2882    of template parameters PARMS.  */
2883
2884 tree
2885 get_template_parms_at_level (tree parms, int level)
2886 {
2887   tree p;
2888   if (!parms
2889       || TREE_CODE (parms) != TREE_LIST
2890       || level > TMPL_PARMS_DEPTH (parms))
2891     return NULL_TREE;
2892
2893   for (p = parms; p; p = TREE_CHAIN (p))
2894     if (TMPL_PARMS_DEPTH (p) == level)
2895       return p;
2896
2897   return NULL_TREE;
2898 }
2899
2900 /* Returns the template arguments of T if T is a template instantiation,
2901    NULL otherwise.  */
2902
2903 tree
2904 get_template_innermost_arguments (const_tree t)
2905 {
2906   tree args = NULL, template_info = NULL;
2907
2908   if ((template_info = get_template_info (t))
2909       && TI_ARGS (template_info))
2910     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2911
2912   return args;
2913 }
2914
2915 /* Return the argument pack elements of T if T is a template argument pack,
2916    NULL otherwise.  */
2917
2918 tree
2919 get_template_argument_pack_elems (const_tree t)
2920 {
2921   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2922       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2923     return NULL;
2924
2925   return ARGUMENT_PACK_ARGS (t);
2926 }
2927
2928 /* Structure used to track the progress of find_parameter_packs_r.  */
2929 struct find_parameter_pack_data 
2930 {
2931   /* TREE_LIST that will contain all of the parameter packs found by
2932      the traversal.  */
2933   tree* parameter_packs;
2934
2935   /* Set of AST nodes that have been visited by the traversal.  */
2936   struct pointer_set_t *visited;
2937 };
2938
2939 /* Identifies all of the argument packs that occur in a template
2940    argument and appends them to the TREE_LIST inside DATA, which is a
2941    find_parameter_pack_data structure. This is a subroutine of
2942    make_pack_expansion and uses_parameter_packs.  */
2943 static tree
2944 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2945 {
2946   tree t = *tp;
2947   struct find_parameter_pack_data* ppd = 
2948     (struct find_parameter_pack_data*)data;
2949   bool parameter_pack_p = false;
2950
2951   /* Identify whether this is a parameter pack or not.  */
2952   switch (TREE_CODE (t))
2953     {
2954     case TEMPLATE_PARM_INDEX:
2955       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2956         parameter_pack_p = true;
2957       break;
2958
2959     case TEMPLATE_TYPE_PARM:
2960     case TEMPLATE_TEMPLATE_PARM:
2961       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2962         parameter_pack_p = true;
2963       break;
2964
2965     case PARM_DECL:
2966       if (FUNCTION_PARAMETER_PACK_P (t))
2967         {
2968           /* We don't want to walk into the type of a PARM_DECL,
2969              because we don't want to see the type parameter pack.  */
2970           *walk_subtrees = 0;
2971           parameter_pack_p = true;
2972         }
2973       break;
2974
2975     default:
2976       /* Not a parameter pack.  */
2977       break;
2978     }
2979
2980   if (parameter_pack_p)
2981     {
2982       /* Add this parameter pack to the list.  */
2983       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2984     }
2985
2986   if (TYPE_P (t))
2987     cp_walk_tree (&TYPE_CONTEXT (t), 
2988                   &find_parameter_packs_r, ppd, ppd->visited);
2989
2990   /* This switch statement will return immediately if we don't find a
2991      parameter pack.  */
2992   switch (TREE_CODE (t)) 
2993     {
2994     case TEMPLATE_PARM_INDEX:
2995       return NULL_TREE;
2996
2997     case BOUND_TEMPLATE_TEMPLATE_PARM:
2998       /* Check the template itself.  */
2999       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3000                     &find_parameter_packs_r, ppd, ppd->visited);
3001       /* Check the template arguments.  */
3002       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3003                     ppd->visited);
3004       *walk_subtrees = 0;
3005       return NULL_TREE;
3006
3007     case TEMPLATE_TYPE_PARM:
3008     case TEMPLATE_TEMPLATE_PARM:
3009       return NULL_TREE;
3010
3011     case PARM_DECL:
3012       return NULL_TREE;
3013
3014     case RECORD_TYPE:
3015       if (TYPE_PTRMEMFUNC_P (t))
3016         return NULL_TREE;
3017       /* Fall through.  */
3018
3019     case UNION_TYPE:
3020     case ENUMERAL_TYPE:
3021       if (TYPE_TEMPLATE_INFO (t))
3022         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3023                       &find_parameter_packs_r, ppd, ppd->visited);
3024
3025       *walk_subtrees = 0;
3026       return NULL_TREE;
3027
3028     case CONSTRUCTOR:
3029     case TEMPLATE_DECL:
3030       cp_walk_tree (&TREE_TYPE (t),
3031                     &find_parameter_packs_r, ppd, ppd->visited);
3032       return NULL_TREE;
3033  
3034     case TYPENAME_TYPE:
3035       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3036                    ppd, ppd->visited);
3037       *walk_subtrees = 0;
3038       return NULL_TREE;
3039       
3040     case TYPE_PACK_EXPANSION:
3041     case EXPR_PACK_EXPANSION:
3042       *walk_subtrees = 0;
3043       return NULL_TREE;
3044
3045     case INTEGER_TYPE:
3046       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3047                     ppd, ppd->visited);
3048       *walk_subtrees = 0;
3049       return NULL_TREE;
3050
3051     case IDENTIFIER_NODE:
3052       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3053                     ppd->visited);
3054       *walk_subtrees = 0;
3055       return NULL_TREE;
3056
3057     default:
3058       return NULL_TREE;
3059     }
3060
3061   return NULL_TREE;
3062 }
3063
3064 /* Determines if the expression or type T uses any parameter packs.  */
3065 bool
3066 uses_parameter_packs (tree t)
3067 {
3068   tree parameter_packs = NULL_TREE;
3069   struct find_parameter_pack_data ppd;
3070   ppd.parameter_packs = &parameter_packs;
3071   ppd.visited = pointer_set_create ();
3072   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3073   pointer_set_destroy (ppd.visited);
3074   return parameter_packs != NULL_TREE;
3075 }
3076
3077 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3078    representation a base-class initializer into a parameter pack
3079    expansion. If all goes well, the resulting node will be an
3080    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3081    respectively.  */
3082 tree 
3083 make_pack_expansion (tree arg)
3084 {
3085   tree result;
3086   tree parameter_packs = NULL_TREE;
3087   bool for_types = false;
3088   struct find_parameter_pack_data ppd;
3089
3090   if (!arg || arg == error_mark_node)
3091     return arg;
3092
3093   if (TREE_CODE (arg) == TREE_LIST)
3094     {
3095       /* The only time we will see a TREE_LIST here is for a base
3096          class initializer.  In this case, the TREE_PURPOSE will be a
3097          _TYPE node (representing the base class expansion we're
3098          initializing) and the TREE_VALUE will be a TREE_LIST
3099          containing the initialization arguments. 
3100
3101          The resulting expansion looks somewhat different from most
3102          expansions. Rather than returning just one _EXPANSION, we
3103          return a TREE_LIST whose TREE_PURPOSE is a
3104          TYPE_PACK_EXPANSION containing the bases that will be
3105          initialized.  The TREE_VALUE will be identical to the
3106          original TREE_VALUE, which is a list of arguments that will
3107          be passed to each base.  We do not introduce any new pack
3108          expansion nodes into the TREE_VALUE (although it is possible
3109          that some already exist), because the TREE_PURPOSE and
3110          TREE_VALUE all need to be expanded together with the same
3111          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3112          resulting TREE_PURPOSE will mention the parameter packs in
3113          both the bases and the arguments to the bases.  */
3114       tree purpose;
3115       tree value;
3116       tree parameter_packs = NULL_TREE;
3117
3118       /* Determine which parameter packs will be used by the base
3119          class expansion.  */
3120       ppd.visited = pointer_set_create ();
3121       ppd.parameter_packs = &parameter_packs;
3122       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3123                     &ppd, ppd.visited);
3124
3125       if (parameter_packs == NULL_TREE)
3126         {
3127           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3128           pointer_set_destroy (ppd.visited);
3129           return error_mark_node;
3130         }
3131
3132       if (TREE_VALUE (arg) != void_type_node)
3133         {
3134           /* Collect the sets of parameter packs used in each of the
3135              initialization arguments.  */
3136           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3137             {
3138               /* Determine which parameter packs will be expanded in this
3139                  argument.  */
3140               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3141                             &ppd, ppd.visited);
3142             }
3143         }
3144
3145       pointer_set_destroy (ppd.visited);
3146
3147       /* Create the pack expansion type for the base type.  */
3148       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3149       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3150       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3151
3152       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3153          they will rarely be compared to anything.  */
3154       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3155
3156       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3157     }
3158
3159   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3160     for_types = true;
3161
3162   /* Build the PACK_EXPANSION_* node.  */
3163   result = for_types
3164      ? cxx_make_type (TYPE_PACK_EXPANSION)
3165      : make_node (EXPR_PACK_EXPANSION);
3166   SET_PACK_EXPANSION_PATTERN (result, arg);
3167   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3168     {
3169       /* Propagate type and const-expression information.  */
3170       TREE_TYPE (result) = TREE_TYPE (arg);
3171       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3172     }
3173   else
3174     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3175        they will rarely be compared to anything.  */
3176     SET_TYPE_STRUCTURAL_EQUALITY (result);
3177
3178   /* Determine which parameter packs will be expanded.  */
3179   ppd.parameter_packs = &parameter_packs;
3180   ppd.visited = pointer_set_create ();
3181   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3182   pointer_set_destroy (ppd.visited);
3183
3184   /* Make sure we found some parameter packs.  */
3185   if (parameter_packs == NULL_TREE)
3186     {
3187       if (TYPE_P (arg))
3188         error ("expansion pattern %<%T%> contains no argument packs", arg);
3189       else
3190         error ("expansion pattern %<%E%> contains no argument packs", arg);
3191       return error_mark_node;
3192     }
3193   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3194
3195   return result;
3196 }
3197
3198 /* Checks T for any "bare" parameter packs, which have not yet been
3199    expanded, and issues an error if any are found. This operation can
3200    only be done on full expressions or types (e.g., an expression
3201    statement, "if" condition, etc.), because we could have expressions like:
3202
3203      foo(f(g(h(args)))...)
3204
3205    where "args" is a parameter pack. check_for_bare_parameter_packs
3206    should not be called for the subexpressions args, h(args),
3207    g(h(args)), or f(g(h(args))), because we would produce erroneous
3208    error messages. 
3209
3210    Returns TRUE and emits an error if there were bare parameter packs,
3211    returns FALSE otherwise.  */
3212 bool 
3213 check_for_bare_parameter_packs (tree t)
3214 {
3215   tree parameter_packs = NULL_TREE;
3216   struct find_parameter_pack_data ppd;
3217
3218   if (!processing_template_decl || !t || t == error_mark_node)
3219     return false;
3220
3221   if (TREE_CODE (t) == TYPE_DECL)
3222     t = TREE_TYPE (t);
3223
3224   ppd.parameter_packs = &parameter_packs;
3225   ppd.visited = pointer_set_create ();
3226   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3227   pointer_set_destroy (ppd.visited);
3228
3229   if (parameter_packs) 
3230     {
3231       error ("parameter packs not expanded with %<...%>:");
3232       while (parameter_packs)
3233         {
3234           tree pack = TREE_VALUE (parameter_packs);
3235           tree name = NULL_TREE;
3236
3237           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3238               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3239             name = TYPE_NAME (pack);
3240           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3241             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3242           else
3243             name = DECL_NAME (pack);
3244
3245           if (name)
3246             inform (input_location, "        %qD", name);
3247           else
3248             inform (input_location, "        <anonymous>");
3249
3250           parameter_packs = TREE_CHAIN (parameter_packs);
3251         }
3252
3253       return true;
3254     }
3255
3256   return false;
3257 }
3258
3259 /* Expand any parameter packs that occur in the template arguments in
3260    ARGS.  */
3261 tree
3262 expand_template_argument_pack (tree args)
3263 {
3264   tree result_args = NULL_TREE;
3265   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3266   int num_result_args = -1;
3267   int non_default_args_count = -1;
3268
3269   /* First, determine if we need to expand anything, and the number of
3270      slots we'll need.  */
3271   for (in_arg = 0; in_arg < nargs; ++in_arg)
3272     {
3273       tree arg = TREE_VEC_ELT (args, in_arg);
3274       if (arg == NULL_TREE)
3275         return args;
3276       if (ARGUMENT_PACK_P (arg))
3277         {
3278           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3279           if (num_result_args < 0)
3280             num_result_args = in_arg + num_packed;
3281           else
3282             num_result_args += num_packed;
3283         }
3284       else
3285         {
3286           if (num_result_args >= 0)
3287             num_result_args++;
3288         }
3289     }
3290
3291   /* If no expansion is necessary, we're done.  */
3292   if (num_result_args < 0)
3293     return args;
3294
3295   /* Expand arguments.  */
3296   result_args = make_tree_vec (num_result_args);
3297   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3298     non_default_args_count =
3299       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3300   for (in_arg = 0; in_arg < nargs; ++in_arg)
3301     {
3302       tree arg = TREE_VEC_ELT (args, in_arg);
3303       if (ARGUMENT_PACK_P (arg))
3304         {
3305           tree packed = ARGUMENT_PACK_ARGS (arg);
3306           int i, num_packed = TREE_VEC_LENGTH (packed);
3307           for (i = 0; i < num_packed; ++i, ++out_arg)
3308             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3309           if (non_default_args_count > 0)
3310             non_default_args_count += num_packed;
3311         }
3312       else
3313         {
3314           TREE_VEC_ELT (result_args, out_arg) = arg;
3315           ++out_arg;
3316         }
3317     }
3318   if (non_default_args_count >= 0)
3319     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3320   return result_args;
3321 }
3322
3323 /* Checks if DECL shadows a template parameter.
3324
3325    [temp.local]: A template-parameter shall not be redeclared within its
3326    scope (including nested scopes).
3327
3328    Emits an error and returns TRUE if the DECL shadows a parameter,
3329    returns FALSE otherwise.  */
3330
3331 bool
3332 check_template_shadow (tree decl)
3333 {
3334   tree olddecl;
3335
3336   /* If we're not in a template, we can't possibly shadow a template
3337      parameter.  */
3338   if (!current_template_parms)
3339     return true;
3340
3341   /* Figure out what we're shadowing.  */
3342   if (TREE_CODE (decl) == OVERLOAD)
3343     decl = OVL_CURRENT (decl);
3344   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3345
3346   /* If there's no previous binding for this name, we're not shadowing
3347      anything, let alone a template parameter.  */
3348   if (!olddecl)
3349     return true;
3350
3351   /* If we're not shadowing a template parameter, we're done.  Note
3352      that OLDDECL might be an OVERLOAD (or perhaps even an
3353      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3354      node.  */
3355   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3356     return true;
3357
3358   /* We check for decl != olddecl to avoid bogus errors for using a
3359      name inside a class.  We check TPFI to avoid duplicate errors for
3360      inline member templates.  */
3361   if (decl == olddecl
3362       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3363     return true;
3364
3365   error ("declaration of %q+#D", decl);
3366   error (" shadows template parm %q+#D", olddecl);
3367   return false;
3368 }
3369
3370 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3371    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3372    template parameters.  */
3373
3374 static tree
3375 build_template_parm_index (int index,
3376                            int level,
3377                            int orig_level,
3378                            int num_siblings,
3379                            tree decl,
3380                            tree type)
3381 {
3382   tree t = make_node (TEMPLATE_PARM_INDEX);
3383   TEMPLATE_PARM_IDX (t) = index;
3384   TEMPLATE_PARM_LEVEL (t) = level;
3385   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3386   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3387   TEMPLATE_PARM_DECL (t) = decl;
3388   TREE_TYPE (t) = type;
3389   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3390   TREE_READONLY (t) = TREE_READONLY (decl);
3391
3392   return t;
3393 }
3394
3395 /* Find the canonical type parameter for the given template type
3396    parameter.  Returns the canonical type parameter, which may be TYPE
3397    if no such parameter existed.  */
3398
3399 static tree
3400 canonical_type_parameter (tree type)
3401 {
3402   tree list;
3403   int idx = TEMPLATE_TYPE_IDX (type);
3404   if (!canonical_template_parms)
3405     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3406
3407   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3408     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3409
3410   list = VEC_index (tree, canonical_template_parms, idx);
3411   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3412     list = TREE_CHAIN (list);
3413
3414   if (list)
3415     return TREE_VALUE (list);
3416   else
3417     {
3418       VEC_replace(tree, canonical_template_parms, idx,
3419                   tree_cons (NULL_TREE, type, 
3420                              VEC_index (tree, canonical_template_parms, idx)));
3421       return type;
3422     }
3423 }
3424
3425 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3426    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3427    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3428    new one is created.  */
3429
3430 static tree
3431 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3432                             tsubst_flags_t complain)
3433 {
3434   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3435       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3436           != TEMPLATE_PARM_LEVEL (index) - levels)
3437       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3438     {
3439       tree orig_decl = TEMPLATE_PARM_DECL (index);
3440       tree decl, t;
3441
3442       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3443                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3444       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3445       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3446       DECL_ARTIFICIAL (decl) = 1;
3447       SET_DECL_TEMPLATE_PARM_P (decl);
3448
3449       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3450                                      TEMPLATE_PARM_LEVEL (index) - levels,
3451                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3452                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3453                                      decl, type);
3454       TEMPLATE_PARM_DESCENDANTS (index) = t;
3455       TEMPLATE_PARM_PARAMETER_PACK (t) 
3456         = TEMPLATE_PARM_PARAMETER_PACK (index);
3457
3458         /* Template template parameters need this.  */
3459       if (TREE_CODE (decl) == TEMPLATE_DECL)
3460         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3461           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3462            args, complain);
3463     }
3464
3465   return TEMPLATE_PARM_DESCENDANTS (index);
3466 }
3467
3468 /* Process information from new template parameter PARM and append it
3469    to the LIST being built.  This new parameter is a non-type
3470    parameter iff IS_NON_TYPE is true. This new parameter is a
3471    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3472    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3473    parameter list PARM belongs to. This is used used to create a
3474    proper canonical type for the type of PARM that is to be created,
3475    iff PARM is a type.  If the size is not known, this parameter shall
3476    be set to 0.  */
3477
3478 tree
3479 process_template_parm (tree list, location_t parm_loc, tree parm,
3480                        bool is_non_type, bool is_parameter_pack,
3481                        unsigned num_template_parms)
3482 {
3483   tree decl = 0;
3484   tree defval;
3485   tree err_parm_list;
3486   int idx = 0;
3487
3488   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3489   defval = TREE_PURPOSE (parm);
3490
3491   if (list)
3492     {
3493       tree p = tree_last (list);
3494
3495       if (p && TREE_VALUE (p) != error_mark_node)
3496         {
3497           p = TREE_VALUE (p);
3498           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3499             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3500           else
3501             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3502         }
3503
3504       ++idx;
3505     }
3506   else
3507     idx = 0;
3508
3509   if (is_non_type)
3510     {
3511       parm = TREE_VALUE (parm);
3512
3513       SET_DECL_TEMPLATE_PARM_P (parm);
3514
3515       if (TREE_TYPE (parm) == error_mark_node)
3516         {
3517           err_parm_list = build_tree_list (defval, parm);
3518           TREE_VALUE (err_parm_list) = error_mark_node;
3519            return chainon (list, err_parm_list);
3520         }
3521       else
3522       {
3523         /* [temp.param]
3524
3525            The top-level cv-qualifiers on the template-parameter are
3526            ignored when determining its type.  */
3527         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3528         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3529           {
3530             err_parm_list = build_tree_list (defval, parm);
3531             TREE_VALUE (err_parm_list) = error_mark_node;
3532              return chainon (list, err_parm_list);
3533           }
3534
3535         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3536           {
3537             /* This template parameter is not a parameter pack, but it
3538                should be. Complain about "bare" parameter packs.  */
3539             check_for_bare_parameter_packs (TREE_TYPE (parm));
3540             
3541             /* Recover by calling this a parameter pack.  */
3542             is_parameter_pack = true;
3543           }
3544       }
3545
3546       /* A template parameter is not modifiable.  */
3547       TREE_CONSTANT (parm) = 1;
3548       TREE_READONLY (parm) = 1;
3549       decl = build_decl (parm_loc,
3550                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3551       TREE_CONSTANT (decl) = 1;
3552       TREE_READONLY (decl) = 1;
3553       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3554         = build_template_parm_index (idx, processing_template_decl,
3555                                      processing_template_decl,
3556                                      num_template_parms,
3557                                      decl, TREE_TYPE (parm));
3558
3559       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3560         = is_parameter_pack;
3561     }
3562   else
3563     {
3564       tree t;
3565       parm = TREE_VALUE (TREE_VALUE (parm));
3566
3567       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3568         {
3569           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3570           /* This is for distinguishing between real templates and template
3571              template parameters */
3572           TREE_TYPE (parm) = t;
3573           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3574           decl = parm;
3575         }
3576       else
3577         {
3578           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3579           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3580           decl = build_decl (parm_loc,
3581                              TYPE_DECL, parm, t);
3582         }
3583
3584       TYPE_NAME (t) = decl;
3585       TYPE_STUB_DECL (t) = decl;
3586       parm = decl;
3587       TEMPLATE_TYPE_PARM_INDEX (t)
3588         = build_template_parm_index (idx, processing_template_decl,
3589                                      processing_template_decl,
3590                                      num_template_parms,
3591                                      decl, TREE_TYPE (parm));
3592       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3593       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3594     }
3595   DECL_ARTIFICIAL (decl) = 1;
3596   SET_DECL_TEMPLATE_PARM_P (decl);
3597   pushdecl (decl);
3598   parm = build_tree_list (defval, parm);
3599   return chainon (list, parm);
3600 }
3601
3602 /* The end of a template parameter list has been reached.  Process the
3603    tree list into a parameter vector, converting each parameter into a more
3604    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3605    as PARM_DECLs.  */
3606
3607 tree
3608 end_template_parm_list (tree parms)
3609 {
3610   int nparms;
3611   tree parm, next;
3612   tree saved_parmlist = make_tree_vec (list_length (parms));
3613
3614   current_template_parms
3615     = tree_cons (size_int (processing_template_decl),
3616                  saved_parmlist, current_template_parms);
3617
3618   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3619     {
3620       next = TREE_CHAIN (parm);
3621       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3622       TREE_CHAIN (parm) = NULL_TREE;
3623     }
3624
3625   --processing_template_parmlist;
3626
3627   return saved_parmlist;
3628 }
3629
3630 /* Create a new type almost identical to TYPE but which has the
3631    following differences:
3632
3633      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3634      template sibling parameters of T.
3635
3636      2/ T has a new canonical type that matches the new number
3637      of sibling parms.
3638
3639      3/ From now on, T is going to be what lookups referring to the
3640      name of TYPE will return. No lookup should return TYPE anymore.
3641
3642    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3643
3644    This is a subroutine of fixup_template_parms.  */
3645
3646 static tree
3647 fixup_template_type_parm_type (tree type, int num_parms)
3648 {
3649   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3650   tree t;
3651   /* This is the decl which name is inserted into the symbol table for
3652      the template parm type. So whenever we lookup the type name, this
3653      is the DECL we get.  */
3654   tree decl;
3655
3656   /* Do not fix up the type twice.  */
3657   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3658     return type;
3659
3660   t = copy_type (type);
3661   decl = TYPE_NAME (t);
3662
3663   TYPE_MAIN_VARIANT (t) = t;
3664   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3665   TYPE_POINTER_TO (t) = 0;
3666   TYPE_REFERENCE_TO (t) = 0;
3667
3668   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3669                                    TEMPLATE_PARM_LEVEL (orig_idx),
3670                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3671                                    num_parms,
3672                                    decl, t);
3673   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3674   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3675   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3676
3677   TYPE_STUB_DECL (t) = decl;
3678   TEMPLATE_TYPE_DECL (t) = decl;
3679   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3680     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3681
3682   /* Update the type associated to the type name stored in the symbol
3683      table. Now, whenever the type name is looked up, the resulting
3684      type is properly fixed up.  */
3685   TREE_TYPE (decl) = t;
3686
3687   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3688
3689   return t;
3690 }
3691
3692 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3693    identical to I, but that is fixed up as to:
3694
3695    1/ carry the number of sibling parms (NUM_PARMS) of the template
3696    parm represented by I.
3697
3698    2/ replace all references to template parm types declared before I
3699    (in the same template parm list as I) by references to template
3700    parm types contained in ARGS. ARGS should contain the list of
3701    template parms that have been fixed up so far, in a form suitable
3702    to be passed to tsubst.
3703
3704    This is a subroutine of fixup_template_parms.  */
3705
3706 static tree
3707 fixup_template_parm_index (tree i, tree args, int num_parms)
3708 {
3709   tree index, decl, type;
3710
3711   if (i == NULL_TREE
3712       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3713       /* Do not fix up the index twice.  */
3714       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3715     return i;
3716
3717   decl = TEMPLATE_PARM_DECL (i);
3718   type = TREE_TYPE (decl);
3719
3720   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3721                                      TEMPLATE_PARM_LEVEL (i),
3722                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3723                                      num_parms,
3724                                      decl, type);
3725
3726   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3727   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3728
3729   type = tsubst (type, args, tf_none, NULL_TREE);
3730   
3731   TREE_TYPE (decl) = type;
3732   TREE_TYPE (index) = type;
3733
3734   return index;
3735 }
3736
3737 /* 
3738    This is a subroutine of fixup_template_parms.
3739
3740    It computes the canonical type of the type of the template
3741    parameter PARM_DESC and update all references to that type so that
3742    they use the newly computed canonical type. No access check is
3743    performed during the fixup. PARM_DESC is a TREE_LIST which
3744    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3745    default argument of the template parm if any. IDX is the index of
3746    the template parameter, starting at 0. NUM_PARMS is the number of
3747    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3748    TREE_VEC containing the full set of template parameters in a form
3749    suitable to be passed to substs functions as their ARGS
3750    argument. This is what current_template_args returns for a given
3751    template. The innermost vector of args in ARGLIST is the set of
3752    template parms that have been fixed up so far. This function adds
3753    the fixed up parameter into that vector.  */
3754
3755 static void
3756 fixup_template_parm (tree parm_desc,
3757                      int idx,
3758                      int num_parms,
3759                      tree arglist)
3760 {
3761   tree parm = TREE_VALUE (parm_desc);
3762   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3763
3764   push_deferring_access_checks (dk_no_check);
3765
3766   if (TREE_CODE (parm) == TYPE_DECL)
3767     {
3768       /* PARM is a template type parameter. Fix up its type, add
3769          the fixed-up template parm to the vector of fixed-up
3770          template parms so far, and substitute the fixed-up
3771          template parms into the default argument of this
3772          parameter.  */
3773       tree t =
3774         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3775       TREE_TYPE (parm) = t;
3776
3777       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3778     }
3779   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3780     {
3781       /* PARM is a template template parameter. This is going to
3782          be interesting.  */
3783       tree tparms, targs, innermost_args, t;
3784       int j;
3785
3786       /* First, fix up the parms of the template template parm
3787          because the parms are involved in defining the new canonical
3788          type of the template template parm.  */
3789
3790       /* So we need to substitute the template parm types that have
3791          been fixed up so far into the template parms of this template
3792          template parm. E.g, consider this:
3793
3794          template<class T, template<T u> class TT> class S;
3795
3796          In this case we want to substitute T into the
3797          template parameters of TT.
3798
3799          So let's walk the template parms of PARM here, and
3800          tsubst ARGLIST into into each of the template
3801          parms.   */
3802
3803       /* For this substitution we need to build the full set of
3804          template parameters and use that as arguments for the
3805          tsubsting function.  */
3806       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3807
3808       /* This will contain the innermost parms of PARM into which
3809          we have substituted so far.  */
3810       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3811       targs = add_to_template_args (arglist, innermost_args);
3812       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3813         {
3814           tree parameter;
3815
3816           parameter = TREE_VEC_ELT (tparms, j);
3817
3818           /* INNERMOST_ARGS needs to have at least the same number
3819              of elements as the index PARAMETER, ortherwise
3820              tsubsting into PARAMETER will result in partially
3821              instantiating it, reducing its tempate parm
3822              level. Let's tactically fill INNERMOST_ARGS for that
3823              purpose.  */
3824           TREE_VEC_ELT (innermost_args, j) =
3825             template_parm_to_arg (parameter);
3826
3827           fixup_template_parm (parameter, j,
3828                                TREE_VEC_LENGTH (tparms),
3829                                targs);
3830         }
3831
3832       /* Now fix up the type of the template template parm.  */
3833
3834       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3835       TREE_TYPE (parm) = t;
3836
3837       TREE_VEC_ELT (fixedup_args, idx) =
3838         template_parm_to_arg (parm_desc);
3839     }
3840   else if (TREE_CODE (parm) == PARM_DECL)
3841     {
3842       /* PARM is a non-type template parameter. We need to:
3843
3844        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3845        proper number of sibling parameters.
3846
3847        * Make lookups of the template parameter return a reference
3848        to the fixed-up index. No lookup should return references
3849        to the former index anymore.
3850
3851        * Substitute the template parms that got fixed up so far
3852
3853        * into the type of PARM.  */
3854
3855       tree index = DECL_INITIAL (parm);
3856
3857       /* PUSHED_DECL is the decl added to the symbol table with
3858          the name of the parameter. E,g:
3859              
3860          template<class T, T u> //#0
3861          auto my_function(T t) -> decltype(u); //#1
3862
3863          Here, when looking up u at //#1, we get the decl of u
3864          resulting from the declaration in #0. This is what
3865          PUSHED_DECL is. We need to replace the reference to the
3866          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3867          fixed-up TEMPLATE_PARM_INDEX.  */
3868       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3869
3870       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3871          fixup the type of PUSHED_DECL as well and luckily
3872          fixup_template_parm_index does it for us too.  */
3873       tree fixed_up_index =
3874         fixup_template_parm_index (index, arglist, num_parms);
3875
3876       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3877
3878       /* Add this fixed up PARM to the template parms we've fixed
3879          up so far and use that to substitute the fixed-up
3880          template parms into the type of PARM.  */
3881       TREE_VEC_ELT (fixedup_args, idx) =
3882         template_parm_to_arg (parm_desc);
3883       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3884                                  tf_none, NULL_TREE);
3885     }
3886
3887   TREE_PURPOSE (parm_desc) =
3888     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3889                          arglist, tf_none, parm);
3890
3891   pop_deferring_access_checks ();
3892 }
3893
3894 /* Walk the current template parms and properly compute the canonical
3895    types of the dependent types created during
3896    cp_parser_template_parameter_list.  */
3897
3898 void
3899 fixup_template_parms (void)
3900 {
3901   tree arglist;
3902   tree parameter_vec;
3903   tree fixedup_args;
3904   int i, num_parms;
3905
3906   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3907   if (parameter_vec == NULL_TREE)
3908     return;
3909
3910   num_parms = TREE_VEC_LENGTH (parameter_vec);
3911
3912   /* This vector contains the current innermost template parms that
3913      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3914      to be passed to tsubst* functions as their ARGS argument.  */
3915   fixedup_args = make_tree_vec (num_parms);
3916
3917   /* This vector contains the full set of template parms in a form
3918      suitable to be passed to substs functions as their ARGS
3919      argument.  */
3920   arglist = current_template_args ();
3921   arglist = add_outermost_template_args (arglist, fixedup_args);
3922
3923   /* Let's do the proper fixup now.  */
3924   for (i = 0; i < num_parms; ++i)
3925     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3926                          i, num_parms, arglist);
3927 }
3928
3929 /* end_template_decl is called after a template declaration is seen.  */
3930
3931 void
3932 end_template_decl (void)
3933 {
3934   reset_specialization ();
3935
3936   if (! processing_template_decl)
3937     return;
3938
3939   /* This matches the pushlevel in begin_template_parm_list.  */
3940   finish_scope ();
3941
3942   --processing_template_decl;
3943   current_template_parms = TREE_CHAIN (current_template_parms);
3944 }
3945
3946 /* Takes a TREE_LIST representing a template parameter and convert it
3947    into an argument suitable to be passed to the type substitution
3948    functions.  Note that If the TREE_LIST contains an error_mark
3949    node, the returned argument is error_mark_node.  */
3950
3951 static tree
3952 template_parm_to_arg (tree t)
3953 {
3954
3955   if (t == NULL_TREE
3956       || TREE_CODE (t) != TREE_LIST)
3957     return t;
3958
3959   if (error_operand_p (TREE_VALUE (t)))
3960     return error_mark_node;
3961
3962   t = TREE_VALUE (t);
3963
3964   if (TREE_CODE (t) == TYPE_DECL
3965       || TREE_CODE (t) == TEMPLATE_DECL)
3966     {
3967       t = TREE_TYPE (t);
3968
3969       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3970         {
3971           /* Turn this argument into a TYPE_ARGUMENT_PACK
3972              with a single element, which expands T.  */
3973           tree vec = make_tree_vec (1);
3974 #ifdef ENABLE_CHECKING
3975           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3976             (vec, TREE_VEC_LENGTH (vec));
3977 #endif
3978           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3979
3980           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3981           SET_ARGUMENT_PACK_ARGS (t, vec);
3982         }
3983     }
3984   else
3985     {
3986       t = DECL_INITIAL (t);
3987
3988       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3989         {
3990           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3991              with a single element, which expands T.  */
3992           tree vec = make_tree_vec (1);
3993           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3994 #ifdef ENABLE_CHECKING
3995           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3996             (vec, TREE_VEC_LENGTH (vec));
3997 #endif
3998           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3999
4000           t  = make_node (NONTYPE_ARGUMENT_PACK);
4001           SET_ARGUMENT_PACK_ARGS (t, vec);
4002           TREE_TYPE (t) = type;
4003         }
4004     }
4005   return t;
4006 }
4007
4008 /* Within the declaration of a template, return all levels of template
4009    parameters that apply.  The template parameters are represented as
4010    a TREE_VEC, in the form documented in cp-tree.h for template
4011    arguments.  */
4012
4013 static tree
4014 current_template_args (void)
4015 {
4016   tree header;
4017   tree args = NULL_TREE;
4018   int length = TMPL_PARMS_DEPTH (current_template_parms);
4019   int l = length;
4020
4021   /* If there is only one level of template parameters, we do not
4022      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4023      TREE_VEC containing the arguments.  */
4024   if (length > 1)
4025     args = make_tree_vec (length);
4026
4027   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4028     {
4029       tree a = copy_node (TREE_VALUE (header));
4030       int i;
4031
4032       TREE_TYPE (a) = NULL_TREE;
4033       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4034         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4035
4036 #ifdef ENABLE_CHECKING
4037       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4038 #endif
4039
4040       if (length > 1)
4041         TREE_VEC_ELT (args, --l) = a;
4042       else
4043         args = a;
4044     }
4045
4046     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4047       /* This can happen for template parms of a template template
4048          parameter, e.g:
4049
4050          template<template<class T, class U> class TT> struct S;
4051
4052          Consider the level of the parms of TT; T and U both have
4053          level 2; TT has no template parm of level 1. So in this case
4054          the first element of full_template_args is NULL_TREE. If we
4055          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4056          of 2. This will make tsubst wrongly consider that T and U
4057          have level 1. Instead, let's create a dummy vector as the
4058          first element of full_template_args so that TMPL_ARG_DEPTH
4059          returns the correct depth for args.  */
4060       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4061   return args;
4062 }
4063
4064 /* Update the declared TYPE by doing any lookups which were thought to be
4065    dependent, but are not now that we know the SCOPE of the declarator.  */
4066
4067 tree
4068 maybe_update_decl_type (tree orig_type, tree scope)
4069 {
4070   tree type = orig_type;
4071
4072   if (type == NULL_TREE)
4073     return type;
4074
4075   if (TREE_CODE (orig_type) == TYPE_DECL)
4076     type = TREE_TYPE (type);
4077
4078   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4079       && dependent_type_p (type)
4080       /* Don't bother building up the args in this case.  */
4081       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4082     {
4083       /* tsubst in the args corresponding to the template parameters,
4084          including auto if present.  Most things will be unchanged, but
4085          make_typename_type and tsubst_qualified_id will resolve
4086          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4087       tree args = current_template_args ();
4088       tree auto_node = type_uses_auto (type);
4089       tree pushed;
4090       if (auto_node)
4091         {
4092           tree auto_vec = make_tree_vec (1);
4093           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4094           args = add_to_template_args (args, auto_vec);
4095         }
4096       pushed = push_scope (scope);
4097       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4098       if (pushed)
4099         pop_scope (scope);
4100     }
4101
4102   if (type == error_mark_node)
4103     return orig_type;
4104
4105   if (TREE_CODE (orig_type) == TYPE_DECL)
4106     {
4107       if (same_type_p (type, TREE_TYPE (orig_type)))
4108         type = orig_type;
4109       else
4110         type = TYPE_NAME (type);
4111     }
4112   return type;
4113 }
4114
4115 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4116    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4117    a member template.  Used by push_template_decl below.  */
4118
4119 static tree
4120 build_template_decl (tree decl, tree parms, bool member_template_p)
4121 {
4122   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4123   DECL_TEMPLATE_PARMS (tmpl) = parms;
4124   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4125   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4126   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4127
4128   return tmpl;
4129 }
4130
4131 struct template_parm_data
4132 {
4133   /* The level of the template parameters we are currently
4134      processing.  */
4135   int level;
4136
4137   /* The index of the specialization argument we are currently
4138      processing.  */
4139   int current_arg;
4140
4141   /* An array whose size is the number of template parameters.  The
4142      elements are nonzero if the parameter has been used in any one
4143      of the arguments processed so far.  */
4144   int* parms;
4145
4146   /* An array whose size is the number of template arguments.  The
4147      elements are nonzero if the argument makes use of template
4148      parameters of this level.  */
4149   int* arg_uses_template_parms;
4150 };
4151
4152 /* Subroutine of push_template_decl used to see if each template
4153    parameter in a partial specialization is used in the explicit
4154    argument list.  If T is of the LEVEL given in DATA (which is
4155    treated as a template_parm_data*), then DATA->PARMS is marked
4156    appropriately.  */
4157
4158 static int
4159 mark_template_parm (tree t, void* data)
4160 {
4161   int level;
4162   int idx;
4163   struct template_parm_data* tpd = (struct template_parm_data*) data;
4164
4165   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4166     {
4167       level = TEMPLATE_PARM_LEVEL (t);
4168       idx = TEMPLATE_PARM_IDX (t);
4169     }
4170   else
4171     {
4172       level = TEMPLATE_TYPE_LEVEL (t);
4173       idx = TEMPLATE_TYPE_IDX (t);
4174     }
4175
4176   if (level == tpd->level)
4177     {
4178       tpd->parms[idx] = 1;
4179       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4180     }
4181
4182   /* Return zero so that for_each_template_parm will continue the
4183      traversal of the tree; we want to mark *every* template parm.  */
4184   return 0;
4185 }
4186
4187 /* Process the partial specialization DECL.  */
4188
4189 static tree
4190 process_partial_specialization (tree decl)
4191 {
4192   tree type = TREE_TYPE (decl);
4193   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4194   tree specargs = CLASSTYPE_TI_ARGS (type);
4195   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4196   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4197   tree inner_parms;
4198   tree inst;
4199   int nargs = TREE_VEC_LENGTH (inner_args);
4200   int ntparms;
4201   int  i;
4202   bool did_error_intro = false;
4203   struct template_parm_data tpd;
4204   struct template_parm_data tpd2;
4205
4206   gcc_assert (current_template_parms);
4207
4208   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4209   ntparms = TREE_VEC_LENGTH (inner_parms);
4210
4211   /* We check that each of the template parameters given in the
4212      partial specialization is used in the argument list to the
4213      specialization.  For example:
4214
4215        template <class T> struct S;
4216        template <class T> struct S<T*>;
4217
4218      The second declaration is OK because `T*' uses the template
4219      parameter T, whereas
4220
4221        template <class T> struct S<int>;
4222
4223      is no good.  Even trickier is:
4224
4225        template <class T>
4226        struct S1
4227        {
4228           template <class U>
4229           struct S2;
4230           template <class U>
4231           struct S2<T>;
4232        };
4233
4234      The S2<T> declaration is actually invalid; it is a
4235      full-specialization.  Of course,
4236
4237           template <class U>
4238           struct S2<T (*)(U)>;
4239
4240      or some such would have been OK.  */
4241   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4242   tpd.parms = XALLOCAVEC (int, ntparms);
4243   memset (tpd.parms, 0, sizeof (int) * ntparms);
4244
4245   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4246   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4247   for (i = 0; i < nargs; ++i)
4248     {
4249       tpd.current_arg = i;
4250       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4251                               &mark_template_parm,
4252                               &tpd,
4253                               NULL,
4254                               /*include_nondeduced_p=*/false);
4255     }
4256   for (i = 0; i < ntparms; ++i)
4257     if (tpd.parms[i] == 0)
4258       {
4259         /* One of the template parms was not used in the
4260            specialization.  */
4261         if (!did_error_intro)
4262           {
4263             error ("template parameters not used in partial specialization:");
4264             did_error_intro = true;
4265           }
4266
4267         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4268       }
4269
4270   if (did_error_intro)
4271     return error_mark_node;
4272
4273   /* [temp.class.spec]
4274
4275      The argument list of the specialization shall not be identical to
4276      the implicit argument list of the primary template.  */
4277   if (comp_template_args
4278       (inner_args,
4279        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4280                                                    (maintmpl)))))
4281     error ("partial specialization %qT does not specialize any template arguments", type);
4282
4283   /* [temp.class.spec]
4284
4285      A partially specialized non-type argument expression shall not
4286      involve template parameters of the partial specialization except
4287      when the argument expression is a simple identifier.
4288
4289      The type of a template parameter corresponding to a specialized
4290      non-type argument shall not be dependent on a parameter of the
4291      specialization. 
4292
4293      Also, we verify that pack expansions only occur at the
4294      end of the argument list.  */
4295   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4296   tpd2.parms = 0;
4297   for (i = 0; i < nargs; ++i)
4298     {
4299       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4300       tree arg = TREE_VEC_ELT (inner_args, i);
4301       tree packed_args = NULL_TREE;
4302       int j, len = 1;
4303
4304       if (ARGUMENT_PACK_P (arg))
4305         {
4306           /* Extract the arguments from the argument pack. We'll be
4307              iterating over these in the following loop.  */
4308           packed_args = ARGUMENT_PACK_ARGS (arg);
4309           len = TREE_VEC_LENGTH (packed_args);
4310         }
4311
4312       for (j = 0; j < len; j++)
4313         {
4314           if (packed_args)
4315             /* Get the Jth argument in the parameter pack.  */
4316             arg = TREE_VEC_ELT (packed_args, j);
4317
4318           if (PACK_EXPANSION_P (arg))
4319             {
4320               /* Pack expansions must come at the end of the
4321                  argument list.  */
4322               if ((packed_args && j < len - 1)
4323                   || (!packed_args && i < nargs - 1))
4324                 {
4325                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4326                     error ("parameter pack argument %qE must be at the "
4327                            "end of the template argument list", arg);
4328                   else
4329                     error ("parameter pack argument %qT must be at the "
4330                            "end of the template argument list", arg);
4331                 }
4332             }
4333
4334           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4335             /* We only care about the pattern.  */
4336             arg = PACK_EXPANSION_PATTERN (arg);
4337
4338           if (/* These first two lines are the `non-type' bit.  */
4339               !TYPE_P (arg)
4340               && TREE_CODE (arg) != TEMPLATE_DECL
4341               /* This next line is the `argument expression is not just a
4342                  simple identifier' condition and also the `specialized
4343                  non-type argument' bit.  */
4344               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4345             {
4346               if ((!packed_args && tpd.arg_uses_template_parms[i])
4347                   || (packed_args && uses_template_parms (arg)))
4348                 error ("template argument %qE involves template parameter(s)",
4349                        arg);
4350               else 
4351                 {
4352                   /* Look at the corresponding template parameter,
4353                      marking which template parameters its type depends
4354                      upon.  */
4355                   tree type = TREE_TYPE (parm);
4356
4357                   if (!tpd2.parms)
4358                     {
4359                       /* We haven't yet initialized TPD2.  Do so now.  */
4360                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4361                       /* The number of parameters here is the number in the
4362                          main template, which, as checked in the assertion
4363                          above, is NARGS.  */
4364                       tpd2.parms = XALLOCAVEC (int, nargs);
4365                       tpd2.level = 
4366                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4367                     }
4368
4369                   /* Mark the template parameters.  But this time, we're
4370                      looking for the template parameters of the main
4371                      template, not in the specialization.  */
4372                   tpd2.current_arg = i;
4373                   tpd2.arg_uses_template_parms[i] = 0;
4374                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4375                   for_each_template_parm (type,
4376                                           &mark_template_parm,
4377                                           &tpd2,
4378                                           NULL,
4379                                           /*include_nondeduced_p=*/false);
4380
4381                   if (tpd2.arg_uses_template_parms [i])
4382                     {
4383                       /* The type depended on some template parameters.
4384                          If they are fully specialized in the
4385                          specialization, that's OK.  */
4386                       int j;
4387                       int count = 0;
4388                       for (j = 0; j < nargs; ++j)
4389                         if (tpd2.parms[j] != 0
4390                             && tpd.arg_uses_template_parms [j])
4391                           ++count;
4392                       if (count != 0)
4393                         error_n (input_location, count,
4394                                  "type %qT of template argument %qE depends "
4395                                  "on a template parameter",
4396                                  "type %qT of template argument %qE depends "
4397                                  "on template parameters",
4398                                  type,
4399                                  arg);
4400                     }
4401                 }
4402             }
4403         }
4404     }
4405
4406   /* We should only get here once.  */
4407   gcc_assert (!COMPLETE_TYPE_P (type));
4408
4409   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4410     = tree_cons (specargs, inner_parms,
4411                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4412   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4413
4414   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4415        inst = TREE_CHAIN (inst))
4416     {
4417       tree inst_type = TREE_VALUE (inst);
4418       if (COMPLETE_TYPE_P (inst_type)
4419           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4420         {
4421           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4422           if (spec && TREE_TYPE (spec) == type)
4423             permerror (input_location,
4424                        "partial specialization of %qT after instantiation "
4425                        "of %qT", type, inst_type);
4426         }
4427     }
4428
4429   return decl;
4430 }
4431
4432 /* Check that a template declaration's use of default arguments and
4433    parameter packs is not invalid.  Here, PARMS are the template
4434    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4435    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4436    specialization.
4437    
4438
4439    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4440    declaration (but not a definition); 1 indicates a declaration, 2
4441    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4442    emitted for extraneous default arguments.
4443
4444    Returns TRUE if there were no errors found, FALSE otherwise. */
4445
4446 bool
4447 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4448                          int is_partial, int is_friend_decl)
4449 {
4450   const char *msg;
4451   int last_level_to_check;
4452   tree parm_level;
4453   bool no_errors = true;
4454
4455   /* [temp.param]
4456
4457      A default template-argument shall not be specified in a
4458      function template declaration or a function template definition, nor
4459      in the template-parameter-list of the definition of a member of a
4460      class template.  */
4461
4462   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4463     /* You can't have a function template declaration in a local
4464        scope, nor you can you define a member of a class template in a
4465        local scope.  */
4466     return true;
4467
4468   if (current_class_type
4469       && !TYPE_BEING_DEFINED (current_class_type)
4470       && DECL_LANG_SPECIFIC (decl)
4471       && DECL_DECLARES_FUNCTION_P (decl)
4472       /* If this is either a friend defined in the scope of the class
4473          or a member function.  */
4474       && (DECL_FUNCTION_MEMBER_P (decl)
4475           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4476           : DECL_FRIEND_CONTEXT (decl)
4477           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4478           : false)
4479       /* And, if it was a member function, it really was defined in
4480          the scope of the class.  */
4481       && (!DECL_FUNCTION_MEMBER_P (decl)
4482           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4483     /* We already checked these parameters when the template was
4484        declared, so there's no need to do it again now.  This function
4485        was defined in class scope, but we're processing it's body now
4486        that the class is complete.  */
4487     return true;
4488
4489   /* Core issue 226 (C++0x only): the following only applies to class
4490      templates.  */
4491   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4492     {
4493       /* [temp.param]
4494
4495          If a template-parameter has a default template-argument, all
4496          subsequent template-parameters shall have a default
4497          template-argument supplied.  */
4498       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4499         {
4500           tree inner_parms = TREE_VALUE (parm_level);
4501           int ntparms = TREE_VEC_LENGTH (inner_parms);
4502           int seen_def_arg_p = 0;
4503           int i;
4504
4505           for (i = 0; i < ntparms; ++i)
4506             {
4507               tree parm = TREE_VEC_ELT (inner_parms, i);
4508
4509               if (parm == error_mark_node)
4510                 continue;
4511
4512               if (TREE_PURPOSE (parm))
4513                 seen_def_arg_p = 1;
4514               else if (seen_def_arg_p
4515                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4516                 {
4517                   error ("no default argument for %qD", TREE_VALUE (parm));
4518                   /* For better subsequent error-recovery, we indicate that
4519                      there should have been a default argument.  */
4520                   TREE_PURPOSE (parm) = error_mark_node;
4521                   no_errors = false;
4522                 }
4523               else if (is_primary
4524                        && !is_partial
4525                        && !is_friend_decl
4526                        /* Don't complain about an enclosing partial
4527                           specialization.  */
4528                        && parm_level == parms
4529                        && TREE_CODE (decl) == TYPE_DECL
4530                        && i < ntparms - 1
4531                        && template_parameter_pack_p (TREE_VALUE (parm)))
4532                 {
4533                   /* A primary class template can only have one
4534                      parameter pack, at the end of the template
4535                      parameter list.  */
4536
4537                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4538                     error ("parameter pack %qE must be at the end of the"
4539                            " template parameter list", TREE_VALUE (parm));
4540                   else
4541                     error ("parameter pack %qT must be at the end of the"
4542                            " template parameter list", 
4543                            TREE_TYPE (TREE_VALUE (parm)));
4544
4545                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4546                     = error_mark_node;
4547                   no_errors = false;
4548                 }
4549             }
4550         }
4551     }
4552
4553   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4554       || is_partial 
4555       || !is_primary
4556       || is_friend_decl)
4557     /* For an ordinary class template, default template arguments are
4558        allowed at the innermost level, e.g.:
4559          template <class T = int>
4560          struct S {};
4561        but, in a partial specialization, they're not allowed even
4562        there, as we have in [temp.class.spec]:
4563
4564          The template parameter list of a specialization shall not
4565          contain default template argument values.
4566
4567        So, for a partial specialization, or for a function template
4568        (in C++98/C++03), we look at all of them.  */
4569     ;
4570   else
4571     /* But, for a primary class template that is not a partial
4572        specialization we look at all template parameters except the
4573        innermost ones.  */
4574     parms = TREE_CHAIN (parms);
4575
4576   /* Figure out what error message to issue.  */
4577   if (is_friend_decl == 2)
4578     msg = G_("default template arguments may not be used in function template "
4579              "friend re-declaration");
4580   else if (is_friend_decl)
4581     msg = G_("default template arguments may not be used in function template "
4582              "friend declarations");
4583   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4584     msg = G_("default template arguments may not be used in function templates "
4585              "without -std=c++0x or -std=gnu++0x");
4586   else if (is_partial)
4587     msg = G_("default template arguments may not be used in "
4588              "partial specializations");
4589   else
4590     msg = G_("default argument for template parameter for class enclosing %qD");
4591
4592   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4593     /* If we're inside a class definition, there's no need to
4594        examine the parameters to the class itself.  On the one
4595        hand, they will be checked when the class is defined, and,
4596        on the other, default arguments are valid in things like:
4597          template <class T = double>
4598          struct S { template <class U> void f(U); };
4599        Here the default argument for `S' has no bearing on the
4600        declaration of `f'.  */
4601     last_level_to_check = template_class_depth (current_class_type) + 1;
4602   else
4603     /* Check everything.  */
4604     last_level_to_check = 0;
4605
4606   for (parm_level = parms;
4607        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4608        parm_level = TREE_CHAIN (parm_level))
4609     {
4610       tree inner_parms = TREE_VALUE (parm_level);
4611       int i;
4612       int ntparms;
4613
4614       ntparms = TREE_VEC_LENGTH (inner_parms);
4615       for (i = 0; i < ntparms; ++i)
4616         {
4617           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4618             continue;
4619
4620           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4621             {
4622               if (msg)
4623                 {
4624                   no_errors = false;
4625                   if (is_friend_decl == 2)
4626                     return no_errors;
4627
4628                   error (msg, decl);
4629                   msg = 0;
4630                 }
4631
4632               /* Clear out the default argument so that we are not
4633                  confused later.  */
4634               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4635             }
4636         }
4637
4638       /* At this point, if we're still interested in issuing messages,
4639          they must apply to classes surrounding the object declared.  */
4640       if (msg)
4641         msg = G_("default argument for template parameter for class "
4642                  "enclosing %qD");
4643     }
4644
4645   return no_errors;
4646 }
4647
4648 /* Worker for push_template_decl_real, called via
4649    for_each_template_parm.  DATA is really an int, indicating the
4650    level of the parameters we are interested in.  If T is a template
4651    parameter of that level, return nonzero.  */
4652
4653 static int
4654 template_parm_this_level_p (tree t, void* data)
4655 {
4656   int this_level = *(int *)data;
4657   int level;
4658
4659   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4660     level = TEMPLATE_PARM_LEVEL (t);
4661   else
4662     level = TEMPLATE_TYPE_LEVEL (t);
4663   return level == this_level;
4664 }
4665
4666 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4667    parameters given by current_template_args, or reuses a
4668    previously existing one, if appropriate.  Returns the DECL, or an
4669    equivalent one, if it is replaced via a call to duplicate_decls.
4670
4671    If IS_FRIEND is true, DECL is a friend declaration.  */
4672
4673 tree
4674 push_template_decl_real (tree decl, bool is_friend)
4675 {
4676   tree tmpl;
4677   tree args;
4678   tree info;
4679   tree ctx;
4680   int primary;
4681   int is_partial;
4682   int new_template_p = 0;
4683   /* True if the template is a member template, in the sense of
4684      [temp.mem].  */
4685   bool member_template_p = false;
4686
4687   if (decl == error_mark_node || !current_template_parms)
4688     return error_mark_node;
4689
4690   /* See if this is a partial specialization.  */
4691   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4692                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4693                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4694
4695   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4696     is_friend = true;
4697
4698   if (is_friend)
4699     /* For a friend, we want the context of the friend function, not
4700        the type of which it is a friend.  */
4701     ctx = CP_DECL_CONTEXT (decl);
4702   else if (CP_DECL_CONTEXT (decl)
4703            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4704     /* In the case of a virtual function, we want the class in which
4705        it is defined.  */
4706     ctx = CP_DECL_CONTEXT (decl);
4707   else
4708     /* Otherwise, if we're currently defining some class, the DECL
4709        is assumed to be a member of the class.  */
4710     ctx = current_scope ();
4711
4712   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4713     ctx = NULL_TREE;
4714
4715   if (!DECL_CONTEXT (decl))
4716     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4717
4718   /* See if this is a primary template.  */
4719   if (is_friend && ctx)
4720     /* A friend template that specifies a class context, i.e.
4721          template <typename T> friend void A<T>::f();
4722        is not primary.  */
4723     primary = 0;
4724   else
4725     primary = template_parm_scope_p ();
4726
4727   if (primary)
4728     {
4729       if (DECL_CLASS_SCOPE_P (decl))
4730         member_template_p = true;
4731       if (TREE_CODE (decl) == TYPE_DECL
4732           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4733         {
4734           error ("template class without a name");
4735           return error_mark_node;
4736         }
4737       else if (TREE_CODE (decl) == FUNCTION_DECL)
4738         {
4739           if (DECL_DESTRUCTOR_P (decl))
4740             {
4741               /* [temp.mem]
4742
4743                  A destructor shall not be a member template.  */
4744               error ("destructor %qD declared as member template", decl);
4745               return error_mark_node;
4746             }
4747           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4748               && (!prototype_p (TREE_TYPE (decl))
4749                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4750                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4751                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4752                       == void_list_node)))
4753             {
4754               /* [basic.stc.dynamic.allocation]
4755
4756                  An allocation function can be a function
4757                  template. ... Template allocation functions shall
4758                  have two or more parameters.  */
4759               error ("invalid template declaration of %qD", decl);
4760               return error_mark_node;
4761             }
4762         }
4763       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4764                && CLASS_TYPE_P (TREE_TYPE (decl)))
4765         /* OK */;
4766       else
4767         {
4768           error ("template declaration of %q#D", decl);
4769           return error_mark_node;
4770         }
4771     }
4772
4773   /* Check to see that the rules regarding the use of default
4774      arguments are not being violated.  */
4775   check_default_tmpl_args (decl, current_template_parms,
4776                            primary, is_partial, /*is_friend_decl=*/0);
4777
4778   /* Ensure that there are no parameter packs in the type of this
4779      declaration that have not been expanded.  */
4780   if (TREE_CODE (decl) == FUNCTION_DECL)
4781     {
4782       /* Check each of the arguments individually to see if there are
4783          any bare parameter packs.  */
4784       tree type = TREE_TYPE (decl);
4785       tree arg = DECL_ARGUMENTS (decl);
4786       tree argtype = TYPE_ARG_TYPES (type);
4787
4788       while (arg && argtype)
4789         {
4790           if (!FUNCTION_PARAMETER_PACK_P (arg)
4791               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4792             {
4793             /* This is a PARM_DECL that contains unexpanded parameter
4794                packs. We have already complained about this in the
4795                check_for_bare_parameter_packs call, so just replace
4796                these types with ERROR_MARK_NODE.  */
4797               TREE_TYPE (arg) = error_mark_node;
4798               TREE_VALUE (argtype) = error_mark_node;
4799             }
4800
4801           arg = DECL_CHAIN (arg);
4802           argtype = TREE_CHAIN (argtype);
4803         }
4804
4805       /* Check for bare parameter packs in the return type and the
4806          exception specifiers.  */
4807       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4808         /* Errors were already issued, set return type to int
4809            as the frontend doesn't expect error_mark_node as
4810            the return type.  */
4811         TREE_TYPE (type) = integer_type_node;
4812       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4813         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4814     }
4815   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4816     {
4817       TREE_TYPE (decl) = error_mark_node;
4818       return error_mark_node;
4819     }
4820
4821   if (is_partial)
4822     return process_partial_specialization (decl);
4823
4824   args = current_template_args ();
4825
4826   if (!ctx
4827       || TREE_CODE (ctx) == FUNCTION_DECL
4828       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4829       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4830     {
4831       if (DECL_LANG_SPECIFIC (decl)
4832           && DECL_TEMPLATE_INFO (decl)
4833           && DECL_TI_TEMPLATE (decl))
4834         tmpl = DECL_TI_TEMPLATE (decl);
4835       /* If DECL is a TYPE_DECL for a class-template, then there won't
4836          be DECL_LANG_SPECIFIC.  The information equivalent to
4837          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4838       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4839                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4840                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4841         {
4842           /* Since a template declaration already existed for this
4843              class-type, we must be redeclaring it here.  Make sure
4844              that the redeclaration is valid.  */
4845           redeclare_class_template (TREE_TYPE (decl),
4846                                     current_template_parms);
4847           /* We don't need to create a new TEMPLATE_DECL; just use the
4848              one we already had.  */
4849           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4850         }
4851       else
4852         {
4853           tmpl = build_template_decl (decl, current_template_parms,
4854                                       member_template_p);
4855           new_template_p = 1;
4856
4857           if (DECL_LANG_SPECIFIC (decl)
4858               && DECL_TEMPLATE_SPECIALIZATION (decl))
4859             {
4860               /* A specialization of a member template of a template
4861                  class.  */
4862               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4863               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4864               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4865             }
4866         }
4867     }
4868   else
4869     {
4870       tree a, t, current, parms;
4871       int i;
4872       tree tinfo = get_template_info (decl);
4873
4874       if (!tinfo)
4875         {
4876           error ("template definition of non-template %q#D", decl);
4877           return error_mark_node;
4878         }
4879
4880       tmpl = TI_TEMPLATE (tinfo);
4881
4882       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4883           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4884           && DECL_TEMPLATE_SPECIALIZATION (decl)
4885           && DECL_MEMBER_TEMPLATE_P (tmpl))
4886         {
4887           tree new_tmpl;
4888
4889           /* The declaration is a specialization of a member
4890              template, declared outside the class.  Therefore, the
4891              innermost template arguments will be NULL, so we
4892              replace them with the arguments determined by the
4893              earlier call to check_explicit_specialization.  */
4894           args = DECL_TI_ARGS (decl);
4895
4896           new_tmpl
4897             = build_template_decl (decl, current_template_parms,
4898                                    member_template_p);
4899           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4900           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4901           DECL_TI_TEMPLATE (decl) = new_tmpl;
4902           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4903           DECL_TEMPLATE_INFO (new_tmpl)
4904             = build_template_info (tmpl, args);
4905
4906           register_specialization (new_tmpl,
4907                                    most_general_template (tmpl),
4908                                    args,
4909                                    is_friend, 0);
4910           return decl;
4911         }
4912
4913       /* Make sure the template headers we got make sense.  */
4914
4915       parms = DECL_TEMPLATE_PARMS (tmpl);
4916       i = TMPL_PARMS_DEPTH (parms);
4917       if (TMPL_ARGS_DEPTH (args) != i)
4918         {
4919           error ("expected %d levels of template parms for %q#D, got %d",
4920                  i, decl, TMPL_ARGS_DEPTH (args));
4921         }
4922       else
4923         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4924           {
4925             a = TMPL_ARGS_LEVEL (args, i);
4926             t = INNERMOST_TEMPLATE_PARMS (parms);
4927
4928             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4929               {
4930                 if (current == decl)
4931                   error ("got %d template parameters for %q#D",
4932                          TREE_VEC_LENGTH (a), decl);
4933                 else
4934                   error ("got %d template parameters for %q#T",
4935                          TREE_VEC_LENGTH (a), current);
4936                 error ("  but %d required", TREE_VEC_LENGTH (t));
4937                 return error_mark_node;
4938               }
4939
4940             if (current == decl)
4941               current = ctx;
4942             else if (current == NULL_TREE)
4943               /* Can happen in erroneous input.  */
4944               break;
4945             else
4946               current = (TYPE_P (current)
4947                          ? TYPE_CONTEXT (current)
4948                          : DECL_CONTEXT (current));
4949           }
4950
4951       /* Check that the parms are used in the appropriate qualifying scopes
4952          in the declarator.  */
4953       if (!comp_template_args
4954           (TI_ARGS (tinfo),
4955            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4956         {
4957           error ("\
4958 template arguments to %qD do not match original template %qD",
4959                  decl, DECL_TEMPLATE_RESULT (tmpl));
4960           if (!uses_template_parms (TI_ARGS (tinfo)))
4961             inform (input_location, "use template<> for an explicit specialization");
4962           /* Avoid crash in import_export_decl.  */
4963           DECL_INTERFACE_KNOWN (decl) = 1;
4964           return error_mark_node;
4965         }
4966     }
4967
4968   DECL_TEMPLATE_RESULT (tmpl) = decl;
4969   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4970
4971   /* Push template declarations for global functions and types.  Note
4972      that we do not try to push a global template friend declared in a
4973      template class; such a thing may well depend on the template
4974      parameters of the class.  */
4975   if (new_template_p && !ctx
4976       && !(is_friend && template_class_depth (current_class_type) > 0))
4977     {
4978       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4979       if (tmpl == error_mark_node)
4980         return error_mark_node;
4981
4982       /* Hide template friend classes that haven't been declared yet.  */
4983       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4984         {
4985           DECL_ANTICIPATED (tmpl) = 1;
4986           DECL_FRIEND_P (tmpl) = 1;
4987         }
4988     }
4989
4990   if (primary)
4991     {
4992       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4993       int i;
4994
4995       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4996       if (DECL_CONV_FN_P (tmpl))
4997         {
4998           int depth = TMPL_PARMS_DEPTH (parms);
4999
5000           /* It is a conversion operator. See if the type converted to
5001              depends on innermost template operands.  */
5002
5003           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5004                                          depth))
5005             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5006         }
5007
5008       /* Give template template parms a DECL_CONTEXT of the template
5009          for which they are a parameter.  */
5010       parms = INNERMOST_TEMPLATE_PARMS (parms);
5011       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5012         {
5013           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5014           if (TREE_CODE (parm) == TEMPLATE_DECL)
5015             DECL_CONTEXT (parm) = tmpl;
5016         }
5017     }
5018
5019   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5020      back to its most general template.  If TMPL is a specialization,
5021      ARGS may only have the innermost set of arguments.  Add the missing
5022      argument levels if necessary.  */
5023   if (DECL_TEMPLATE_INFO (tmpl))
5024     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5025
5026   info = build_template_info (tmpl, args);
5027
5028   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5029     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5030   else if (DECL_LANG_SPECIFIC (decl))
5031     DECL_TEMPLATE_INFO (decl) = info;
5032
5033   return DECL_TEMPLATE_RESULT (tmpl);
5034 }
5035
5036 tree
5037 push_template_decl (tree decl)
5038 {
5039   return push_template_decl_real (decl, false);
5040 }
5041
5042 /* Called when a class template TYPE is redeclared with the indicated
5043    template PARMS, e.g.:
5044
5045      template <class T> struct S;
5046      template <class T> struct S {};  */
5047
5048 bool
5049 redeclare_class_template (tree type, tree parms)
5050 {
5051   tree tmpl;
5052   tree tmpl_parms;
5053   int i;
5054
5055   if (!TYPE_TEMPLATE_INFO (type))
5056     {
5057       error ("%qT is not a template type", type);
5058       return false;
5059     }
5060
5061   tmpl = TYPE_TI_TEMPLATE (type);
5062   if (!PRIMARY_TEMPLATE_P (tmpl))
5063     /* The type is nested in some template class.  Nothing to worry
5064        about here; there are no new template parameters for the nested
5065        type.  */
5066     return true;
5067
5068   if (!parms)
5069     {
5070       error ("template specifiers not specified in declaration of %qD",
5071              tmpl);
5072       return false;
5073     }
5074
5075   parms = INNERMOST_TEMPLATE_PARMS (parms);
5076   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5077
5078   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5079     {
5080       error_n (input_location, TREE_VEC_LENGTH (parms),
5081                "redeclared with %d template parameter",
5082                "redeclared with %d template parameters",
5083                TREE_VEC_LENGTH (parms));
5084       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5085                 "previous declaration %q+D used %d template parameter",
5086                 "previous declaration %q+D used %d template parameters",
5087                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5088       return false;
5089     }
5090
5091   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5092     {
5093       tree tmpl_parm;
5094       tree parm;
5095       tree tmpl_default;
5096       tree parm_default;
5097
5098       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5099           || TREE_VEC_ELT (parms, i) == error_mark_node)
5100         continue;
5101
5102       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5103       if (tmpl_parm == error_mark_node)
5104         return false;
5105
5106       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5107       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5108       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5109
5110       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5111          TEMPLATE_DECL.  */
5112       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5113           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5114               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5115           || (TREE_CODE (tmpl_parm) != PARM_DECL
5116               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5117                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5118           || (TREE_CODE (tmpl_parm) == PARM_DECL
5119               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5120                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5121         {
5122           error ("template parameter %q+#D", tmpl_parm);
5123           error ("redeclared here as %q#D", parm);
5124           return false;
5125         }
5126
5127       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5128         {
5129           /* We have in [temp.param]:
5130
5131              A template-parameter may not be given default arguments
5132              by two different declarations in the same scope.  */
5133           error_at (input_location, "redefinition of default argument for %q#D", parm);
5134           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5135                   "original definition appeared here");
5136           return false;
5137         }
5138
5139       if (parm_default != NULL_TREE)
5140         /* Update the previous template parameters (which are the ones
5141            that will really count) with the new default value.  */
5142         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5143       else if (tmpl_default != NULL_TREE)
5144         /* Update the new parameters, too; they'll be used as the
5145            parameters for any members.  */
5146         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5147     }
5148
5149     return true;
5150 }
5151
5152 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5153    (possibly simplified) expression.  */
5154
5155 static tree
5156 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5157 {
5158   if (expr == NULL_TREE)
5159     return NULL_TREE;
5160
5161   /* If we're in a template, but EXPR isn't value dependent, simplify
5162      it.  We're supposed to treat:
5163
5164        template <typename T> void f(T[1 + 1]);
5165        template <typename T> void f(T[2]);
5166
5167      as two declarations of the same function, for example.  */
5168   if (processing_template_decl
5169       && !type_dependent_expression_p (expr)
5170       && potential_constant_expression (expr)
5171       && !value_dependent_expression_p (expr))
5172     {
5173       HOST_WIDE_INT saved_processing_template_decl;
5174
5175       saved_processing_template_decl = processing_template_decl;
5176       processing_template_decl = 0;
5177       expr = tsubst_copy_and_build (expr,
5178                                     /*args=*/NULL_TREE,
5179                                     complain,
5180                                     /*in_decl=*/NULL_TREE,
5181                                     /*function_p=*/false,
5182                                     /*integral_constant_expression_p=*/true);
5183       processing_template_decl = saved_processing_template_decl;
5184     }
5185   return expr;
5186 }
5187
5188 tree
5189 fold_non_dependent_expr (tree expr)
5190 {
5191   return fold_non_dependent_expr_sfinae (expr, tf_error);
5192 }
5193
5194 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5195    must be a function or a pointer-to-function type, as specified
5196    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5197    and check that the resulting function has external linkage.  */
5198
5199 static tree
5200 convert_nontype_argument_function (tree type, tree expr)
5201 {
5202   tree fns = expr;
5203   tree fn, fn_no_ptr;
5204
5205   fn = instantiate_type (type, fns, tf_none);
5206   if (fn == error_mark_node)
5207     return error_mark_node;
5208
5209   fn_no_ptr = fn;
5210   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5211     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5212   if (TREE_CODE (fn_no_ptr) == BASELINK)
5213     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5214  
5215   /* [temp.arg.nontype]/1
5216
5217      A template-argument for a non-type, non-template template-parameter
5218      shall be one of:
5219      [...]
5220      -- the address of an object or function with external linkage.  */
5221   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
5222     {
5223       error ("%qE is not a valid template argument for type %qT "
5224              "because function %qD has not external linkage",
5225              expr, type, fn_no_ptr);
5226       return NULL_TREE;
5227     }
5228
5229   return fn;
5230 }
5231
5232 /* Subroutine of convert_nontype_argument.
5233    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5234    Emit an error otherwise.  */
5235
5236 static bool
5237 check_valid_ptrmem_cst_expr (tree type, tree expr,
5238                              tsubst_flags_t complain)
5239 {
5240   STRIP_NOPS (expr);
5241   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5242     return true;
5243   if (complain & tf_error)
5244     {
5245       error ("%qE is not a valid template argument for type %qT",
5246              expr, type);
5247       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5248     }
5249   return false;
5250 }
5251
5252 /* Returns TRUE iff the address of OP is value-dependent.
5253
5254    14.6.2.4 [temp.dep.temp]:
5255    A non-integral non-type template-argument is dependent if its type is
5256    dependent or it has either of the following forms
5257      qualified-id
5258      & qualified-id
5259    and contains a nested-name-specifier which specifies a class-name that
5260    names a dependent type.
5261
5262    We generalize this to just say that the address of a member of a
5263    dependent class is value-dependent; the above doesn't cover the
5264    address of a static data member named with an unqualified-id.  */
5265
5266 static bool
5267 has_value_dependent_address (tree op)
5268 {
5269   /* We could use get_inner_reference here, but there's no need;
5270      this is only relevant for template non-type arguments, which
5271      can only be expressed as &id-expression.  */
5272   if (DECL_P (op))
5273     {
5274       tree ctx = CP_DECL_CONTEXT (op);
5275       if (TYPE_P (ctx) && dependent_type_p (ctx))
5276         return true;
5277     }
5278
5279   return false;
5280 }
5281
5282 /* The next set of functions are used for providing helpful explanatory
5283    diagnostics for failed overload resolution.  Their messages should be
5284    indented by two spaces for consistency with the messages in
5285    call.c  */
5286
5287 static int
5288 unify_success (bool explain_p ATTRIBUTE_UNUSED)
5289 {
5290   return 0;
5291 }
5292
5293 static int
5294 unify_parameter_deduction_failure (bool explain_p, tree parm)
5295 {
5296   if (explain_p)
5297     inform (input_location,
5298             "  couldn't deduce template parameter %qD", parm);
5299   return 1;
5300 }
5301
5302 static int
5303 unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5304 {
5305   return 1;
5306 }
5307
5308 static int
5309 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5310 {
5311   if (explain_p)
5312     inform (input_location,
5313             "  types %qT and %qT have incompatible cv-qualifiers",
5314             parm, arg);
5315   return 1;
5316 }
5317
5318 static int
5319 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5320 {
5321   if (explain_p)
5322     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5323   return 1;
5324 }
5325
5326 static int
5327 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5328 {
5329   if (explain_p)
5330     inform (input_location,
5331             "  template parameter %qD is not a parameter pack, but "
5332             "argument %qD is",
5333             parm, arg);
5334   return 1;
5335 }
5336
5337 static int
5338 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5339 {
5340   if (explain_p)
5341     inform (input_location,
5342             "  template argument %qE does not match "
5343             "pointer-to-member constant %qE",
5344             arg, parm);
5345   return 1;
5346 }
5347
5348 static int
5349 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5350 {
5351   if (explain_p)
5352     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5353   return 1;
5354 }
5355
5356 static int
5357 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5358 {
5359   if (explain_p)
5360     inform (input_location,
5361             "  inconsistent parameter pack deduction with %qT and %qT",
5362             old_arg, new_arg);
5363   return 1;
5364 }
5365
5366 static int
5367 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5368 {
5369   if (explain_p)
5370     inform (input_location,
5371             "  deduced conflicting types for parameter %qT (%qT and %qT)",
5372             parm, first, second);
5373   return 1;
5374 }
5375
5376 static int
5377 unify_vla_arg (bool explain_p, tree arg)
5378 {
5379   if (explain_p)
5380     inform (input_location,
5381             "  variable-sized array type %qT is not "
5382             "a valid template argument",
5383             arg);
5384   return 1;
5385 }
5386
5387 static int
5388 unify_method_type_error (bool explain_p, tree arg)
5389 {
5390   if (explain_p)
5391     inform (input_location,
5392             "  member function type %qT is not a valid template argument",
5393             arg);
5394   return 1;
5395 }
5396
5397 static int
5398 unify_arity (bool explain_p, int have, int wanted)
5399 {
5400   if (explain_p)
5401     inform_n (input_location, wanted,
5402               "  candidate expects %d argument, %d provided",
5403               "  candidate expects %d arguments, %d provided",
5404               wanted, have);
5405   return 1;
5406 }
5407
5408 static int
5409 unify_too_many_arguments (bool explain_p, int have, int wanted)
5410 {
5411   return unify_arity (explain_p, have, wanted);
5412 }
5413
5414 static int
5415 unify_too_few_arguments (bool explain_p, int have, int wanted)
5416 {
5417   return unify_arity (explain_p, have, wanted);
5418 }
5419
5420 static int
5421 unify_arg_conversion (bool explain_p, tree to_type,
5422                       tree from_type, tree arg)
5423 {
5424   if (explain_p)
5425     inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5426             arg, from_type, to_type);
5427   return 1;
5428 }
5429
5430 static int
5431 unify_no_common_base (bool explain_p, enum template_base_result r,
5432                       tree parm, tree arg)
5433 {
5434   if (explain_p)
5435     switch (r)
5436       {
5437       case tbr_ambiguous_baseclass:
5438         inform (input_location, "  %qT is an ambiguous base class of %qT",
5439                 arg, parm);
5440         break;
5441       default:
5442         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5443         break;
5444       }
5445   return 1;
5446 }
5447
5448 static int
5449 unify_inconsistent_template_template_parameters (bool explain_p)
5450 {
5451   if (explain_p)
5452     inform (input_location,
5453             "  template parameters of a template template argument are "
5454             "inconsistent with other deduced template arguments");
5455   return 1;
5456 }
5457
5458 static int
5459 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5460 {
5461   if (explain_p)
5462     inform (input_location,
5463             "  can't deduce a template for %qT from non-template type %qT",
5464             parm, arg);
5465   return 1;
5466 }
5467
5468 static int
5469 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5470 {
5471   if (explain_p)
5472     inform (input_location,
5473             "  template argument %qE does not match %qD", arg, parm);
5474   return 1;
5475 }
5476
5477 static int
5478 unify_overload_resolution_failure (bool explain_p, tree arg)
5479 {
5480   if (explain_p)
5481     inform (input_location,
5482             "  could not resolve address from overloaded function %qE",
5483             arg);
5484   return 1;
5485 }
5486
5487 /* Attempt to convert the non-type template parameter EXPR to the
5488    indicated TYPE.  If the conversion is successful, return the
5489    converted value.  If the conversion is unsuccessful, return
5490    NULL_TREE if we issued an error message, or error_mark_node if we
5491    did not.  We issue error messages for out-and-out bad template
5492    parameters, but not simply because the conversion failed, since we
5493    might be just trying to do argument deduction.  Both TYPE and EXPR
5494    must be non-dependent.
5495
5496    The conversion follows the special rules described in
5497    [temp.arg.nontype], and it is much more strict than an implicit
5498    conversion.
5499
5500    This function is called twice for each template argument (see
5501    lookup_template_class for a more accurate description of this
5502    problem). This means that we need to handle expressions which
5503    are not valid in a C++ source, but can be created from the
5504    first call (for instance, casts to perform conversions). These
5505    hacks can go away after we fix the double coercion problem.  */
5506
5507 static tree
5508 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5509 {
5510   tree expr_type;
5511
5512   /* Detect immediately string literals as invalid non-type argument.
5513      This special-case is not needed for correctness (we would easily
5514      catch this later), but only to provide better diagnostic for this
5515      common user mistake. As suggested by DR 100, we do not mention
5516      linkage issues in the diagnostic as this is not the point.  */
5517   /* FIXME we're making this OK.  */
5518   if (TREE_CODE (expr) == STRING_CST)
5519     {
5520       if (complain & tf_error)
5521         error ("%qE is not a valid template argument for type %qT "
5522                "because string literals can never be used in this context",
5523                expr, type);
5524       return NULL_TREE;
5525     }
5526
5527   /* Add the ADDR_EXPR now for the benefit of
5528      value_dependent_expression_p.  */
5529   if (TYPE_PTROBV_P (type)
5530       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5531     expr = decay_conversion (expr);
5532
5533   /* If we are in a template, EXPR may be non-dependent, but still
5534      have a syntactic, rather than semantic, form.  For example, EXPR
5535      might be a SCOPE_REF, rather than the VAR_DECL to which the
5536      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5537      so that access checking can be performed when the template is
5538      instantiated -- but here we need the resolved form so that we can
5539      convert the argument.  */
5540   if (TYPE_REF_OBJ_P (type)
5541       && has_value_dependent_address (expr))
5542     /* If we want the address and it's value-dependent, don't fold.  */;
5543   else if (!type_unknown_p (expr))
5544     expr = fold_non_dependent_expr_sfinae (expr, complain);
5545   if (error_operand_p (expr))
5546     return error_mark_node;
5547   expr_type = TREE_TYPE (expr);
5548   if (TREE_CODE (type) == REFERENCE_TYPE)
5549     expr = mark_lvalue_use (expr);
5550   else
5551     expr = mark_rvalue_use (expr);
5552
5553   /* HACK: Due to double coercion, we can get a
5554      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5555      which is the tree that we built on the first call (see
5556      below when coercing to reference to object or to reference to
5557      function). We just strip everything and get to the arg.
5558      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5559      for examples.  */
5560   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5561     {
5562       tree probe_type, probe = expr;
5563       if (REFERENCE_REF_P (probe))
5564         probe = TREE_OPERAND (probe, 0);
5565       probe_type = TREE_TYPE (probe);
5566       if (TREE_CODE (probe) == NOP_EXPR)
5567         {
5568           /* ??? Maybe we could use convert_from_reference here, but we
5569              would need to relax its constraints because the NOP_EXPR
5570              could actually change the type to something more cv-qualified,
5571              and this is not folded by convert_from_reference.  */
5572           tree addr = TREE_OPERAND (probe, 0);
5573           gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5574           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5575           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5576           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5577                       (TREE_TYPE (probe_type),
5578                        TREE_TYPE (TREE_TYPE (addr))));
5579
5580           expr = TREE_OPERAND (addr, 0);
5581           expr_type = TREE_TYPE (expr);
5582         }
5583     }
5584
5585   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5586      parameter is a pointer to object, through decay and
5587      qualification conversion. Let's strip everything.  */
5588   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5589     {
5590       STRIP_NOPS (expr);
5591       gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5592       gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5593       /* Skip the ADDR_EXPR only if it is part of the decay for
5594          an array. Otherwise, it is part of the original argument
5595          in the source code.  */
5596       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5597         expr = TREE_OPERAND (expr, 0);
5598       expr_type = TREE_TYPE (expr);
5599     }
5600
5601   /* [temp.arg.nontype]/5, bullet 1
5602
5603      For a non-type template-parameter of integral or enumeration type,
5604      integral promotions (_conv.prom_) and integral conversions
5605      (_conv.integral_) are applied.  */
5606   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5607     {
5608       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5609       t = maybe_constant_value (t);
5610       if (t != error_mark_node)
5611         expr = t;
5612
5613       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5614         return error_mark_node;
5615
5616       /* Notice that there are constant expressions like '4 % 0' which
5617          do not fold into integer constants.  */
5618       if (TREE_CODE (expr) != INTEGER_CST)
5619         {
5620           if (complain & tf_error)
5621             {
5622               int errs = errorcount, warns = warningcount;
5623               expr = cxx_constant_value (expr);
5624               if (errorcount > errs || warningcount > warns)
5625                 inform (EXPR_LOC_OR_HERE (expr),
5626                         "in template argument for type %qT ", type);
5627               if (expr == error_mark_node)
5628                 return NULL_TREE;
5629               /* else cxx_constant_value complained but gave us
5630                  a real constant, so go ahead.  */
5631               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5632             }
5633           else
5634             return NULL_TREE;
5635         }
5636     }
5637   /* [temp.arg.nontype]/5, bullet 2
5638
5639      For a non-type template-parameter of type pointer to object,
5640      qualification conversions (_conv.qual_) and the array-to-pointer
5641      conversion (_conv.array_) are applied.  */
5642   else if (TYPE_PTROBV_P (type))
5643     {
5644       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5645
5646          A template-argument for a non-type, non-template template-parameter
5647          shall be one of: [...]
5648
5649          -- the name of a non-type template-parameter;
5650          -- the address of an object or function with external linkage, [...]
5651             expressed as "& id-expression" where the & is optional if the name
5652             refers to a function or array, or if the corresponding
5653             template-parameter is a reference.
5654
5655         Here, we do not care about functions, as they are invalid anyway
5656         for a parameter of type pointer-to-object.  */
5657
5658       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5659         /* Non-type template parameters are OK.  */
5660         ;
5661       else if (TREE_CODE (expr) != ADDR_EXPR
5662                && TREE_CODE (expr_type) != ARRAY_TYPE)
5663         {
5664           if (TREE_CODE (expr) == VAR_DECL)
5665             {
5666               error ("%qD is not a valid template argument "
5667                      "because %qD is a variable, not the address of "
5668                      "a variable",
5669                      expr, expr);
5670               return NULL_TREE;
5671             }
5672           /* Other values, like integer constants, might be valid
5673              non-type arguments of some other type.  */
5674           return error_mark_node;
5675         }
5676       else
5677         {
5678           tree decl;
5679
5680           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5681                   ? TREE_OPERAND (expr, 0) : expr);
5682           if (TREE_CODE (decl) != VAR_DECL)
5683             {
5684               error ("%qE is not a valid template argument of type %qT "
5685                      "because %qE is not a variable",
5686                      expr, type, decl);
5687               return NULL_TREE;
5688             }
5689           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5690             {
5691               error ("%qE is not a valid template argument of type %qT "
5692                      "because %qD does not have external linkage",
5693                      expr, type, decl);
5694               return NULL_TREE;
5695             }
5696         }
5697
5698       expr = decay_conversion (expr);
5699       if (expr == error_mark_node)
5700         return error_mark_node;
5701
5702       expr = perform_qualification_conversions (type, expr);
5703       if (expr == error_mark_node)
5704         return error_mark_node;
5705     }
5706   /* [temp.arg.nontype]/5, bullet 3
5707
5708      For a non-type template-parameter of type reference to object, no
5709      conversions apply. The type referred to by the reference may be more
5710      cv-qualified than the (otherwise identical) type of the
5711      template-argument. The template-parameter is bound directly to the
5712      template-argument, which must be an lvalue.  */
5713   else if (TYPE_REF_OBJ_P (type))
5714     {
5715       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5716                                                       expr_type))
5717         return error_mark_node;
5718
5719       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5720         {
5721           error ("%qE is not a valid template argument for type %qT "
5722                  "because of conflicts in cv-qualification", expr, type);
5723           return NULL_TREE;
5724         }
5725
5726       if (!real_lvalue_p (expr))
5727         {
5728           error ("%qE is not a valid template argument for type %qT "
5729                  "because it is not an lvalue", expr, type);
5730           return NULL_TREE;
5731         }
5732
5733       /* [temp.arg.nontype]/1
5734
5735          A template-argument for a non-type, non-template template-parameter
5736          shall be one of: [...]
5737
5738          -- the address of an object or function with external linkage.  */
5739       if (TREE_CODE (expr) == INDIRECT_REF
5740           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5741         {
5742           expr = TREE_OPERAND (expr, 0);
5743           if (DECL_P (expr))
5744             {
5745               error ("%q#D is not a valid template argument for type %qT "
5746                      "because a reference variable does not have a constant "
5747                      "address", expr, type);
5748               return NULL_TREE;
5749             }
5750         }
5751
5752       if (!DECL_P (expr))
5753         {
5754           error ("%qE is not a valid template argument for type %qT "
5755                  "because it is not an object with external linkage",
5756                  expr, type);
5757           return NULL_TREE;
5758         }
5759
5760       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5761         {
5762           error ("%qE is not a valid template argument for type %qT "
5763                  "because object %qD has not external linkage",
5764                  expr, type, expr);
5765           return NULL_TREE;
5766         }
5767
5768       expr = build_nop (type, build_address (expr));
5769     }
5770   /* [temp.arg.nontype]/5, bullet 4
5771
5772      For a non-type template-parameter of type pointer to function, only
5773      the function-to-pointer conversion (_conv.func_) is applied. If the
5774      template-argument represents a set of overloaded functions (or a
5775      pointer to such), the matching function is selected from the set
5776      (_over.over_).  */
5777   else if (TYPE_PTRFN_P (type))
5778     {
5779       /* If the argument is a template-id, we might not have enough
5780          context information to decay the pointer.  */
5781       if (!type_unknown_p (expr_type))
5782         {
5783           expr = decay_conversion (expr);
5784           if (expr == error_mark_node)
5785             return error_mark_node;
5786         }
5787
5788       expr = convert_nontype_argument_function (type, expr);
5789       if (!expr || expr == error_mark_node)
5790         return expr;
5791
5792       if (TREE_CODE (expr) != ADDR_EXPR)
5793         {
5794           error ("%qE is not a valid template argument for type %qT", expr, type);
5795           error ("it must be the address of a function with external linkage");
5796           return NULL_TREE;
5797         }
5798     }
5799   /* [temp.arg.nontype]/5, bullet 5
5800
5801      For a non-type template-parameter of type reference to function, no
5802      conversions apply. If the template-argument represents a set of
5803      overloaded functions, the matching function is selected from the set
5804      (_over.over_).  */
5805   else if (TYPE_REFFN_P (type))
5806     {
5807       if (TREE_CODE (expr) == ADDR_EXPR)
5808         {
5809           error ("%qE is not a valid template argument for type %qT "
5810                  "because it is a pointer", expr, type);
5811           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5812           return NULL_TREE;
5813         }
5814
5815       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5816       if (!expr || expr == error_mark_node)
5817         return expr;
5818
5819       expr = build_nop (type, build_address (expr));
5820     }
5821   /* [temp.arg.nontype]/5, bullet 6
5822
5823      For a non-type template-parameter of type pointer to member function,
5824      no conversions apply. If the template-argument represents a set of
5825      overloaded member functions, the matching member function is selected
5826      from the set (_over.over_).  */
5827   else if (TYPE_PTRMEMFUNC_P (type))
5828     {
5829       expr = instantiate_type (type, expr, tf_none);
5830       if (expr == error_mark_node)
5831         return error_mark_node;
5832
5833       /* [temp.arg.nontype] bullet 1 says the pointer to member
5834          expression must be a pointer-to-member constant.  */
5835       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5836         return error_mark_node;
5837
5838       /* There is no way to disable standard conversions in
5839          resolve_address_of_overloaded_function (called by
5840          instantiate_type). It is possible that the call succeeded by
5841          converting &B::I to &D::I (where B is a base of D), so we need
5842          to reject this conversion here.
5843
5844          Actually, even if there was a way to disable standard conversions,
5845          it would still be better to reject them here so that we can
5846          provide a superior diagnostic.  */
5847       if (!same_type_p (TREE_TYPE (expr), type))
5848         {
5849           error ("%qE is not a valid template argument for type %qT "
5850                  "because it is of type %qT", expr, type,
5851                  TREE_TYPE (expr));
5852           /* If we are just one standard conversion off, explain.  */
5853           if (can_convert (type, TREE_TYPE (expr)))
5854             inform (input_location,
5855                     "standard conversions are not allowed in this context");
5856           return NULL_TREE;
5857         }
5858     }
5859   /* [temp.arg.nontype]/5, bullet 7
5860
5861      For a non-type template-parameter of type pointer to data member,
5862      qualification conversions (_conv.qual_) are applied.  */
5863   else if (TYPE_PTRMEM_P (type))
5864     {
5865       /* [temp.arg.nontype] bullet 1 says the pointer to member
5866          expression must be a pointer-to-member constant.  */
5867       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5868         return error_mark_node;
5869
5870       expr = perform_qualification_conversions (type, expr);
5871       if (expr == error_mark_node)
5872         return expr;
5873     }
5874   /* A template non-type parameter must be one of the above.  */
5875   else
5876     gcc_unreachable ();
5877
5878   /* Sanity check: did we actually convert the argument to the
5879      right type?  */
5880   gcc_assert (same_type_ignoring_top_level_qualifiers_p
5881               (type, TREE_TYPE (expr)));
5882   return expr;
5883 }
5884
5885 /* Subroutine of coerce_template_template_parms, which returns 1 if
5886    PARM_PARM and ARG_PARM match using the rule for the template
5887    parameters of template template parameters. Both PARM and ARG are
5888    template parameters; the rest of the arguments are the same as for
5889    coerce_template_template_parms.
5890  */
5891 static int
5892 coerce_template_template_parm (tree parm,
5893                               tree arg,
5894                               tsubst_flags_t complain,
5895                               tree in_decl,
5896                               tree outer_args)
5897 {
5898   if (arg == NULL_TREE || arg == error_mark_node
5899       || parm == NULL_TREE || parm == error_mark_node)
5900     return 0;
5901   
5902   if (TREE_CODE (arg) != TREE_CODE (parm))
5903     return 0;
5904   
5905   switch (TREE_CODE (parm))
5906     {
5907     case TEMPLATE_DECL:
5908       /* We encounter instantiations of templates like
5909          template <template <template <class> class> class TT>
5910          class C;  */
5911       {
5912         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5913         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5914         
5915         if (!coerce_template_template_parms
5916             (parmparm, argparm, complain, in_decl, outer_args))
5917           return 0;
5918       }
5919       /* Fall through.  */
5920       
5921     case TYPE_DECL:
5922       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5923           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5924         /* Argument is a parameter pack but parameter is not.  */
5925         return 0;
5926       break;
5927       
5928     case PARM_DECL:
5929       /* The tsubst call is used to handle cases such as
5930          
5931            template <int> class C {};
5932            template <class T, template <T> class TT> class D {};
5933            D<int, C> d;
5934
5935          i.e. the parameter list of TT depends on earlier parameters.  */
5936       if (!uses_template_parms (TREE_TYPE (arg))
5937           && !same_type_p
5938                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5939                  TREE_TYPE (arg)))
5940         return 0;
5941       
5942       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5943           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5944         /* Argument is a parameter pack but parameter is not.  */
5945         return 0;
5946       
5947       break;
5948
5949     default:
5950       gcc_unreachable ();
5951     }
5952
5953   return 1;
5954 }
5955
5956
5957 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5958    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5959    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5960    or PARM_DECL.
5961
5962    Consider the example:
5963      template <class T> class A;
5964      template<template <class U> class TT> class B;
5965
5966    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5967    the parameters to A, and OUTER_ARGS contains A.  */
5968
5969 static int
5970 coerce_template_template_parms (tree parm_parms,
5971                                 tree arg_parms,
5972                                 tsubst_flags_t complain,
5973                                 tree in_decl,
5974                                 tree outer_args)
5975 {
5976   int nparms, nargs, i;
5977   tree parm, arg;
5978   int variadic_p = 0;
5979
5980   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5981   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5982
5983   nparms = TREE_VEC_LENGTH (parm_parms);
5984   nargs = TREE_VEC_LENGTH (arg_parms);
5985
5986   /* Determine whether we have a parameter pack at the end of the
5987      template template parameter's template parameter list.  */
5988   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5989     {
5990       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5991       
5992       if (parm == error_mark_node)
5993         return 0;
5994
5995       switch (TREE_CODE (parm))
5996         {
5997         case TEMPLATE_DECL:
5998         case TYPE_DECL:
5999           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6000             variadic_p = 1;
6001           break;
6002           
6003         case PARM_DECL:
6004           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6005             variadic_p = 1;
6006           break;
6007           
6008         default:
6009           gcc_unreachable ();
6010         }
6011     }
6012  
6013   if (nargs != nparms
6014       && !(variadic_p && nargs >= nparms - 1))
6015     return 0;
6016
6017   /* Check all of the template parameters except the parameter pack at
6018      the end (if any).  */
6019   for (i = 0; i < nparms - variadic_p; ++i)
6020     {
6021       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6022           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6023         continue;
6024
6025       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6026       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6027
6028       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6029                                           outer_args))
6030         return 0;
6031
6032     }
6033
6034   if (variadic_p)
6035     {
6036       /* Check each of the template parameters in the template
6037          argument against the template parameter pack at the end of
6038          the template template parameter.  */
6039       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6040         return 0;
6041
6042       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6043
6044       for (; i < nargs; ++i)
6045         {
6046           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6047             continue;
6048  
6049           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6050  
6051           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6052                                               outer_args))
6053             return 0;
6054         }
6055     }
6056
6057   return 1;
6058 }
6059
6060 /* Verifies that the deduced template arguments (in TARGS) for the
6061    template template parameters (in TPARMS) represent valid bindings,
6062    by comparing the template parameter list of each template argument
6063    to the template parameter list of its corresponding template
6064    template parameter, in accordance with DR150. This
6065    routine can only be called after all template arguments have been
6066    deduced. It will return TRUE if all of the template template
6067    parameter bindings are okay, FALSE otherwise.  */
6068 bool 
6069 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6070 {
6071   int i, ntparms = TREE_VEC_LENGTH (tparms);
6072   bool ret = true;
6073
6074   /* We're dealing with template parms in this process.  */
6075   ++processing_template_decl;
6076
6077   targs = INNERMOST_TEMPLATE_ARGS (targs);
6078
6079   for (i = 0; i < ntparms; ++i)
6080     {
6081       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6082       tree targ = TREE_VEC_ELT (targs, i);
6083
6084       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6085         {
6086           tree packed_args = NULL_TREE;
6087           int idx, len = 1;
6088
6089           if (ARGUMENT_PACK_P (targ))
6090             {
6091               /* Look inside the argument pack.  */
6092               packed_args = ARGUMENT_PACK_ARGS (targ);
6093               len = TREE_VEC_LENGTH (packed_args);
6094             }
6095
6096           for (idx = 0; idx < len; ++idx)
6097             {
6098               tree targ_parms = NULL_TREE;
6099
6100               if (packed_args)
6101                 /* Extract the next argument from the argument
6102                    pack.  */
6103                 targ = TREE_VEC_ELT (packed_args, idx);
6104
6105               if (PACK_EXPANSION_P (targ))
6106                 /* Look at the pattern of the pack expansion.  */
6107                 targ = PACK_EXPANSION_PATTERN (targ);
6108
6109               /* Extract the template parameters from the template
6110                  argument.  */
6111               if (TREE_CODE (targ) == TEMPLATE_DECL)
6112                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6113               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6114                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6115
6116               /* Verify that we can coerce the template template
6117                  parameters from the template argument to the template
6118                  parameter.  This requires an exact match.  */
6119               if (targ_parms
6120                   && !coerce_template_template_parms
6121                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6122                         targ_parms,
6123                         tf_none,
6124                         tparm,
6125                         targs))
6126                 {
6127                   ret = false;
6128                   goto out;
6129                 }
6130             }
6131         }
6132     }
6133
6134  out:
6135
6136   --processing_template_decl;
6137   return ret;
6138 }
6139
6140 /* Since type attributes aren't mangled, we need to strip them from
6141    template type arguments.  */
6142
6143 static tree
6144 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6145 {
6146   tree mv;
6147   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6148     return arg;
6149   mv = TYPE_MAIN_VARIANT (arg);
6150   arg = strip_typedefs (arg);
6151   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6152       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6153     {
6154       if (complain & tf_warning)
6155         warning (0, "ignoring attributes on template argument %qT", arg);
6156       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6157       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6158     }
6159   return arg;
6160 }
6161
6162 /* Convert the indicated template ARG as necessary to match the
6163    indicated template PARM.  Returns the converted ARG, or
6164    error_mark_node if the conversion was unsuccessful.  Error and
6165    warning messages are issued under control of COMPLAIN.  This
6166    conversion is for the Ith parameter in the parameter list.  ARGS is
6167    the full set of template arguments deduced so far.  */
6168
6169 static tree
6170 convert_template_argument (tree parm,
6171                            tree arg,
6172                            tree args,
6173                            tsubst_flags_t complain,
6174                            int i,
6175                            tree in_decl)
6176 {
6177   tree orig_arg;
6178   tree val;
6179   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6180
6181   if (TREE_CODE (arg) == TREE_LIST
6182       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6183     {
6184       /* The template argument was the name of some
6185          member function.  That's usually
6186          invalid, but static members are OK.  In any
6187          case, grab the underlying fields/functions
6188          and issue an error later if required.  */
6189       orig_arg = TREE_VALUE (arg);
6190       TREE_TYPE (arg) = unknown_type_node;
6191     }
6192
6193   orig_arg = arg;
6194
6195   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6196   requires_type = (TREE_CODE (parm) == TYPE_DECL
6197                    || requires_tmpl_type);
6198
6199   /* When determining whether an argument pack expansion is a template,
6200      look at the pattern.  */
6201   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6202     arg = PACK_EXPANSION_PATTERN (arg);
6203
6204   /* Deal with an injected-class-name used as a template template arg.  */
6205   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6206     {
6207       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6208       if (TREE_CODE (t) == TEMPLATE_DECL)
6209         {
6210           if (cxx_dialect >= cxx0x)
6211             /* OK under DR 1004.  */;
6212           else if (complain & tf_warning_or_error)
6213             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6214                      " used as template template argument", TYPE_NAME (arg));
6215           else if (flag_pedantic_errors)
6216             t = arg;
6217
6218           arg = t;
6219         }
6220     }
6221
6222   is_tmpl_type = 
6223     ((TREE_CODE (arg) == TEMPLATE_DECL
6224       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6225      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6226      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6227
6228   if (is_tmpl_type
6229       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6230           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6231     arg = TYPE_STUB_DECL (arg);
6232
6233   is_type = TYPE_P (arg) || is_tmpl_type;
6234
6235   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6236       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6237     {
6238       permerror (input_location, "to refer to a type member of a template parameter, "
6239                  "use %<typename %E%>", orig_arg);
6240
6241       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6242                                      TREE_OPERAND (arg, 1),
6243                                      typename_type,
6244                                      complain & tf_error);
6245       arg = orig_arg;
6246       is_type = 1;
6247     }
6248   if (is_type != requires_type)
6249     {
6250       if (in_decl)
6251         {
6252           if (complain & tf_error)
6253             {
6254               error ("type/value mismatch at argument %d in template "
6255                      "parameter list for %qD",
6256                      i + 1, in_decl);
6257               if (is_type)
6258                 error ("  expected a constant of type %qT, got %qT",
6259                        TREE_TYPE (parm),
6260                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6261               else if (requires_tmpl_type)
6262                 error ("  expected a class template, got %qE", orig_arg);
6263               else
6264                 error ("  expected a type, got %qE", orig_arg);
6265             }
6266         }
6267       return error_mark_node;
6268     }
6269   if (is_tmpl_type ^ requires_tmpl_type)
6270     {
6271       if (in_decl && (complain & tf_error))
6272         {
6273           error ("type/value mismatch at argument %d in template "
6274                  "parameter list for %qD",
6275                  i + 1, in_decl);
6276           if (is_tmpl_type)
6277             error ("  expected a type, got %qT", DECL_NAME (arg));
6278           else
6279             error ("  expected a class template, got %qT", orig_arg);
6280         }
6281       return error_mark_node;
6282     }
6283
6284   if (is_type)
6285     {
6286       if (requires_tmpl_type)
6287         {
6288           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6289             /* The number of argument required is not known yet.
6290                Just accept it for now.  */
6291             val = TREE_TYPE (arg);
6292           else
6293             {
6294               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6295               tree argparm;
6296
6297               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6298
6299               if (coerce_template_template_parms (parmparm, argparm,
6300                                                   complain, in_decl,
6301                                                   args))
6302                 {
6303                   val = arg;
6304
6305                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6306                      TEMPLATE_DECL.  */
6307                   if (val != error_mark_node)
6308                     {
6309                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6310                         val = TREE_TYPE (val);
6311                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6312                         val = make_pack_expansion (val);
6313                     }
6314                 }
6315               else
6316                 {
6317                   if (in_decl && (complain & tf_error))
6318                     {
6319                       error ("type/value mismatch at argument %d in "
6320                              "template parameter list for %qD",
6321                              i + 1, in_decl);
6322                       error ("  expected a template of type %qD, got %qT",
6323                              parm, orig_arg);
6324                     }
6325
6326                   val = error_mark_node;
6327                 }
6328             }
6329         }
6330       else
6331         val = orig_arg;
6332       /* We only form one instance of each template specialization.
6333          Therefore, if we use a non-canonical variant (i.e., a
6334          typedef), any future messages referring to the type will use
6335          the typedef, which is confusing if those future uses do not
6336          themselves also use the typedef.  */
6337       if (TYPE_P (val))
6338         val = canonicalize_type_argument (val, complain);
6339     }
6340   else
6341     {
6342       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6343
6344       if (invalid_nontype_parm_type_p (t, complain))
6345         return error_mark_node;
6346
6347       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6348         {
6349           if (same_type_p (t, TREE_TYPE (orig_arg)))
6350             val = orig_arg;
6351           else
6352             {
6353               /* Not sure if this is reachable, but it doesn't hurt
6354                  to be robust.  */
6355               error ("type mismatch in nontype parameter pack");
6356               val = error_mark_node;
6357             }
6358         }
6359       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6360         /* We used to call digest_init here.  However, digest_init
6361            will report errors, which we don't want when complain
6362            is zero.  More importantly, digest_init will try too
6363            hard to convert things: for example, `0' should not be
6364            converted to pointer type at this point according to
6365            the standard.  Accepting this is not merely an
6366            extension, since deciding whether or not these
6367            conversions can occur is part of determining which
6368            function template to call, or whether a given explicit
6369            argument specification is valid.  */
6370         val = convert_nontype_argument (t, orig_arg, complain);
6371       else
6372         val = orig_arg;
6373
6374       if (val == NULL_TREE)
6375         val = error_mark_node;
6376       else if (val == error_mark_node && (complain & tf_error))
6377         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6378
6379       if (TREE_CODE (val) == SCOPE_REF)
6380         {
6381           /* Strip typedefs from the SCOPE_REF.  */
6382           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6383           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6384                                                    complain);
6385           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6386                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6387         }
6388     }
6389
6390   return val;
6391 }
6392
6393 /* Coerces the remaining template arguments in INNER_ARGS (from
6394    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6395    Returns the coerced argument pack. PARM_IDX is the position of this
6396    parameter in the template parameter list. ARGS is the original
6397    template argument list.  */
6398 static tree
6399 coerce_template_parameter_pack (tree parms,
6400                                 int parm_idx,
6401                                 tree args,
6402                                 tree inner_args,
6403                                 int arg_idx,
6404                                 tree new_args,
6405                                 int* lost,
6406                                 tree in_decl,
6407                                 tsubst_flags_t complain)
6408 {
6409   tree parm = TREE_VEC_ELT (parms, parm_idx);
6410   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6411   tree packed_args;
6412   tree argument_pack;
6413   tree packed_types = NULL_TREE;
6414
6415   if (arg_idx > nargs)
6416     arg_idx = nargs;
6417
6418   packed_args = make_tree_vec (nargs - arg_idx);
6419
6420   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6421       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6422     {
6423       /* When the template parameter is a non-type template
6424          parameter pack whose type uses parameter packs, we need
6425          to look at each of the template arguments
6426          separately. Build a vector of the types for these
6427          non-type template parameters in PACKED_TYPES.  */
6428       tree expansion 
6429         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6430       packed_types = tsubst_pack_expansion (expansion, args,
6431                                             complain, in_decl);
6432
6433       if (packed_types == error_mark_node)
6434         return error_mark_node;
6435
6436       /* Check that we have the right number of arguments.  */
6437       if (arg_idx < nargs
6438           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6439           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6440         {
6441           int needed_parms 
6442             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6443           error ("wrong number of template arguments (%d, should be %d)",
6444                  nargs, needed_parms);
6445           return error_mark_node;
6446         }
6447
6448       /* If we aren't able to check the actual arguments now
6449          (because they haven't been expanded yet), we can at least
6450          verify that all of the types used for the non-type
6451          template parameter pack are, in fact, valid for non-type
6452          template parameters.  */
6453       if (arg_idx < nargs 
6454           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6455         {
6456           int j, len = TREE_VEC_LENGTH (packed_types);
6457           for (j = 0; j < len; ++j)
6458             {
6459               tree t = TREE_VEC_ELT (packed_types, j);
6460               if (invalid_nontype_parm_type_p (t, complain))
6461                 return error_mark_node;
6462             }
6463         }
6464     }
6465
6466   /* Convert the remaining arguments, which will be a part of the
6467      parameter pack "parm".  */
6468   for (; arg_idx < nargs; ++arg_idx)
6469     {
6470       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6471       tree actual_parm = TREE_VALUE (parm);
6472
6473       if (packed_types && !PACK_EXPANSION_P (arg))
6474         {
6475           /* When we have a vector of types (corresponding to the
6476              non-type template parameter pack that uses parameter
6477              packs in its type, as mention above), and the
6478              argument is not an expansion (which expands to a
6479              currently unknown number of arguments), clone the
6480              parm and give it the next type in PACKED_TYPES.  */
6481           actual_parm = copy_node (actual_parm);
6482           TREE_TYPE (actual_parm) = 
6483             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6484         }
6485
6486       if (arg != error_mark_node)
6487         arg = convert_template_argument (actual_parm, 
6488                                          arg, new_args, complain, parm_idx,
6489                                          in_decl);
6490       if (arg == error_mark_node)
6491         (*lost)++;
6492       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6493     }
6494
6495   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6496       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6497     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6498   else
6499     {
6500       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6501       TREE_TYPE (argument_pack) 
6502         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6503       TREE_CONSTANT (argument_pack) = 1;
6504     }
6505
6506   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6507 #ifdef ENABLE_CHECKING
6508   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6509                                        TREE_VEC_LENGTH (packed_args));
6510 #endif
6511   return argument_pack;
6512 }
6513
6514 /* Convert all template arguments to their appropriate types, and
6515    return a vector containing the innermost resulting template
6516    arguments.  If any error occurs, return error_mark_node. Error and
6517    warning messages are issued under control of COMPLAIN.
6518
6519    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6520    for arguments not specified in ARGS.  Otherwise, if
6521    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6522    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6523    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6524    ARGS.  */
6525
6526 static tree
6527 coerce_template_parms (tree parms,
6528                        tree args,
6529                        tree in_decl,
6530                        tsubst_flags_t complain,
6531                        bool require_all_args,
6532                        bool use_default_args)
6533 {
6534   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6535   tree inner_args;
6536   tree new_args;
6537   tree new_inner_args;
6538   int saved_unevaluated_operand;
6539   int saved_inhibit_evaluation_warnings;
6540
6541   /* When used as a boolean value, indicates whether this is a
6542      variadic template parameter list. Since it's an int, we can also
6543      subtract it from nparms to get the number of non-variadic
6544      parameters.  */
6545   int variadic_p = 0;
6546   int post_variadic_parms = 0;
6547
6548   if (args == error_mark_node)
6549     return error_mark_node;
6550
6551   nparms = TREE_VEC_LENGTH (parms);
6552
6553   /* Determine if there are any parameter packs.  */
6554   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6555     {
6556       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6557       if (variadic_p)
6558         ++post_variadic_parms;
6559       if (template_parameter_pack_p (tparm))
6560         ++variadic_p;
6561     }
6562
6563   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6564   /* If there are no parameters that follow a parameter pack, we need to
6565      expand any argument packs so that we can deduce a parameter pack from
6566      some non-packed args followed by an argument pack, as in variadic85.C.
6567      If there are such parameters, we need to leave argument packs intact
6568      so the arguments are assigned properly.  This can happen when dealing
6569      with a nested class inside a partial specialization of a class
6570      template, as in variadic92.C, or when deducing a template parameter pack
6571      from a sub-declarator, as in variadic114.C.  */
6572   if (!post_variadic_parms)
6573     inner_args = expand_template_argument_pack (inner_args);
6574
6575   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6576   if ((nargs > nparms && !variadic_p)
6577       || (nargs < nparms - variadic_p
6578           && require_all_args
6579           && (!use_default_args
6580               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6581                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6582     {
6583       if (complain & tf_error)
6584         {
6585           if (variadic_p)
6586             {
6587               nparms -= variadic_p;
6588               error ("wrong number of template arguments "
6589                      "(%d, should be %d or more)", nargs, nparms);
6590             }
6591           else
6592              error ("wrong number of template arguments "
6593                     "(%d, should be %d)", nargs, nparms);
6594
6595           if (in_decl)
6596             error ("provided for %q+D", in_decl);
6597         }
6598
6599       return error_mark_node;
6600     }
6601
6602   /* We need to evaluate the template arguments, even though this
6603      template-id may be nested within a "sizeof".  */
6604   saved_unevaluated_operand = cp_unevaluated_operand;
6605   cp_unevaluated_operand = 0;
6606   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6607   c_inhibit_evaluation_warnings = 0;
6608   new_inner_args = make_tree_vec (nparms);
6609   new_args = add_outermost_template_args (args, new_inner_args);
6610   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6611     {
6612       tree arg;
6613       tree parm;
6614
6615       /* Get the Ith template parameter.  */
6616       parm = TREE_VEC_ELT (parms, parm_idx);
6617  
6618       if (parm == error_mark_node)
6619       {
6620         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6621         continue;
6622       }
6623
6624       /* Calculate the next argument.  */
6625       if (arg_idx < nargs)
6626         arg = TREE_VEC_ELT (inner_args, arg_idx);
6627       else
6628         arg = NULL_TREE;
6629
6630       if (template_parameter_pack_p (TREE_VALUE (parm))
6631           && !(arg && ARGUMENT_PACK_P (arg)))
6632         {
6633           /* All remaining arguments will be placed in the
6634              template parameter pack PARM.  */
6635           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6636                                                 inner_args, arg_idx,
6637                                                 new_args, &lost,
6638                                                 in_decl, complain);
6639
6640           /* Store this argument.  */
6641           if (arg == error_mark_node)
6642             lost++;
6643           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6644
6645           /* We are done with all of the arguments.  */
6646           arg_idx = nargs;
6647           
6648           continue;
6649         }
6650       else if (arg)
6651         {
6652           if (PACK_EXPANSION_P (arg))
6653             {
6654               if (complain & tf_error)
6655                 {
6656                   /* FIXME this restriction was removed by N2555; see
6657                      bug 35722.  */
6658                   /* If ARG is a pack expansion, but PARM is not a
6659                      template parameter pack (if it were, we would have
6660                      handled it above), we're trying to expand into a
6661                      fixed-length argument list.  */
6662                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
6663                     sorry ("cannot expand %<%E%> into a fixed-length "
6664                            "argument list", arg);
6665                   else
6666                     sorry ("cannot expand %<%T%> into a fixed-length "
6667                            "argument list", arg);
6668                 }
6669               ++lost;
6670             }
6671         }
6672       else if (require_all_args)
6673         {
6674           /* There must be a default arg in this case.  */
6675           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6676                                      complain, in_decl);
6677           /* The position of the first default template argument,
6678              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6679              Record that.  */
6680           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6681             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6682         }
6683       else
6684         break;
6685
6686       if (arg == error_mark_node)
6687         {
6688           if (complain & tf_error)
6689             error ("template argument %d is invalid", arg_idx + 1);
6690         }
6691       else if (!arg)
6692         /* This only occurs if there was an error in the template
6693            parameter list itself (which we would already have
6694            reported) that we are trying to recover from, e.g., a class
6695            template with a parameter list such as
6696            template<typename..., typename>.  */
6697         ++lost;
6698       else
6699         arg = convert_template_argument (TREE_VALUE (parm),
6700                                          arg, new_args, complain, 
6701                                          parm_idx, in_decl);
6702
6703       if (arg == error_mark_node)
6704         lost++;
6705       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6706     }
6707   cp_unevaluated_operand = saved_unevaluated_operand;
6708   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6709
6710   if (lost)
6711     return error_mark_node;
6712
6713 #ifdef ENABLE_CHECKING
6714   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6715     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6716                                          TREE_VEC_LENGTH (new_inner_args));
6717 #endif
6718
6719   return new_inner_args;
6720 }
6721
6722 /* Returns 1 if template args OT and NT are equivalent.  */
6723
6724 static int
6725 template_args_equal (tree ot, tree nt)
6726 {
6727   if (nt == ot)
6728     return 1;
6729   if (nt == NULL_TREE || ot == NULL_TREE)
6730     return false;
6731
6732   if (TREE_CODE (nt) == TREE_VEC)
6733     /* For member templates */
6734     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6735   else if (PACK_EXPANSION_P (ot))
6736     return PACK_EXPANSION_P (nt) 
6737       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6738                               PACK_EXPANSION_PATTERN (nt));
6739   else if (ARGUMENT_PACK_P (ot))
6740     {
6741       int i, len;
6742       tree opack, npack;
6743
6744       if (!ARGUMENT_PACK_P (nt))
6745         return 0;
6746
6747       opack = ARGUMENT_PACK_ARGS (ot);
6748       npack = ARGUMENT_PACK_ARGS (nt);
6749       len = TREE_VEC_LENGTH (opack);
6750       if (TREE_VEC_LENGTH (npack) != len)
6751         return 0;
6752       for (i = 0; i < len; ++i)
6753         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6754                                   TREE_VEC_ELT (npack, i)))
6755           return 0;
6756       return 1;
6757     }
6758   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6759     {
6760       /* We get here probably because we are in the middle of substituting
6761          into the pattern of a pack expansion. In that case the
6762          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6763          interested in. So we want to use the initial pack argument for
6764          the comparison.  */
6765       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6766       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6767         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6768       return template_args_equal (ot, nt);
6769     }
6770   else if (TYPE_P (nt))
6771     return TYPE_P (ot) && same_type_p (ot, nt);
6772   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6773     return 0;
6774   else
6775     return cp_tree_equal (ot, nt);
6776 }
6777
6778 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6779    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6780    NEWARG_PTR with the offending arguments if they are non-NULL.  */
6781
6782 static int
6783 comp_template_args_with_info (tree oldargs, tree newargs,
6784                               tree *oldarg_ptr, tree *newarg_ptr)
6785 {
6786   int i;
6787
6788   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6789     return 0;
6790
6791   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6792     {
6793       tree nt = TREE_VEC_ELT (newargs, i);
6794       tree ot = TREE_VEC_ELT (oldargs, i);
6795
6796       if (! template_args_equal (ot, nt))
6797         {
6798           if (oldarg_ptr != NULL)
6799             *oldarg_ptr = ot;
6800           if (newarg_ptr != NULL)
6801             *newarg_ptr = nt;
6802           return 0;
6803         }
6804     }
6805   return 1;
6806 }
6807
6808 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6809    of template arguments.  Returns 0 otherwise.  */
6810
6811 int
6812 comp_template_args (tree oldargs, tree newargs)
6813 {
6814   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
6815 }
6816
6817 static void
6818 add_pending_template (tree d)
6819 {
6820   tree ti = (TYPE_P (d)
6821              ? CLASSTYPE_TEMPLATE_INFO (d)
6822              : DECL_TEMPLATE_INFO (d));
6823   struct pending_template *pt;
6824   int level;
6825
6826   if (TI_PENDING_TEMPLATE_FLAG (ti))
6827     return;
6828
6829   /* We are called both from instantiate_decl, where we've already had a
6830      tinst_level pushed, and instantiate_template, where we haven't.
6831      Compensate.  */
6832   level = !current_tinst_level || current_tinst_level->decl != d;
6833
6834   if (level)
6835     push_tinst_level (d);
6836
6837   pt = ggc_alloc_pending_template ();
6838   pt->next = NULL;
6839   pt->tinst = current_tinst_level;
6840   if (last_pending_template)
6841     last_pending_template->next = pt;
6842   else
6843     pending_templates = pt;
6844
6845   last_pending_template = pt;
6846
6847   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6848
6849   if (level)
6850     pop_tinst_level ();
6851 }
6852
6853
6854 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6855    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
6856    documentation for TEMPLATE_ID_EXPR.  */
6857
6858 tree
6859 lookup_template_function (tree fns, tree arglist)
6860 {
6861   tree type;
6862
6863   if (fns == error_mark_node || arglist == error_mark_node)
6864     return error_mark_node;
6865
6866   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6867
6868   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
6869     {
6870       error ("%q#D is not a function template", fns);
6871       return error_mark_node;
6872     }
6873
6874   if (BASELINK_P (fns))
6875     {
6876       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6877                                          unknown_type_node,
6878                                          BASELINK_FUNCTIONS (fns),
6879                                          arglist);
6880       return fns;
6881     }
6882
6883   type = TREE_TYPE (fns);
6884   if (TREE_CODE (fns) == OVERLOAD || !type)
6885     type = unknown_type_node;
6886
6887   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6888 }
6889
6890 /* Within the scope of a template class S<T>, the name S gets bound
6891    (in build_self_reference) to a TYPE_DECL for the class, not a
6892    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
6893    or one of its enclosing classes, and that type is a template,
6894    return the associated TEMPLATE_DECL.  Otherwise, the original
6895    DECL is returned.
6896
6897    Also handle the case when DECL is a TREE_LIST of ambiguous
6898    injected-class-names from different bases.  */
6899
6900 tree
6901 maybe_get_template_decl_from_type_decl (tree decl)
6902 {
6903   if (decl == NULL_TREE)
6904     return decl;
6905
6906   /* DR 176: A lookup that finds an injected-class-name (10.2
6907      [class.member.lookup]) can result in an ambiguity in certain cases
6908      (for example, if it is found in more than one base class). If all of
6909      the injected-class-names that are found refer to specializations of
6910      the same class template, and if the name is followed by a
6911      template-argument-list, the reference refers to the class template
6912      itself and not a specialization thereof, and is not ambiguous.  */
6913   if (TREE_CODE (decl) == TREE_LIST)
6914     {
6915       tree t, tmpl = NULL_TREE;
6916       for (t = decl; t; t = TREE_CHAIN (t))
6917         {
6918           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
6919           if (!tmpl)
6920             tmpl = elt;
6921           else if (tmpl != elt)
6922             break;
6923         }
6924       if (tmpl && t == NULL_TREE)
6925         return tmpl;
6926       else
6927         return decl;
6928     }
6929
6930   return (decl != NULL_TREE
6931           && DECL_SELF_REFERENCE_P (decl)
6932           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
6933     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
6934 }
6935
6936 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
6937    parameters, find the desired type.
6938
6939    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
6940
6941    IN_DECL, if non-NULL, is the template declaration we are trying to
6942    instantiate.
6943
6944    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
6945    the class we are looking up.
6946
6947    Issue error and warning messages under control of COMPLAIN.
6948
6949    If the template class is really a local class in a template
6950    function, then the FUNCTION_CONTEXT is the function in which it is
6951    being instantiated.
6952
6953    ??? Note that this function is currently called *twice* for each
6954    template-id: the first time from the parser, while creating the
6955    incomplete type (finish_template_type), and the second type during the
6956    real instantiation (instantiate_template_class). This is surely something
6957    that we want to avoid. It also causes some problems with argument
6958    coercion (see convert_nontype_argument for more information on this).  */
6959
6960 static tree
6961 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
6962                          int entering_scope, tsubst_flags_t complain)
6963 {
6964   tree templ = NULL_TREE, parmlist;
6965   tree t;
6966   spec_entry **slot;
6967   spec_entry *entry;
6968   spec_entry elt;
6969   hashval_t hash;
6970
6971   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6972     {
6973       tree value = innermost_non_namespace_value (d1);
6974       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6975         templ = value;
6976       else
6977         {
6978           if (context)
6979             push_decl_namespace (context);
6980           templ = lookup_name (d1);
6981           templ = maybe_get_template_decl_from_type_decl (templ);
6982           if (context)
6983             pop_decl_namespace ();
6984         }
6985       if (templ)
6986         context = DECL_CONTEXT (templ);
6987     }
6988   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6989     {
6990       tree type = TREE_TYPE (d1);
6991
6992       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6993          an implicit typename for the second A.  Deal with it.  */
6994       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6995         type = TREE_TYPE (type);
6996
6997       if (CLASSTYPE_TEMPLATE_INFO (type))
6998         {
6999           templ = CLASSTYPE_TI_TEMPLATE (type);
7000           d1 = DECL_NAME (templ);
7001         }
7002     }
7003   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7004            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7005     {
7006       templ = TYPE_TI_TEMPLATE (d1);
7007       d1 = DECL_NAME (templ);
7008     }
7009   else if (TREE_CODE (d1) == TEMPLATE_DECL
7010            && DECL_TEMPLATE_RESULT (d1)
7011            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7012     {
7013       templ = d1;
7014       d1 = DECL_NAME (templ);
7015       context = DECL_CONTEXT (templ);
7016     }
7017
7018   /* Issue an error message if we didn't find a template.  */
7019   if (! templ)
7020     {
7021       if (complain & tf_error)
7022         error ("%qT is not a template", d1);
7023       return error_mark_node;
7024     }
7025
7026   if (TREE_CODE (templ) != TEMPLATE_DECL
7027          /* Make sure it's a user visible template, if it was named by
7028             the user.  */
7029       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7030           && !PRIMARY_TEMPLATE_P (templ)))
7031     {
7032       if (complain & tf_error)
7033         {
7034           error ("non-template type %qT used as a template", d1);
7035           if (in_decl)
7036             error ("for template declaration %q+D", in_decl);
7037         }
7038       return error_mark_node;
7039     }
7040
7041   complain &= ~tf_user;
7042
7043   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7044     {
7045       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7046          template arguments */
7047
7048       tree parm;
7049       tree arglist2;
7050       tree outer;
7051
7052       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7053
7054       /* Consider an example where a template template parameter declared as
7055
7056            template <class T, class U = std::allocator<T> > class TT
7057
7058          The template parameter level of T and U are one level larger than
7059          of TT.  To proper process the default argument of U, say when an
7060          instantiation `TT<int>' is seen, we need to build the full
7061          arguments containing {int} as the innermost level.  Outer levels,
7062          available when not appearing as default template argument, can be
7063          obtained from the arguments of the enclosing template.
7064
7065          Suppose that TT is later substituted with std::vector.  The above
7066          instantiation is `TT<int, std::allocator<T> >' with TT at
7067          level 1, and T at level 2, while the template arguments at level 1
7068          becomes {std::vector} and the inner level 2 is {int}.  */
7069
7070       outer = DECL_CONTEXT (templ);
7071       if (outer)
7072         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7073       else if (current_template_parms)
7074         /* This is an argument of the current template, so we haven't set
7075            DECL_CONTEXT yet.  */
7076         outer = current_template_args ();
7077
7078       if (outer)
7079         arglist = add_to_template_args (outer, arglist);
7080
7081       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7082                                         complain,
7083                                         /*require_all_args=*/true,
7084                                         /*use_default_args=*/true);
7085       if (arglist2 == error_mark_node
7086           || (!uses_template_parms (arglist2)
7087               && check_instantiated_args (templ, arglist2, complain)))
7088         return error_mark_node;
7089
7090       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7091       return parm;
7092     }
7093   else
7094     {
7095       tree template_type = TREE_TYPE (templ);
7096       tree gen_tmpl;
7097       tree type_decl;
7098       tree found = NULL_TREE;
7099       int arg_depth;
7100       int parm_depth;
7101       int is_dependent_type;
7102       int use_partial_inst_tmpl = false;
7103
7104       gen_tmpl = most_general_template (templ);
7105       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7106       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7107       arg_depth = TMPL_ARGS_DEPTH (arglist);
7108
7109       if (arg_depth == 1 && parm_depth > 1)
7110         {
7111           /* We've been given an incomplete set of template arguments.
7112              For example, given:
7113
7114                template <class T> struct S1 {
7115                  template <class U> struct S2 {};
7116                  template <class U> struct S2<U*> {};
7117                 };
7118
7119              we will be called with an ARGLIST of `U*', but the
7120              TEMPLATE will be `template <class T> template
7121              <class U> struct S1<T>::S2'.  We must fill in the missing
7122              arguments.  */
7123           arglist
7124             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7125                                            arglist);
7126           arg_depth = TMPL_ARGS_DEPTH (arglist);
7127         }
7128
7129       /* Now we should have enough arguments.  */
7130       gcc_assert (parm_depth == arg_depth);
7131
7132       /* From here on, we're only interested in the most general
7133          template.  */
7134
7135       /* Calculate the BOUND_ARGS.  These will be the args that are
7136          actually tsubst'd into the definition to create the
7137          instantiation.  */
7138       if (parm_depth > 1)
7139         {
7140           /* We have multiple levels of arguments to coerce, at once.  */
7141           int i;
7142           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7143
7144           tree bound_args = make_tree_vec (parm_depth);
7145
7146           for (i = saved_depth,
7147                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7148                i > 0 && t != NULL_TREE;
7149                --i, t = TREE_CHAIN (t))
7150             {
7151               tree a;
7152               if (i == saved_depth)
7153                 a = coerce_template_parms (TREE_VALUE (t),
7154                                            arglist, gen_tmpl,
7155                                            complain,
7156                                            /*require_all_args=*/true,
7157                                            /*use_default_args=*/true);
7158               else
7159                 /* Outer levels should have already been coerced.  */
7160                 a = TMPL_ARGS_LEVEL (arglist, i);
7161
7162               /* Don't process further if one of the levels fails.  */
7163               if (a == error_mark_node)
7164                 {
7165                   /* Restore the ARGLIST to its full size.  */
7166                   TREE_VEC_LENGTH (arglist) = saved_depth;
7167                   return error_mark_node;
7168                 }
7169
7170               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7171
7172               /* We temporarily reduce the length of the ARGLIST so
7173                  that coerce_template_parms will see only the arguments
7174                  corresponding to the template parameters it is
7175                  examining.  */
7176               TREE_VEC_LENGTH (arglist)--;
7177             }
7178
7179           /* Restore the ARGLIST to its full size.  */
7180           TREE_VEC_LENGTH (arglist) = saved_depth;
7181
7182           arglist = bound_args;
7183         }
7184       else
7185         arglist
7186           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7187                                    INNERMOST_TEMPLATE_ARGS (arglist),
7188                                    gen_tmpl,
7189                                    complain,
7190                                    /*require_all_args=*/true,
7191                                    /*use_default_args=*/true);
7192
7193       if (arglist == error_mark_node)
7194         /* We were unable to bind the arguments.  */
7195         return error_mark_node;
7196
7197       /* In the scope of a template class, explicit references to the
7198          template class refer to the type of the template, not any
7199          instantiation of it.  For example, in:
7200
7201            template <class T> class C { void f(C<T>); }
7202
7203          the `C<T>' is just the same as `C'.  Outside of the
7204          class, however, such a reference is an instantiation.  */
7205       if ((entering_scope
7206            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7207            || currently_open_class (template_type))
7208           /* comp_template_args is expensive, check it last.  */
7209           && comp_template_args (TYPE_TI_ARGS (template_type),
7210                                  arglist))
7211         return template_type;
7212
7213       /* If we already have this specialization, return it.  */
7214       elt.tmpl = gen_tmpl;
7215       elt.args = arglist;
7216       hash = hash_specialization (&elt);
7217       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7218                                                   &elt, hash);
7219
7220       if (entry)
7221         return entry->spec;
7222
7223       is_dependent_type = uses_template_parms (arglist);
7224
7225       /* If the deduced arguments are invalid, then the binding
7226          failed.  */
7227       if (!is_dependent_type
7228           && check_instantiated_args (gen_tmpl,
7229                                       INNERMOST_TEMPLATE_ARGS (arglist),
7230                                       complain))
7231         return error_mark_node;
7232
7233       if (!is_dependent_type
7234           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7235           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7236           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7237         {
7238           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7239                                       DECL_NAME (gen_tmpl),
7240                                       /*tag_scope=*/ts_global);
7241           return found;
7242         }
7243
7244       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7245                         complain, in_decl);
7246       if (!context)
7247         context = global_namespace;
7248
7249       /* Create the type.  */
7250       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7251         {
7252           if (!is_dependent_type)
7253             {
7254               set_current_access_from_decl (TYPE_NAME (template_type));
7255               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7256                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7257                                       arglist, complain, in_decl),
7258                               SCOPED_ENUM_P (template_type), NULL);
7259             }
7260           else
7261             {
7262               /* We don't want to call start_enum for this type, since
7263                  the values for the enumeration constants may involve
7264                  template parameters.  And, no one should be interested
7265                  in the enumeration constants for such a type.  */
7266               t = cxx_make_type (ENUMERAL_TYPE);
7267               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7268             }
7269           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7270           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7271             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7272         }
7273       else
7274         {
7275           t = make_class_type (TREE_CODE (template_type));
7276           CLASSTYPE_DECLARED_CLASS (t)
7277             = CLASSTYPE_DECLARED_CLASS (template_type);
7278           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7279           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7280
7281           /* A local class.  Make sure the decl gets registered properly.  */
7282           if (context == current_function_decl)
7283             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7284
7285           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7286             /* This instantiation is another name for the primary
7287                template type. Set the TYPE_CANONICAL field
7288                appropriately. */
7289             TYPE_CANONICAL (t) = template_type;
7290           else if (any_template_arguments_need_structural_equality_p (arglist))
7291             /* Some of the template arguments require structural
7292                equality testing, so this template class requires
7293                structural equality testing. */
7294             SET_TYPE_STRUCTURAL_EQUALITY (t);
7295         }
7296
7297       /* If we called start_enum or pushtag above, this information
7298          will already be set up.  */
7299       if (!TYPE_NAME (t))
7300         {
7301           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7302
7303           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7304           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7305           DECL_SOURCE_LOCATION (type_decl)
7306             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7307         }
7308       else
7309         type_decl = TYPE_NAME (t);
7310
7311       TREE_PRIVATE (type_decl)
7312         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7313       TREE_PROTECTED (type_decl)
7314         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7315       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7316         {
7317           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7318           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7319         }
7320
7321       /* Let's consider the explicit specialization of a member
7322          of a class template specialization that is implicitely instantiated,
7323          e.g.:
7324              template<class T>
7325              struct S
7326              {
7327                template<class U> struct M {}; //#0
7328              };
7329
7330              template<>
7331              template<>
7332              struct S<int>::M<char> //#1
7333              {
7334                int i;
7335              };
7336         [temp.expl.spec]/4 says this is valid.
7337
7338         In this case, when we write:
7339         S<int>::M<char> m;
7340
7341         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7342         the one of #0.
7343
7344         When we encounter #1, we want to store the partial instantiation
7345         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7346
7347         For all cases other than this "explicit specialization of member of a
7348         class template", we just want to store the most general template into
7349         the CLASSTYPE_TI_TEMPLATE of M.
7350
7351         This case of "explicit specialization of member of a class template"
7352         only happens when:
7353         1/ the enclosing class is an instantiation of, and therefore not
7354         the same as, the context of the most general template, and
7355         2/ we aren't looking at the partial instantiation itself, i.e.
7356         the innermost arguments are not the same as the innermost parms of
7357         the most general template.
7358
7359         So it's only when 1/ and 2/ happens that we want to use the partial
7360         instantiation of the member template in lieu of its most general
7361         template.  */
7362
7363       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7364           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7365           /* the enclosing class must be an instantiation...  */
7366           && CLASS_TYPE_P (context)
7367           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7368         {
7369           tree partial_inst_args;
7370           TREE_VEC_LENGTH (arglist)--;
7371           ++processing_template_decl;
7372           partial_inst_args =
7373             tsubst (INNERMOST_TEMPLATE_ARGS
7374                         (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7375                     arglist, complain, NULL_TREE);
7376           --processing_template_decl;
7377           TREE_VEC_LENGTH (arglist)++;
7378           use_partial_inst_tmpl =
7379             /*...and we must not be looking at the partial instantiation
7380              itself. */
7381             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7382                                  partial_inst_args);
7383         }
7384
7385       if (!use_partial_inst_tmpl)
7386         /* This case is easy; there are no member templates involved.  */
7387         found = gen_tmpl;
7388       else
7389         {
7390           /* This is a full instantiation of a member template.  Find
7391              the partial instantiation of which this is an instance.  */
7392
7393           /* Temporarily reduce by one the number of levels in the ARGLIST
7394              so as to avoid comparing the last set of arguments.  */
7395           TREE_VEC_LENGTH (arglist)--;
7396           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7397           TREE_VEC_LENGTH (arglist)++;
7398           found = CLASSTYPE_TI_TEMPLATE (found);
7399         }
7400
7401       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7402
7403       elt.spec = t;
7404       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
7405                                                        &elt, hash, INSERT);
7406       *slot = ggc_alloc_spec_entry ();
7407       **slot = elt;
7408
7409       /* Note this use of the partial instantiation so we can check it
7410          later in maybe_process_partial_specialization.  */
7411       DECL_TEMPLATE_INSTANTIATIONS (templ)
7412         = tree_cons (arglist, t,
7413                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7414
7415       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7416         /* Now that the type has been registered on the instantiations
7417            list, we set up the enumerators.  Because the enumeration
7418            constants may involve the enumeration type itself, we make
7419            sure to register the type first, and then create the
7420            constants.  That way, doing tsubst_expr for the enumeration
7421            constants won't result in recursive calls here; we'll find
7422            the instantiation and exit above.  */
7423         tsubst_enum (template_type, t, arglist);
7424
7425       if (is_dependent_type)
7426         /* If the type makes use of template parameters, the
7427            code that generates debugging information will crash.  */
7428         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7429
7430       /* Possibly limit visibility based on template args.  */
7431       TREE_PUBLIC (type_decl) = 1;
7432       determine_visibility (type_decl);
7433
7434       return t;
7435     }
7436 }
7437
7438 /* Wrapper for lookup_template_class_1.  */
7439
7440 tree
7441 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7442                        int entering_scope, tsubst_flags_t complain)
7443 {
7444   tree ret;
7445   timevar_push (TV_TEMPLATE_INST);
7446   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7447                                  entering_scope, complain);
7448   timevar_pop (TV_TEMPLATE_INST);
7449   return ret;
7450 }
7451 \f
7452 struct pair_fn_data
7453 {
7454   tree_fn_t fn;
7455   void *data;
7456   /* True when we should also visit template parameters that occur in
7457      non-deduced contexts.  */
7458   bool include_nondeduced_p;
7459   struct pointer_set_t *visited;
7460 };
7461
7462 /* Called from for_each_template_parm via walk_tree.  */
7463
7464 static tree
7465 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7466 {
7467   tree t = *tp;
7468   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7469   tree_fn_t fn = pfd->fn;
7470   void *data = pfd->data;
7471
7472   if (TYPE_P (t)
7473       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7474       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7475                                  pfd->include_nondeduced_p))
7476     return error_mark_node;
7477
7478   switch (TREE_CODE (t))
7479     {
7480     case RECORD_TYPE:
7481       if (TYPE_PTRMEMFUNC_P (t))
7482         break;
7483       /* Fall through.  */
7484
7485     case UNION_TYPE:
7486     case ENUMERAL_TYPE:
7487       if (!TYPE_TEMPLATE_INFO (t))
7488         *walk_subtrees = 0;
7489       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7490                                        fn, data, pfd->visited, 
7491                                        pfd->include_nondeduced_p))
7492         return error_mark_node;
7493       break;
7494
7495     case INTEGER_TYPE:
7496       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7497                                   fn, data, pfd->visited, 
7498                                   pfd->include_nondeduced_p)
7499           || for_each_template_parm (TYPE_MAX_VALUE (t),
7500                                      fn, data, pfd->visited,
7501                                      pfd->include_nondeduced_p))
7502         return error_mark_node;
7503       break;
7504
7505     case METHOD_TYPE:
7506       /* Since we're not going to walk subtrees, we have to do this
7507          explicitly here.  */
7508       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7509                                   pfd->visited, pfd->include_nondeduced_p))
7510         return error_mark_node;
7511       /* Fall through.  */
7512
7513     case FUNCTION_TYPE:
7514       /* Check the return type.  */
7515       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7516                                   pfd->include_nondeduced_p))
7517         return error_mark_node;
7518
7519       /* Check the parameter types.  Since default arguments are not
7520          instantiated until they are needed, the TYPE_ARG_TYPES may
7521          contain expressions that involve template parameters.  But,
7522          no-one should be looking at them yet.  And, once they're
7523          instantiated, they don't contain template parameters, so
7524          there's no point in looking at them then, either.  */
7525       {
7526         tree parm;
7527
7528         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7529           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7530                                       pfd->visited, pfd->include_nondeduced_p))
7531             return error_mark_node;
7532
7533         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7534            want walk_tree walking into them itself.  */
7535         *walk_subtrees = 0;
7536       }
7537       break;
7538
7539     case TYPEOF_TYPE:
7540     case UNDERLYING_TYPE:
7541       if (pfd->include_nondeduced_p
7542           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7543                                      pfd->visited, 
7544                                      pfd->include_nondeduced_p))
7545         return error_mark_node;
7546       break;
7547
7548     case FUNCTION_DECL:
7549     case VAR_DECL:
7550       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7551           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7552                                      pfd->visited, pfd->include_nondeduced_p))
7553         return error_mark_node;
7554       /* Fall through.  */
7555
7556     case PARM_DECL:
7557     case CONST_DECL:
7558       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7559           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7560                                      pfd->visited, pfd->include_nondeduced_p))
7561         return error_mark_node;
7562       if (DECL_CONTEXT (t)
7563           && pfd->include_nondeduced_p
7564           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7565                                      pfd->visited, pfd->include_nondeduced_p))
7566         return error_mark_node;
7567       break;
7568
7569     case BOUND_TEMPLATE_TEMPLATE_PARM:
7570       /* Record template parameters such as `T' inside `TT<T>'.  */
7571       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7572                                   pfd->include_nondeduced_p))
7573         return error_mark_node;
7574       /* Fall through.  */
7575
7576     case TEMPLATE_TEMPLATE_PARM:
7577     case TEMPLATE_TYPE_PARM:
7578     case TEMPLATE_PARM_INDEX:
7579       if (fn && (*fn)(t, data))
7580         return error_mark_node;
7581       else if (!fn)
7582         return error_mark_node;
7583       break;
7584
7585     case TEMPLATE_DECL:
7586       /* A template template parameter is encountered.  */
7587       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7588           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7589                                      pfd->include_nondeduced_p))
7590         return error_mark_node;
7591
7592       /* Already substituted template template parameter */
7593       *walk_subtrees = 0;
7594       break;
7595
7596     case TYPENAME_TYPE:
7597       if (!fn
7598           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7599                                      data, pfd->visited, 
7600                                      pfd->include_nondeduced_p))
7601         return error_mark_node;
7602       break;
7603
7604     case CONSTRUCTOR:
7605       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7606           && pfd->include_nondeduced_p
7607           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7608                                      (TREE_TYPE (t)), fn, data,
7609                                      pfd->visited, pfd->include_nondeduced_p))
7610         return error_mark_node;
7611       break;
7612
7613     case INDIRECT_REF:
7614     case COMPONENT_REF:
7615       /* If there's no type, then this thing must be some expression
7616          involving template parameters.  */
7617       if (!fn && !TREE_TYPE (t))
7618         return error_mark_node;
7619       break;
7620
7621     case MODOP_EXPR:
7622     case CAST_EXPR:
7623     case REINTERPRET_CAST_EXPR:
7624     case CONST_CAST_EXPR:
7625     case STATIC_CAST_EXPR:
7626     case DYNAMIC_CAST_EXPR:
7627     case ARROW_EXPR:
7628     case DOTSTAR_EXPR:
7629     case TYPEID_EXPR:
7630     case PSEUDO_DTOR_EXPR:
7631       if (!fn)
7632         return error_mark_node;
7633       break;
7634
7635     default:
7636       break;
7637     }
7638
7639   /* We didn't find any template parameters we liked.  */
7640   return NULL_TREE;
7641 }
7642
7643 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7644    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7645    call FN with the parameter and the DATA.
7646    If FN returns nonzero, the iteration is terminated, and
7647    for_each_template_parm returns 1.  Otherwise, the iteration
7648    continues.  If FN never returns a nonzero value, the value
7649    returned by for_each_template_parm is 0.  If FN is NULL, it is
7650    considered to be the function which always returns 1.
7651
7652    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7653    parameters that occur in non-deduced contexts.  When false, only
7654    visits those template parameters that can be deduced.  */
7655
7656 static int
7657 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7658                         struct pointer_set_t *visited,
7659                         bool include_nondeduced_p)
7660 {
7661   struct pair_fn_data pfd;
7662   int result;
7663
7664   /* Set up.  */
7665   pfd.fn = fn;
7666   pfd.data = data;
7667   pfd.include_nondeduced_p = include_nondeduced_p;
7668
7669   /* Walk the tree.  (Conceptually, we would like to walk without
7670      duplicates, but for_each_template_parm_r recursively calls
7671      for_each_template_parm, so we would need to reorganize a fair
7672      bit to use walk_tree_without_duplicates, so we keep our own
7673      visited list.)  */
7674   if (visited)
7675     pfd.visited = visited;
7676   else
7677     pfd.visited = pointer_set_create ();
7678   result = cp_walk_tree (&t,
7679                          for_each_template_parm_r,
7680                          &pfd,
7681                          pfd.visited) != NULL_TREE;
7682
7683   /* Clean up.  */
7684   if (!visited)
7685     {
7686       pointer_set_destroy (pfd.visited);
7687       pfd.visited = 0;
7688     }
7689
7690   return result;
7691 }
7692
7693 /* Returns true if T depends on any template parameter.  */
7694
7695 int
7696 uses_template_parms (tree t)
7697 {
7698   bool dependent_p;
7699   int saved_processing_template_decl;
7700
7701   saved_processing_template_decl = processing_template_decl;
7702   if (!saved_processing_template_decl)
7703     processing_template_decl = 1;
7704   if (TYPE_P (t))
7705     dependent_p = dependent_type_p (t);
7706   else if (TREE_CODE (t) == TREE_VEC)
7707     dependent_p = any_dependent_template_arguments_p (t);
7708   else if (TREE_CODE (t) == TREE_LIST)
7709     dependent_p = (uses_template_parms (TREE_VALUE (t))
7710                    || uses_template_parms (TREE_CHAIN (t)));
7711   else if (TREE_CODE (t) == TYPE_DECL)
7712     dependent_p = dependent_type_p (TREE_TYPE (t));
7713   else if (DECL_P (t)
7714            || EXPR_P (t)
7715            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7716            || TREE_CODE (t) == OVERLOAD
7717            || TREE_CODE (t) == BASELINK
7718            || TREE_CODE (t) == IDENTIFIER_NODE
7719            || TREE_CODE (t) == TRAIT_EXPR
7720            || TREE_CODE (t) == CONSTRUCTOR
7721            || CONSTANT_CLASS_P (t))
7722     dependent_p = (type_dependent_expression_p (t)
7723                    || value_dependent_expression_p (t));
7724   else
7725     {
7726       gcc_assert (t == error_mark_node);
7727       dependent_p = false;
7728     }
7729
7730   processing_template_decl = saved_processing_template_decl;
7731
7732   return dependent_p;
7733 }
7734
7735 /* Returns true if T depends on any template parameter with level LEVEL.  */
7736
7737 int
7738 uses_template_parms_level (tree t, int level)
7739 {
7740   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7741                                  /*include_nondeduced_p=*/true);
7742 }
7743
7744 /* Returns TRUE iff INST is an instantiation we don't need to do in an
7745    ill-formed translation unit, i.e. a variable or function that isn't
7746    usable in a constant expression.  */
7747
7748 static inline bool
7749 neglectable_inst_p (tree d)
7750 {
7751   return (DECL_P (d)
7752           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
7753                : decl_maybe_constant_var_p (d)));
7754 }
7755
7756 /* Returns TRUE iff we should refuse to instantiate DECL because it's
7757    neglectable and instantiated from within an erroneous instantiation.  */
7758
7759 static bool
7760 limit_bad_template_recursion (tree decl)
7761 {
7762   struct tinst_level *lev = current_tinst_level;
7763   int errs = errorcount + sorrycount;
7764   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
7765     return false;
7766
7767   for (; lev; lev = lev->next)
7768     if (neglectable_inst_p (lev->decl))
7769       break;
7770
7771   return (lev && errs > lev->errors);
7772 }
7773
7774 static int tinst_depth;
7775 extern int max_tinst_depth;
7776 #ifdef GATHER_STATISTICS
7777 int depth_reached;
7778 #endif
7779 static GTY(()) struct tinst_level *last_error_tinst_level;
7780
7781 /* We're starting to instantiate D; record the template instantiation context
7782    for diagnostics and to restore it later.  */
7783
7784 int
7785 push_tinst_level (tree d)
7786 {
7787   struct tinst_level *new_level;
7788
7789   if (tinst_depth >= max_tinst_depth)
7790     {
7791       last_error_tinst_level = current_tinst_level;
7792       if (TREE_CODE (d) == TREE_LIST)
7793         error ("template instantiation depth exceeds maximum of %d (use "
7794                "-ftemplate-depth= to increase the maximum) substituting %qS",
7795                max_tinst_depth, d);
7796       else
7797         error ("template instantiation depth exceeds maximum of %d (use "
7798                "-ftemplate-depth= to increase the maximum) instantiating %qD",
7799                max_tinst_depth, d);
7800
7801       print_instantiation_context ();
7802
7803       return 0;
7804     }
7805
7806   /* If the current instantiation caused problems, don't let it instantiate
7807      anything else.  Do allow deduction substitution and decls usable in
7808      constant expressions.  */
7809   if (limit_bad_template_recursion (d))
7810     return 0;
7811
7812   new_level = ggc_alloc_tinst_level ();
7813   new_level->decl = d;
7814   new_level->locus = input_location;
7815   new_level->errors = errorcount+sorrycount;
7816   new_level->in_system_header_p = in_system_header;
7817   new_level->next = current_tinst_level;
7818   current_tinst_level = new_level;
7819
7820   ++tinst_depth;
7821 #ifdef GATHER_STATISTICS
7822   if (tinst_depth > depth_reached)
7823     depth_reached = tinst_depth;
7824 #endif
7825
7826   return 1;
7827 }
7828
7829 /* We're done instantiating this template; return to the instantiation
7830    context.  */
7831
7832 void
7833 pop_tinst_level (void)
7834 {
7835   /* Restore the filename and line number stashed away when we started
7836      this instantiation.  */
7837   input_location = current_tinst_level->locus;
7838   current_tinst_level = current_tinst_level->next;
7839   --tinst_depth;
7840 }
7841
7842 /* We're instantiating a deferred template; restore the template
7843    instantiation context in which the instantiation was requested, which
7844    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7845
7846 static tree
7847 reopen_tinst_level (struct tinst_level *level)
7848 {
7849   struct tinst_level *t;
7850
7851   tinst_depth = 0;
7852   for (t = level; t; t = t->next)
7853     ++tinst_depth;
7854
7855   current_tinst_level = level;
7856   pop_tinst_level ();
7857   if (current_tinst_level)
7858     current_tinst_level->errors = errorcount+sorrycount;
7859   return level->decl;
7860 }
7861
7862 /* Returns the TINST_LEVEL which gives the original instantiation
7863    context.  */
7864
7865 struct tinst_level *
7866 outermost_tinst_level (void)
7867 {
7868   struct tinst_level *level = current_tinst_level;
7869   if (level)
7870     while (level->next)
7871       level = level->next;
7872   return level;
7873 }
7874
7875 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
7876
7877 bool
7878 parameter_of_template_p (tree parm, tree templ)
7879 {
7880   tree parms;
7881   int i;
7882
7883   if (!parm || !templ)
7884     return false;
7885
7886   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7887   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7888
7889   parms = DECL_TEMPLATE_PARMS (templ);
7890   parms = INNERMOST_TEMPLATE_PARMS (parms);
7891
7892   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7893     {
7894       tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
7895       if (parm == p
7896           || (DECL_INITIAL (parm)
7897               && DECL_INITIAL (parm) == DECL_INITIAL (p)))
7898         return true;
7899     }
7900
7901   return false;
7902 }
7903
7904 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
7905    vector of template arguments, as for tsubst.
7906
7907    Returns an appropriate tsubst'd friend declaration.  */
7908
7909 static tree
7910 tsubst_friend_function (tree decl, tree args)
7911 {
7912   tree new_friend;
7913
7914   if (TREE_CODE (decl) == FUNCTION_DECL
7915       && DECL_TEMPLATE_INSTANTIATION (decl)
7916       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7917     /* This was a friend declared with an explicit template
7918        argument list, e.g.:
7919
7920        friend void f<>(T);
7921
7922        to indicate that f was a template instantiation, not a new
7923        function declaration.  Now, we have to figure out what
7924        instantiation of what template.  */
7925     {
7926       tree template_id, arglist, fns;
7927       tree new_args;
7928       tree tmpl;
7929       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7930
7931       /* Friend functions are looked up in the containing namespace scope.
7932          We must enter that scope, to avoid finding member functions of the
7933          current class with same name.  */
7934       push_nested_namespace (ns);
7935       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7936                          tf_warning_or_error, NULL_TREE,
7937                          /*integral_constant_expression_p=*/false);
7938       pop_nested_namespace (ns);
7939       arglist = tsubst (DECL_TI_ARGS (decl), args,
7940                         tf_warning_or_error, NULL_TREE);
7941       template_id = lookup_template_function (fns, arglist);
7942
7943       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7944       tmpl = determine_specialization (template_id, new_friend,
7945                                        &new_args,
7946                                        /*need_member_template=*/0,
7947                                        TREE_VEC_LENGTH (args),
7948                                        tsk_none);
7949       return instantiate_template (tmpl, new_args, tf_error);
7950     }
7951
7952   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7953
7954   /* The NEW_FRIEND will look like an instantiation, to the
7955      compiler, but is not an instantiation from the point of view of
7956      the language.  For example, we might have had:
7957
7958      template <class T> struct S {
7959        template <class U> friend void f(T, U);
7960      };
7961
7962      Then, in S<int>, template <class U> void f(int, U) is not an
7963      instantiation of anything.  */
7964   if (new_friend == error_mark_node)
7965     return error_mark_node;
7966
7967   DECL_USE_TEMPLATE (new_friend) = 0;
7968   if (TREE_CODE (decl) == TEMPLATE_DECL)
7969     {
7970       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7971       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7972         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7973     }
7974
7975   /* The mangled name for the NEW_FRIEND is incorrect.  The function
7976      is not a template instantiation and should not be mangled like
7977      one.  Therefore, we forget the mangling here; we'll recompute it
7978      later if we need it.  */
7979   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7980     {
7981       SET_DECL_RTL (new_friend, NULL);
7982       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7983     }
7984
7985   if (DECL_NAMESPACE_SCOPE_P (new_friend))
7986     {
7987       tree old_decl;
7988       tree new_friend_template_info;
7989       tree new_friend_result_template_info;
7990       tree ns;
7991       int  new_friend_is_defn;
7992
7993       /* We must save some information from NEW_FRIEND before calling
7994          duplicate decls since that function will free NEW_FRIEND if
7995          possible.  */
7996       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7997       new_friend_is_defn =
7998             (DECL_INITIAL (DECL_TEMPLATE_RESULT
7999                            (template_for_substitution (new_friend)))
8000              != NULL_TREE);
8001       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8002         {
8003           /* This declaration is a `primary' template.  */
8004           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8005
8006           new_friend_result_template_info
8007             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8008         }
8009       else
8010         new_friend_result_template_info = NULL_TREE;
8011
8012       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8013       if (new_friend_is_defn)
8014         DECL_INITIAL (new_friend) = error_mark_node;
8015
8016       /* Inside pushdecl_namespace_level, we will push into the
8017          current namespace. However, the friend function should go
8018          into the namespace of the template.  */
8019       ns = decl_namespace_context (new_friend);
8020       push_nested_namespace (ns);
8021       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8022       pop_nested_namespace (ns);
8023
8024       if (old_decl == error_mark_node)
8025         return error_mark_node;
8026
8027       if (old_decl != new_friend)
8028         {
8029           /* This new friend declaration matched an existing
8030              declaration.  For example, given:
8031
8032                template <class T> void f(T);
8033                template <class U> class C {
8034                  template <class T> friend void f(T) {}
8035                };
8036
8037              the friend declaration actually provides the definition
8038              of `f', once C has been instantiated for some type.  So,
8039              old_decl will be the out-of-class template declaration,
8040              while new_friend is the in-class definition.
8041
8042              But, if `f' was called before this point, the
8043              instantiation of `f' will have DECL_TI_ARGS corresponding
8044              to `T' but not to `U', references to which might appear
8045              in the definition of `f'.  Previously, the most general
8046              template for an instantiation of `f' was the out-of-class
8047              version; now it is the in-class version.  Therefore, we
8048              run through all specialization of `f', adding to their
8049              DECL_TI_ARGS appropriately.  In particular, they need a
8050              new set of outer arguments, corresponding to the
8051              arguments for this class instantiation.
8052
8053              The same situation can arise with something like this:
8054
8055                friend void f(int);
8056                template <class T> class C {
8057                  friend void f(T) {}
8058                };
8059
8060              when `C<int>' is instantiated.  Now, `f(int)' is defined
8061              in the class.  */
8062
8063           if (!new_friend_is_defn)
8064             /* On the other hand, if the in-class declaration does
8065                *not* provide a definition, then we don't want to alter
8066                existing definitions.  We can just leave everything
8067                alone.  */
8068             ;
8069           else
8070             {
8071               tree new_template = TI_TEMPLATE (new_friend_template_info);
8072               tree new_args = TI_ARGS (new_friend_template_info);
8073
8074               /* Overwrite whatever template info was there before, if
8075                  any, with the new template information pertaining to
8076                  the declaration.  */
8077               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8078
8079               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8080                 {
8081                   /* We should have called reregister_specialization in
8082                      duplicate_decls.  */
8083                   gcc_assert (retrieve_specialization (new_template,
8084                                                        new_args, 0)
8085                               == old_decl);
8086
8087                   /* Instantiate it if the global has already been used.  */
8088                   if (DECL_ODR_USED (old_decl))
8089                     instantiate_decl (old_decl, /*defer_ok=*/true,
8090                                       /*expl_inst_class_mem_p=*/false);
8091                 }
8092               else
8093                 {
8094                   tree t;
8095
8096                   /* Indicate that the old function template is a partial
8097                      instantiation.  */
8098                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8099                     = new_friend_result_template_info;
8100
8101                   gcc_assert (new_template
8102                               == most_general_template (new_template));
8103                   gcc_assert (new_template != old_decl);
8104
8105                   /* Reassign any specializations already in the hash table
8106                      to the new more general template, and add the
8107                      additional template args.  */
8108                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8109                        t != NULL_TREE;
8110                        t = TREE_CHAIN (t))
8111                     {
8112                       tree spec = TREE_VALUE (t);
8113                       spec_entry elt;
8114
8115                       elt.tmpl = old_decl;
8116                       elt.args = DECL_TI_ARGS (spec);
8117                       elt.spec = NULL_TREE;
8118
8119                       htab_remove_elt (decl_specializations, &elt);
8120
8121                       DECL_TI_ARGS (spec)
8122                         = add_outermost_template_args (new_args,
8123                                                        DECL_TI_ARGS (spec));
8124
8125                       register_specialization
8126                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8127
8128                     }
8129                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8130                 }
8131             }
8132
8133           /* The information from NEW_FRIEND has been merged into OLD_DECL
8134              by duplicate_decls.  */
8135           new_friend = old_decl;
8136         }
8137     }
8138   else
8139     {
8140       tree context = DECL_CONTEXT (new_friend);
8141       bool dependent_p;
8142
8143       /* In the code
8144            template <class T> class C {
8145              template <class U> friend void C1<U>::f (); // case 1
8146              friend void C2<T>::f ();                    // case 2
8147            };
8148          we only need to make sure CONTEXT is a complete type for
8149          case 2.  To distinguish between the two cases, we note that
8150          CONTEXT of case 1 remains dependent type after tsubst while
8151          this isn't true for case 2.  */
8152       ++processing_template_decl;
8153       dependent_p = dependent_type_p (context);
8154       --processing_template_decl;
8155
8156       if (!dependent_p
8157           && !complete_type_or_else (context, NULL_TREE))
8158         return error_mark_node;
8159
8160       if (COMPLETE_TYPE_P (context))
8161         {
8162           /* Check to see that the declaration is really present, and,
8163              possibly obtain an improved declaration.  */
8164           tree fn = check_classfn (context,
8165                                    new_friend, NULL_TREE);
8166
8167           if (fn)
8168             new_friend = fn;
8169         }
8170     }
8171
8172   return new_friend;
8173 }
8174
8175 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8176    template arguments, as for tsubst.
8177
8178    Returns an appropriate tsubst'd friend type or error_mark_node on
8179    failure.  */
8180
8181 static tree
8182 tsubst_friend_class (tree friend_tmpl, tree args)
8183 {
8184   tree friend_type;
8185   tree tmpl;
8186   tree context;
8187
8188   context = CP_DECL_CONTEXT (friend_tmpl);
8189
8190   if (context != global_namespace)
8191     {
8192       if (TREE_CODE (context) == NAMESPACE_DECL)
8193         push_nested_namespace (context);
8194       else
8195         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8196     }
8197
8198   /* Look for a class template declaration.  We look for hidden names
8199      because two friend declarations of the same template are the
8200      same.  For example, in:
8201
8202        struct A { 
8203          template <typename> friend class F;
8204        };
8205        template <typename> struct B { 
8206          template <typename> friend class F;
8207        };
8208
8209      both F templates are the same.  */
8210   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8211                            /*block_p=*/true, 0, 
8212                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8213
8214   /* But, if we don't find one, it might be because we're in a
8215      situation like this:
8216
8217        template <class T>
8218        struct S {
8219          template <class U>
8220          friend struct S;
8221        };
8222
8223      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8224      for `S<int>', not the TEMPLATE_DECL.  */
8225   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8226     {
8227       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8228       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8229     }
8230
8231   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8232     {
8233       /* The friend template has already been declared.  Just
8234          check to see that the declarations match, and install any new
8235          default parameters.  We must tsubst the default parameters,
8236          of course.  We only need the innermost template parameters
8237          because that is all that redeclare_class_template will look
8238          at.  */
8239       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8240           > TMPL_ARGS_DEPTH (args))
8241         {
8242           tree parms;
8243           location_t saved_input_location;
8244           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8245                                          args, tf_warning_or_error);
8246
8247           saved_input_location = input_location;
8248           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8249           redeclare_class_template (TREE_TYPE (tmpl), parms);
8250           input_location = saved_input_location;
8251           
8252         }
8253
8254       friend_type = TREE_TYPE (tmpl);
8255     }
8256   else
8257     {
8258       /* The friend template has not already been declared.  In this
8259          case, the instantiation of the template class will cause the
8260          injection of this template into the global scope.  */
8261       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8262       if (tmpl == error_mark_node)
8263         return error_mark_node;
8264
8265       /* The new TMPL is not an instantiation of anything, so we
8266          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8267          the new type because that is supposed to be the corresponding
8268          template decl, i.e., TMPL.  */
8269       DECL_USE_TEMPLATE (tmpl) = 0;
8270       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8271       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8272       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8273         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8274
8275       /* Inject this template into the global scope.  */
8276       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8277     }
8278
8279   if (context != global_namespace)
8280     {
8281       if (TREE_CODE (context) == NAMESPACE_DECL)
8282         pop_nested_namespace (context);
8283       else
8284         pop_nested_class ();
8285     }
8286
8287   return friend_type;
8288 }
8289
8290 /* Returns zero if TYPE cannot be completed later due to circularity.
8291    Otherwise returns one.  */
8292
8293 static int
8294 can_complete_type_without_circularity (tree type)
8295 {
8296   if (type == NULL_TREE || type == error_mark_node)
8297     return 0;
8298   else if (COMPLETE_TYPE_P (type))
8299     return 1;
8300   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8301     return can_complete_type_without_circularity (TREE_TYPE (type));
8302   else if (CLASS_TYPE_P (type)
8303            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8304     return 0;
8305   else
8306     return 1;
8307 }
8308
8309 /* Apply any attributes which had to be deferred until instantiation
8310    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8311    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8312
8313 static void
8314 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8315                                 tree args, tsubst_flags_t complain, tree in_decl)
8316 {
8317   tree last_dep = NULL_TREE;
8318   tree t;
8319   tree *p;
8320
8321   for (t = attributes; t; t = TREE_CHAIN (t))
8322     if (ATTR_IS_DEPENDENT (t))
8323       {
8324         last_dep = t;
8325         attributes = copy_list (attributes);
8326         break;
8327       }
8328
8329   if (DECL_P (*decl_p))
8330     {
8331       if (TREE_TYPE (*decl_p) == error_mark_node)
8332         return;
8333       p = &DECL_ATTRIBUTES (*decl_p);
8334     }
8335   else
8336     p = &TYPE_ATTRIBUTES (*decl_p);
8337
8338   if (last_dep)
8339     {
8340       tree late_attrs = NULL_TREE;
8341       tree *q = &late_attrs;
8342
8343       for (*p = attributes; *p; )
8344         {
8345           t = *p;
8346           if (ATTR_IS_DEPENDENT (t))
8347             {
8348               *p = TREE_CHAIN (t);
8349               TREE_CHAIN (t) = NULL_TREE;
8350               /* If the first attribute argument is an identifier, don't
8351                  pass it through tsubst.  Attributes like mode, format,
8352                  cleanup and several target specific attributes expect it
8353                  unmodified.  */
8354               if (TREE_VALUE (t)
8355                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8356                   && TREE_VALUE (TREE_VALUE (t))
8357                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8358                       == IDENTIFIER_NODE))
8359                 {
8360                   tree chain
8361                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8362                                    in_decl,
8363                                    /*integral_constant_expression_p=*/false);
8364                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8365                     TREE_VALUE (t)
8366                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8367                                    chain);
8368                 }
8369               else
8370                 TREE_VALUE (t)
8371                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8372                                  /*integral_constant_expression_p=*/false);
8373               *q = t;
8374               q = &TREE_CHAIN (t);
8375             }
8376           else
8377             p = &TREE_CHAIN (t);
8378         }
8379
8380       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8381     }
8382 }
8383
8384 /* Perform (or defer) access check for typedefs that were referenced
8385    from within the template TMPL code.
8386    This is a subroutine of instantiate_template and instantiate_class_template.
8387    TMPL is the template to consider and TARGS is the list of arguments of
8388    that template.  */
8389
8390 static void
8391 perform_typedefs_access_check (tree tmpl, tree targs)
8392 {
8393   location_t saved_location;
8394   int i;
8395   qualified_typedef_usage_t *iter;
8396
8397   if (!tmpl
8398       || (!CLASS_TYPE_P (tmpl)
8399           && TREE_CODE (tmpl) != FUNCTION_DECL))
8400     return;
8401
8402   saved_location = input_location;
8403   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8404                     get_types_needing_access_check (tmpl),
8405                     i, iter)
8406     {
8407       tree type_decl = iter->typedef_decl;
8408       tree type_scope = iter->context;
8409
8410       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8411         continue;
8412
8413       if (uses_template_parms (type_decl))
8414         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8415       if (uses_template_parms (type_scope))
8416         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8417
8418       /* Make access check error messages point to the location
8419          of the use of the typedef.  */
8420       input_location = iter->locus;
8421       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8422                                      type_decl, type_decl);
8423     }
8424     input_location = saved_location;
8425 }
8426
8427 static tree
8428 instantiate_class_template_1 (tree type)
8429 {
8430   tree templ, args, pattern, t, member;
8431   tree typedecl;
8432   tree pbinfo;
8433   tree base_list;
8434   unsigned int saved_maximum_field_alignment;
8435
8436   if (type == error_mark_node)
8437     return error_mark_node;
8438
8439   if (COMPLETE_OR_OPEN_TYPE_P (type)
8440       || uses_template_parms (type))
8441     return type;
8442
8443   /* Figure out which template is being instantiated.  */
8444   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8445   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8446
8447   /* Determine what specialization of the original template to
8448      instantiate.  */
8449   t = most_specialized_class (type, templ, tf_warning_or_error);
8450   if (t == error_mark_node)
8451     {
8452       TYPE_BEING_DEFINED (type) = 1;
8453       return error_mark_node;
8454     }
8455   else if (t)
8456     {
8457       /* This TYPE is actually an instantiation of a partial
8458          specialization.  We replace the innermost set of ARGS with
8459          the arguments appropriate for substitution.  For example,
8460          given:
8461
8462            template <class T> struct S {};
8463            template <class T> struct S<T*> {};
8464
8465          and supposing that we are instantiating S<int*>, ARGS will
8466          presently be {int*} -- but we need {int}.  */
8467       pattern = TREE_TYPE (t);
8468       args = TREE_PURPOSE (t);
8469     }
8470   else
8471     {
8472       pattern = TREE_TYPE (templ);
8473       args = CLASSTYPE_TI_ARGS (type);
8474     }
8475
8476   /* If the template we're instantiating is incomplete, then clearly
8477      there's nothing we can do.  */
8478   if (!COMPLETE_TYPE_P (pattern))
8479     return type;
8480
8481   /* If we've recursively instantiated too many templates, stop.  */
8482   if (! push_tinst_level (type))
8483     return type;
8484
8485   /* Now we're really doing the instantiation.  Mark the type as in
8486      the process of being defined.  */
8487   TYPE_BEING_DEFINED (type) = 1;
8488
8489   /* We may be in the middle of deferred access check.  Disable
8490      it now.  */
8491   push_deferring_access_checks (dk_no_deferred);
8492
8493   push_to_top_level ();
8494   /* Use #pragma pack from the template context.  */
8495   saved_maximum_field_alignment = maximum_field_alignment;
8496   maximum_field_alignment = TYPE_PRECISION (pattern);
8497
8498   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8499
8500   /* Set the input location to the most specialized template definition.
8501      This is needed if tsubsting causes an error.  */
8502   typedecl = TYPE_MAIN_DECL (pattern);
8503   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8504     DECL_SOURCE_LOCATION (typedecl);
8505
8506   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
8507   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
8508   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
8509   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
8510   TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern);
8511   TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern);
8512   TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern);
8513   TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern);
8514   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
8515   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
8516   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8517   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8518   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8519   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8520   if (ANON_AGGR_TYPE_P (pattern))
8521     SET_ANON_AGGR_TYPE_P (type);
8522   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8523     {
8524       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8525       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8526     }
8527   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8528
8529   pbinfo = TYPE_BINFO (pattern);
8530
8531   /* We should never instantiate a nested class before its enclosing
8532      class; we need to look up the nested class by name before we can
8533      instantiate it, and that lookup should instantiate the enclosing
8534      class.  */
8535   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8536               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8537
8538   base_list = NULL_TREE;
8539   if (BINFO_N_BASE_BINFOS (pbinfo))
8540     {
8541       tree pbase_binfo;
8542       tree pushed_scope;
8543       int i;
8544
8545       /* We must enter the scope containing the type, as that is where
8546          the accessibility of types named in dependent bases are
8547          looked up from.  */
8548       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8549
8550       /* Substitute into each of the bases to determine the actual
8551          basetypes.  */
8552       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8553         {
8554           tree base;
8555           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8556           tree expanded_bases = NULL_TREE;
8557           int idx, len = 1;
8558
8559           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8560             {
8561               expanded_bases = 
8562                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8563                                        args, tf_error, NULL_TREE);
8564               if (expanded_bases == error_mark_node)
8565                 continue;
8566
8567               len = TREE_VEC_LENGTH (expanded_bases);
8568             }
8569
8570           for (idx = 0; idx < len; idx++)
8571             {
8572               if (expanded_bases)
8573                 /* Extract the already-expanded base class.  */
8574                 base = TREE_VEC_ELT (expanded_bases, idx);
8575               else
8576                 /* Substitute to figure out the base class.  */
8577                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8578                                NULL_TREE);
8579
8580               if (base == error_mark_node)
8581                 continue;
8582
8583               base_list = tree_cons (access, base, base_list);
8584               if (BINFO_VIRTUAL_P (pbase_binfo))
8585                 TREE_TYPE (base_list) = integer_type_node;
8586             }
8587         }
8588
8589       /* The list is now in reverse order; correct that.  */
8590       base_list = nreverse (base_list);
8591
8592       if (pushed_scope)
8593         pop_scope (pushed_scope);
8594     }
8595   /* Now call xref_basetypes to set up all the base-class
8596      information.  */
8597   xref_basetypes (type, base_list);
8598
8599   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8600                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8601                                   args, tf_error, NULL_TREE);
8602   fixup_attribute_variants (type);
8603
8604   /* Now that our base classes are set up, enter the scope of the
8605      class, so that name lookups into base classes, etc. will work
8606      correctly.  This is precisely analogous to what we do in
8607      begin_class_definition when defining an ordinary non-template
8608      class, except we also need to push the enclosing classes.  */
8609   push_nested_class (type);
8610
8611   /* Now members are processed in the order of declaration.  */
8612   for (member = CLASSTYPE_DECL_LIST (pattern);
8613        member; member = TREE_CHAIN (member))
8614     {
8615       tree t = TREE_VALUE (member);
8616
8617       if (TREE_PURPOSE (member))
8618         {
8619           if (TYPE_P (t))
8620             {
8621               /* Build new CLASSTYPE_NESTED_UTDS.  */
8622
8623               tree newtag;
8624               bool class_template_p;
8625
8626               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8627                                   && TYPE_LANG_SPECIFIC (t)
8628                                   && CLASSTYPE_IS_TEMPLATE (t));
8629               /* If the member is a class template, then -- even after
8630                  substitution -- there may be dependent types in the
8631                  template argument list for the class.  We increment
8632                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8633                  that function will assume that no types are dependent
8634                  when outside of a template.  */
8635               if (class_template_p)
8636                 ++processing_template_decl;
8637               newtag = tsubst (t, args, tf_error, NULL_TREE);
8638               if (class_template_p)
8639                 --processing_template_decl;
8640               if (newtag == error_mark_node)
8641                 continue;
8642
8643               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8644                 {
8645                   tree name = TYPE_IDENTIFIER (t);
8646
8647                   if (class_template_p)
8648                     /* Unfortunately, lookup_template_class sets
8649                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8650                        instantiation (i.e., for the type of a member
8651                        template class nested within a template class.)
8652                        This behavior is required for
8653                        maybe_process_partial_specialization to work
8654                        correctly, but is not accurate in this case;
8655                        the TAG is not an instantiation of anything.
8656                        (The corresponding TEMPLATE_DECL is an
8657                        instantiation, but the TYPE is not.) */
8658                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8659
8660                   /* Now, we call pushtag to put this NEWTAG into the scope of
8661                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8662                      pushtag calling push_template_decl.  We don't have to do
8663                      this for enums because it will already have been done in
8664                      tsubst_enum.  */
8665                   if (name)
8666                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8667                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8668                 }
8669             }
8670           else if (TREE_CODE (t) == FUNCTION_DECL
8671                    || DECL_FUNCTION_TEMPLATE_P (t))
8672             {
8673               /* Build new TYPE_METHODS.  */
8674               tree r;
8675
8676               if (TREE_CODE (t) == TEMPLATE_DECL)
8677                 ++processing_template_decl;
8678               r = tsubst (t, args, tf_error, NULL_TREE);
8679               if (TREE_CODE (t) == TEMPLATE_DECL)
8680                 --processing_template_decl;
8681               set_current_access_from_decl (r);
8682               finish_member_declaration (r);
8683               /* Instantiate members marked with attribute used.  */
8684               if (r != error_mark_node && DECL_PRESERVE_P (r))
8685                 mark_used (r);
8686             }
8687           else
8688             {
8689               /* Build new TYPE_FIELDS.  */
8690               if (TREE_CODE (t) == STATIC_ASSERT)
8691                 {
8692                   tree condition = 
8693                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8694                                  tf_warning_or_error, NULL_TREE,
8695                                  /*integral_constant_expression_p=*/true);
8696                   finish_static_assert (condition,
8697                                         STATIC_ASSERT_MESSAGE (t), 
8698                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8699                                         /*member_p=*/true);
8700                 }
8701               else if (TREE_CODE (t) != CONST_DECL)
8702                 {
8703                   tree r;
8704
8705                   /* The file and line for this declaration, to
8706                      assist in error message reporting.  Since we
8707                      called push_tinst_level above, we don't need to
8708                      restore these.  */
8709                   input_location = DECL_SOURCE_LOCATION (t);
8710
8711                   if (TREE_CODE (t) == TEMPLATE_DECL)
8712                     ++processing_template_decl;
8713                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8714                   if (TREE_CODE (t) == TEMPLATE_DECL)
8715                     --processing_template_decl;
8716                   if (TREE_CODE (r) == VAR_DECL)
8717                     {
8718                       /* In [temp.inst]:
8719
8720                            [t]he initialization (and any associated
8721                            side-effects) of a static data member does
8722                            not occur unless the static data member is
8723                            itself used in a way that requires the
8724                            definition of the static data member to
8725                            exist.
8726
8727                          Therefore, we do not substitute into the
8728                          initialized for the static data member here.  */
8729                       finish_static_data_member_decl
8730                         (r,
8731                          /*init=*/NULL_TREE,
8732                          /*init_const_expr_p=*/false,
8733                          /*asmspec_tree=*/NULL_TREE,
8734                          /*flags=*/0);
8735                       /* Instantiate members marked with attribute used.  */
8736                       if (r != error_mark_node && DECL_PRESERVE_P (r))
8737                         mark_used (r);
8738                     }
8739                   else if (TREE_CODE (r) == FIELD_DECL)
8740                     {
8741                       /* Determine whether R has a valid type and can be
8742                          completed later.  If R is invalid, then it is
8743                          replaced by error_mark_node so that it will not be
8744                          added to TYPE_FIELDS.  */
8745                       tree rtype = TREE_TYPE (r);
8746                       if (can_complete_type_without_circularity (rtype))
8747                         complete_type (rtype);
8748
8749                       if (!COMPLETE_TYPE_P (rtype))
8750                         {
8751                           cxx_incomplete_type_error (r, rtype);
8752                           r = error_mark_node;
8753                         }
8754                     }
8755
8756                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8757                      such a thing will already have been added to the field
8758                      list by tsubst_enum in finish_member_declaration in the
8759                      CLASSTYPE_NESTED_UTDS case above.  */
8760                   if (!(TREE_CODE (r) == TYPE_DECL
8761                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8762                         && DECL_ARTIFICIAL (r)))
8763                     {
8764                       set_current_access_from_decl (r);
8765                       finish_member_declaration (r);
8766                     }
8767                 }
8768             }
8769         }
8770       else
8771         {
8772           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8773             {
8774               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8775
8776               tree friend_type = t;
8777               bool adjust_processing_template_decl = false;
8778
8779               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8780                 {
8781                   /* template <class T> friend class C;  */
8782                   friend_type = tsubst_friend_class (friend_type, args);
8783                   adjust_processing_template_decl = true;
8784                 }
8785               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8786                 {
8787                   /* template <class T> friend class C::D;  */
8788                   friend_type = tsubst (friend_type, args,
8789                                         tf_warning_or_error, NULL_TREE);
8790                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8791                     friend_type = TREE_TYPE (friend_type);
8792                   adjust_processing_template_decl = true;
8793                 }
8794               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
8795                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
8796                 {
8797                   /* This could be either
8798
8799                        friend class T::C;
8800
8801                      when dependent_type_p is false or
8802
8803                        template <class U> friend class T::C;
8804
8805                      otherwise.  */
8806                   friend_type = tsubst (friend_type, args,
8807                                         tf_warning_or_error, NULL_TREE);
8808                   /* Bump processing_template_decl for correct
8809                      dependent_type_p calculation.  */
8810                   ++processing_template_decl;
8811                   if (dependent_type_p (friend_type))
8812                     adjust_processing_template_decl = true;
8813                   --processing_template_decl;
8814                 }
8815               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8816                        && hidden_name_p (TYPE_NAME (friend_type)))
8817                 {
8818                   /* friend class C;
8819
8820                      where C hasn't been declared yet.  Let's lookup name
8821                      from namespace scope directly, bypassing any name that
8822                      come from dependent base class.  */
8823                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8824
8825                   /* The call to xref_tag_from_type does injection for friend
8826                      classes.  */
8827                   push_nested_namespace (ns);
8828                   friend_type =
8829                     xref_tag_from_type (friend_type, NULL_TREE,
8830                                         /*tag_scope=*/ts_current);
8831                   pop_nested_namespace (ns);
8832                 }
8833               else if (uses_template_parms (friend_type))
8834                 /* friend class C<T>;  */
8835                 friend_type = tsubst (friend_type, args,
8836                                       tf_warning_or_error, NULL_TREE);
8837               /* Otherwise it's
8838
8839                    friend class C;
8840
8841                  where C is already declared or
8842
8843                    friend class C<int>;
8844
8845                  We don't have to do anything in these cases.  */
8846
8847               if (adjust_processing_template_decl)
8848                 /* Trick make_friend_class into realizing that the friend
8849                    we're adding is a template, not an ordinary class.  It's
8850                    important that we use make_friend_class since it will
8851                    perform some error-checking and output cross-reference
8852                    information.  */
8853                 ++processing_template_decl;
8854
8855               if (friend_type != error_mark_node)
8856                 make_friend_class (type, friend_type, /*complain=*/false);
8857
8858               if (adjust_processing_template_decl)
8859                 --processing_template_decl;
8860             }
8861           else
8862             {
8863               /* Build new DECL_FRIENDLIST.  */
8864               tree r;
8865
8866               /* The file and line for this declaration, to
8867                  assist in error message reporting.  Since we
8868                  called push_tinst_level above, we don't need to
8869                  restore these.  */
8870               input_location = DECL_SOURCE_LOCATION (t);
8871
8872               if (TREE_CODE (t) == TEMPLATE_DECL)
8873                 {
8874                   ++processing_template_decl;
8875                   push_deferring_access_checks (dk_no_check);
8876                 }
8877
8878               r = tsubst_friend_function (t, args);
8879               add_friend (type, r, /*complain=*/false);
8880               if (TREE_CODE (t) == TEMPLATE_DECL)
8881                 {
8882                   pop_deferring_access_checks ();
8883                   --processing_template_decl;
8884                 }
8885             }
8886         }
8887     }
8888
8889   if (CLASSTYPE_LAMBDA_EXPR (type))
8890     maybe_add_lambda_conv_op (type);
8891
8892   /* Set the file and line number information to whatever is given for
8893      the class itself.  This puts error messages involving generated
8894      implicit functions at a predictable point, and the same point
8895      that would be used for non-template classes.  */
8896   input_location = DECL_SOURCE_LOCATION (typedecl);
8897
8898   unreverse_member_declarations (type);
8899   finish_struct_1 (type);
8900   TYPE_BEING_DEFINED (type) = 0;
8901
8902   /* We don't instantiate default arguments for member functions.  14.7.1:
8903
8904      The implicit instantiation of a class template specialization causes
8905      the implicit instantiation of the declarations, but not of the
8906      definitions or default arguments, of the class member functions,
8907      member classes, static data members and member templates....  */
8908
8909   /* Some typedefs referenced from within the template code need to be access
8910      checked at template instantiation time, i.e now. These types were
8911      added to the template at parsing time. Let's get those and perform
8912      the access checks then.  */
8913   perform_typedefs_access_check (pattern, args);
8914   perform_deferred_access_checks ();
8915   pop_nested_class ();
8916   maximum_field_alignment = saved_maximum_field_alignment;
8917   pop_from_top_level ();
8918   pop_deferring_access_checks ();
8919   pop_tinst_level ();
8920
8921   /* The vtable for a template class can be emitted in any translation
8922      unit in which the class is instantiated.  When there is no key
8923      method, however, finish_struct_1 will already have added TYPE to
8924      the keyed_classes list.  */
8925   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8926     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8927
8928   return type;
8929 }
8930
8931 /* Wrapper for instantiate_class_template_1.  */
8932
8933 tree
8934 instantiate_class_template (tree type)
8935 {
8936   tree ret;
8937   timevar_push (TV_TEMPLATE_INST);
8938   ret = instantiate_class_template_1 (type);
8939   timevar_pop (TV_TEMPLATE_INST);
8940   return ret;
8941 }
8942
8943 static tree
8944 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8945 {
8946   tree r;
8947
8948   if (!t)
8949     r = t;
8950   else if (TYPE_P (t))
8951     r = tsubst (t, args, complain, in_decl);
8952   else
8953     {
8954       if (!(complain & tf_warning))
8955         ++c_inhibit_evaluation_warnings;
8956       r = tsubst_expr (t, args, complain, in_decl,
8957                        /*integral_constant_expression_p=*/true);
8958       if (!(complain & tf_warning))
8959         --c_inhibit_evaluation_warnings;
8960       /* Preserve the raw-reference nature of T.  */
8961       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
8962           && REFERENCE_REF_P (r))
8963         r = TREE_OPERAND (r, 0);
8964     }
8965   return r;
8966 }
8967
8968 /* Given a function parameter pack TMPL_PARM and some function parameters
8969    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
8970    and set *SPEC_P to point at the next point in the list.  */
8971
8972 static tree
8973 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
8974 {
8975   /* Collect all of the extra "packed" parameters into an
8976      argument pack.  */
8977   tree parmvec;
8978   tree parmtypevec;
8979   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8980   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8981   tree spec_parm = *spec_p;
8982   int i, len;
8983
8984   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
8985     if (tmpl_parm
8986         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
8987       break;
8988
8989   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
8990   parmvec = make_tree_vec (len);
8991   parmtypevec = make_tree_vec (len);
8992   spec_parm = *spec_p;
8993   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
8994     {
8995       TREE_VEC_ELT (parmvec, i) = spec_parm;
8996       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8997     }
8998
8999   /* Build the argument packs.  */
9000   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9001   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9002   TREE_TYPE (argpack) = argtypepack;
9003   *spec_p = spec_parm;
9004
9005   return argpack;
9006 }
9007
9008 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9009    NONTYPE_ARGUMENT_PACK.  */
9010
9011 static tree
9012 make_fnparm_pack (tree spec_parm)
9013 {
9014   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9015 }
9016
9017 /* Substitute ARGS into T, which is an pack expansion
9018    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9019    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9020    (if only a partial substitution could be performed) or
9021    ERROR_MARK_NODE if there was an error.  */
9022 tree
9023 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9024                        tree in_decl)
9025 {
9026   tree pattern;
9027   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
9028   int i, len = -1;
9029   tree result;
9030   int incomplete = 0;
9031   htab_t saved_local_specializations = NULL;
9032
9033   gcc_assert (PACK_EXPANSION_P (t));
9034   pattern = PACK_EXPANSION_PATTERN (t);
9035
9036   /* Determine the argument packs that will instantiate the parameter
9037      packs used in the expansion expression. While we're at it,
9038      compute the number of arguments to be expanded and make sure it
9039      is consistent.  */
9040   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9041        pack = TREE_CHAIN (pack))
9042     {
9043       tree parm_pack = TREE_VALUE (pack);
9044       tree arg_pack = NULL_TREE;
9045       tree orig_arg = NULL_TREE;
9046
9047       if (TREE_CODE (parm_pack) == PARM_DECL)
9048         {
9049           if (!cp_unevaluated_operand)
9050             arg_pack = retrieve_local_specialization (parm_pack);
9051           else
9052             {
9053               /* We can't rely on local_specializations for a parameter
9054                  name used later in a function declaration (such as in a
9055                  late-specified return type).  Even if it exists, it might
9056                  have the wrong value for a recursive call.  Just make a
9057                  dummy decl, since it's only used for its type.  */
9058               arg_pack = tsubst_decl (parm_pack, args, complain);
9059               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9060                 /* Partial instantiation of the parm_pack, we can't build
9061                    up an argument pack yet.  */
9062                 arg_pack = NULL_TREE;
9063               else
9064                 arg_pack = make_fnparm_pack (arg_pack);
9065             }
9066         }
9067       else
9068         {
9069           int level, idx, levels;
9070           template_parm_level_and_index (parm_pack, &level, &idx);
9071
9072           levels = TMPL_ARGS_DEPTH (args);
9073           if (level <= levels)
9074             arg_pack = TMPL_ARG (args, level, idx);
9075         }
9076
9077       orig_arg = arg_pack;
9078       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9079         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9080       
9081       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9082         /* This can only happen if we forget to expand an argument
9083            pack somewhere else. Just return an error, silently.  */
9084         {
9085           result = make_tree_vec (1);
9086           TREE_VEC_ELT (result, 0) = error_mark_node;
9087           return result;
9088         }
9089
9090       /* For clarity in the comments below let's use the
9091          representation 'argument_pack<elements>' to denote an
9092          argument pack and its elements.
9093
9094          In the 'if' block below, we want to detect cases where
9095          ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
9096          check if ARG_PACK is an argument pack which sole element is
9097          the expansion of PARM_PACK.  That argument pack is typically
9098          created by template_parm_to_arg when passed a parameter
9099          pack.  */
9100       if (arg_pack
9101           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9102           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
9103         {
9104           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
9105           tree pattern = PACK_EXPANSION_PATTERN (expansion);
9106           /* So we have an argument_pack<P...>.  We want to test if P
9107              is actually PARM_PACK.  We will not use cp_tree_equal to
9108              test P and PARM_PACK because during type fixup (by
9109              fixup_template_parm) P can be a pre-fixup version of a
9110              type and PARM_PACK be its post-fixup version.
9111              cp_tree_equal would consider them as different even
9112              though we would want to consider them compatible for our
9113              precise purpose here.
9114
9115              Thus we are going to consider that P and PARM_PACK are
9116              compatible if they have the same DECL.  */
9117           if ((/* If ARG_PACK is a type parameter pack named by the
9118                   same DECL as parm_pack ...  */
9119                (TYPE_P (pattern)
9120                 && TYPE_P (parm_pack)
9121                 && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
9122                /* ... or if ARG_PACK is a non-type parameter
9123                   named by the same DECL as parm_pack ...  */
9124                || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
9125                    && TREE_CODE (parm_pack) == PARM_DECL
9126                    && TEMPLATE_PARM_DECL (pattern)
9127                    == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
9128               && template_parameter_pack_p (pattern))
9129             /* ... then the argument pack that the parameter maps to
9130                is just an expansion of the parameter itself, such as
9131                one would find in the implicit typedef of a class
9132                inside the class itself.  Consider this parameter
9133                "unsubstituted", so that we will maintain the outer
9134                pack expansion.  */
9135             arg_pack = NULL_TREE;
9136         }
9137           
9138       if (arg_pack)
9139         {
9140           int my_len = 
9141             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9142
9143           /* It's all-or-nothing with incomplete argument packs.  */
9144           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9145             return error_mark_node;
9146           
9147           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9148             incomplete = 1;
9149
9150           if (len < 0)
9151             len = my_len;
9152           else if (len != my_len)
9153             {
9154               if (incomplete)
9155                 /* We got explicit args for some packs but not others;
9156                    do nothing now and try again after deduction.  */
9157                 return t;
9158               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9159                 error ("mismatched argument pack lengths while expanding "
9160                        "%<%T%>",
9161                        pattern);
9162               else
9163                 error ("mismatched argument pack lengths while expanding "
9164                        "%<%E%>",
9165                        pattern);
9166               return error_mark_node;
9167             }
9168
9169           /* Keep track of the parameter packs and their corresponding
9170              argument packs.  */
9171           packs = tree_cons (parm_pack, arg_pack, packs);
9172           TREE_TYPE (packs) = orig_arg;
9173         }
9174       else
9175         /* We can't substitute for this parameter pack.  */
9176         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
9177                                          TREE_VALUE (pack),
9178                                          unsubstituted_packs);
9179     }
9180
9181   /* We cannot expand this expansion expression, because we don't have
9182      all of the argument packs we need. Substitute into the pattern
9183      and return a PACK_EXPANSION_*. The caller will need to deal with
9184      that.  */
9185   if (unsubstituted_packs)
9186     {
9187       tree new_pat;
9188       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9189         new_pat = tsubst_expr (pattern, args, complain, in_decl,
9190                                /*integral_constant_expression_p=*/false);
9191       else
9192         new_pat = tsubst (pattern, args, complain, in_decl);
9193       return make_pack_expansion (new_pat);
9194     }
9195
9196   /* We could not find any argument packs that work.  */
9197   if (len < 0)
9198     return error_mark_node;
9199
9200   if (cp_unevaluated_operand)
9201     {
9202       /* We're in a late-specified return type, so create our own local
9203          specializations table; the current table is either NULL or (in the
9204          case of recursive unification) might have bindings that we don't
9205          want to use or alter.  */
9206       saved_local_specializations = local_specializations;
9207       local_specializations = htab_create (37,
9208                                            hash_local_specialization,
9209                                            eq_local_specializations,
9210                                            NULL);
9211     }
9212
9213   /* For each argument in each argument pack, substitute into the
9214      pattern.  */
9215   result = make_tree_vec (len + incomplete);
9216   for (i = 0; i < len + incomplete; ++i)
9217     {
9218       /* For parameter pack, change the substitution of the parameter
9219          pack to the ith argument in its argument pack, then expand
9220          the pattern.  */
9221       for (pack = packs; pack; pack = TREE_CHAIN (pack))
9222         {
9223           tree parm = TREE_PURPOSE (pack);
9224
9225           if (TREE_CODE (parm) == PARM_DECL)
9226             {
9227               /* Select the Ith argument from the pack.  */
9228               tree arg = make_node (ARGUMENT_PACK_SELECT);
9229               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9230               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9231               mark_used (parm);
9232               register_local_specialization (arg, parm);
9233             }
9234           else
9235             {
9236               tree value = parm;
9237               int idx, level;
9238               template_parm_level_and_index (parm, &level, &idx);
9239               
9240               if (i < len) 
9241                 {
9242                   /* Select the Ith argument from the pack. */
9243                   value = make_node (ARGUMENT_PACK_SELECT);
9244                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
9245                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
9246                 }
9247
9248               /* Update the corresponding argument.  */
9249               TMPL_ARG (args, level, idx) = value;
9250             }
9251         }
9252
9253       /* Substitute into the PATTERN with the altered arguments.  */
9254       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9255         TREE_VEC_ELT (result, i) = 
9256           tsubst_expr (pattern, args, complain, in_decl,
9257                        /*integral_constant_expression_p=*/false);
9258       else
9259         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9260
9261       if (i == len)
9262         /* When we have incomplete argument packs, the last "expanded"
9263            result is itself a pack expansion, which allows us
9264            to deduce more arguments.  */
9265         TREE_VEC_ELT (result, i) = 
9266           make_pack_expansion (TREE_VEC_ELT (result, i));
9267
9268       if (TREE_VEC_ELT (result, i) == error_mark_node)
9269         {
9270           result = error_mark_node;
9271           break;
9272         }
9273     }
9274
9275   /* Update ARGS to restore the substitution from parameter packs to
9276      their argument packs.  */
9277   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9278     {
9279       tree parm = TREE_PURPOSE (pack);
9280
9281       if (TREE_CODE (parm) == PARM_DECL)
9282         register_local_specialization (TREE_TYPE (pack), parm);
9283       else
9284         {
9285           int idx, level;
9286           template_parm_level_and_index (parm, &level, &idx);
9287           
9288           /* Update the corresponding argument.  */
9289           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9290             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9291               TREE_TYPE (pack);
9292           else
9293             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9294         }
9295     }
9296
9297   if (saved_local_specializations)
9298     {
9299       htab_delete (local_specializations);
9300       local_specializations = saved_local_specializations;
9301     }
9302   
9303   return result;
9304 }
9305
9306 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9307    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9308    parameter packs; all parms generated from a function parameter pack will
9309    have the same DECL_PARM_INDEX.  */
9310
9311 tree
9312 get_pattern_parm (tree parm, tree tmpl)
9313 {
9314   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9315   tree patparm;
9316
9317   if (DECL_ARTIFICIAL (parm))
9318     {
9319       for (patparm = DECL_ARGUMENTS (pattern);
9320            patparm; patparm = DECL_CHAIN (patparm))
9321         if (DECL_ARTIFICIAL (patparm)
9322             && DECL_NAME (parm) == DECL_NAME (patparm))
9323           break;
9324     }
9325   else
9326     {
9327       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9328       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9329       gcc_assert (DECL_PARM_INDEX (patparm)
9330                   == DECL_PARM_INDEX (parm));
9331     }
9332
9333   return patparm;
9334 }
9335
9336 /* Substitute ARGS into the vector or list of template arguments T.  */
9337
9338 static tree
9339 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9340 {
9341   tree orig_t = t;
9342   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9343   tree *elts;
9344
9345   if (t == error_mark_node)
9346     return error_mark_node;
9347
9348   len = TREE_VEC_LENGTH (t);
9349   elts = XALLOCAVEC (tree, len);
9350
9351   for (i = 0; i < len; i++)
9352     {
9353       tree orig_arg = TREE_VEC_ELT (t, i);
9354       tree new_arg;
9355
9356       if (TREE_CODE (orig_arg) == TREE_VEC)
9357         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9358       else if (PACK_EXPANSION_P (orig_arg))
9359         {
9360           /* Substitute into an expansion expression.  */
9361           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9362
9363           if (TREE_CODE (new_arg) == TREE_VEC)
9364             /* Add to the expanded length adjustment the number of
9365                expanded arguments. We subtract one from this
9366                measurement, because the argument pack expression
9367                itself is already counted as 1 in
9368                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9369                the argument pack is empty.  */
9370             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9371         }
9372       else if (ARGUMENT_PACK_P (orig_arg))
9373         {
9374           /* Substitute into each of the arguments.  */
9375           new_arg = TYPE_P (orig_arg)
9376             ? cxx_make_type (TREE_CODE (orig_arg))
9377             : make_node (TREE_CODE (orig_arg));
9378           
9379           SET_ARGUMENT_PACK_ARGS (
9380             new_arg,
9381             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9382                                   args, complain, in_decl));
9383
9384           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9385             new_arg = error_mark_node;
9386
9387           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9388             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9389                                           complain, in_decl);
9390             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9391
9392             if (TREE_TYPE (new_arg) == error_mark_node)
9393               new_arg = error_mark_node;
9394           }
9395         }
9396       else
9397         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9398
9399       if (new_arg == error_mark_node)
9400         return error_mark_node;
9401
9402       elts[i] = new_arg;
9403       if (new_arg != orig_arg)
9404         need_new = 1;
9405     }
9406
9407   if (!need_new)
9408     return t;
9409
9410   /* Make space for the expanded arguments coming from template
9411      argument packs.  */
9412   t = make_tree_vec (len + expanded_len_adjust);
9413   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9414      arguments for a member template.
9415      In that case each TREE_VEC in ORIG_T represents a level of template
9416      arguments, and ORIG_T won't carry any non defaulted argument count.
9417      It will rather be the nested TREE_VECs that will carry one.
9418      In other words, ORIG_T carries a non defaulted argument count only
9419      if it doesn't contain any nested TREE_VEC.  */
9420   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9421     {
9422       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9423       count += expanded_len_adjust;
9424       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9425     }
9426   for (i = 0, out = 0; i < len; i++)
9427     {
9428       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9429            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9430           && TREE_CODE (elts[i]) == TREE_VEC)
9431         {
9432           int idx;
9433
9434           /* Now expand the template argument pack "in place".  */
9435           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9436             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9437         }
9438       else
9439         {
9440           TREE_VEC_ELT (t, out) = elts[i];
9441           out++;
9442         }
9443     }
9444
9445   return t;
9446 }
9447
9448 /* Return the result of substituting ARGS into the template parameters
9449    given by PARMS.  If there are m levels of ARGS and m + n levels of
9450    PARMS, then the result will contain n levels of PARMS.  For
9451    example, if PARMS is `template <class T> template <class U>
9452    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9453    result will be `template <int*, double, class V>'.  */
9454
9455 static tree
9456 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9457 {
9458   tree r = NULL_TREE;
9459   tree* new_parms;
9460
9461   /* When substituting into a template, we must set
9462      PROCESSING_TEMPLATE_DECL as the template parameters may be
9463      dependent if they are based on one-another, and the dependency
9464      predicates are short-circuit outside of templates.  */
9465   ++processing_template_decl;
9466
9467   for (new_parms = &r;
9468        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9469        new_parms = &(TREE_CHAIN (*new_parms)),
9470          parms = TREE_CHAIN (parms))
9471     {
9472       tree new_vec =
9473         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9474       int i;
9475
9476       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9477         {
9478           tree tuple;
9479
9480           if (parms == error_mark_node)
9481             continue;
9482
9483           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9484
9485           if (tuple == error_mark_node)
9486             continue;
9487
9488           TREE_VEC_ELT (new_vec, i) =
9489             tsubst_template_parm (tuple, args, complain);
9490         }
9491
9492       *new_parms =
9493         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9494                              - TMPL_ARGS_DEPTH (args)),
9495                    new_vec, NULL_TREE);
9496     }
9497
9498   --processing_template_decl;
9499
9500   return r;
9501 }
9502
9503 /* Return the result of substituting ARGS into one template parameter
9504    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9505    parameter and which TREE_PURPOSE is the default argument of the
9506    template parameter.  */
9507
9508 static tree
9509 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9510 {
9511   tree default_value, parm_decl;
9512
9513   if (args == NULL_TREE
9514       || t == NULL_TREE
9515       || t == error_mark_node)
9516     return t;
9517
9518   gcc_assert (TREE_CODE (t) == TREE_LIST);
9519
9520   default_value = TREE_PURPOSE (t);
9521   parm_decl = TREE_VALUE (t);
9522
9523   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9524   if (TREE_CODE (parm_decl) == PARM_DECL
9525       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9526     parm_decl = error_mark_node;
9527   default_value = tsubst_template_arg (default_value, args,
9528                                        complain, NULL_TREE);
9529
9530   return build_tree_list (default_value, parm_decl);
9531 }
9532
9533 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9534    type T.  If T is not an aggregate or enumeration type, it is
9535    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9536    ENTERING_SCOPE is nonzero, T is the context for a template which
9537    we are presently tsubst'ing.  Return the substituted value.  */
9538
9539 static tree
9540 tsubst_aggr_type (tree t,
9541                   tree args,
9542                   tsubst_flags_t complain,
9543                   tree in_decl,
9544                   int entering_scope)
9545 {
9546   if (t == NULL_TREE)
9547     return NULL_TREE;
9548
9549   switch (TREE_CODE (t))
9550     {
9551     case RECORD_TYPE:
9552       if (TYPE_PTRMEMFUNC_P (t))
9553         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9554
9555       /* Else fall through.  */
9556     case ENUMERAL_TYPE:
9557     case UNION_TYPE:
9558       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9559         {
9560           tree argvec;
9561           tree context;
9562           tree r;
9563           int saved_unevaluated_operand;
9564           int saved_inhibit_evaluation_warnings;
9565
9566           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9567           saved_unevaluated_operand = cp_unevaluated_operand;
9568           cp_unevaluated_operand = 0;
9569           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9570           c_inhibit_evaluation_warnings = 0;
9571
9572           /* First, determine the context for the type we are looking
9573              up.  */
9574           context = TYPE_CONTEXT (t);
9575           if (context)
9576             {
9577               context = tsubst_aggr_type (context, args, complain,
9578                                           in_decl, /*entering_scope=*/1);
9579               /* If context is a nested class inside a class template,
9580                  it may still need to be instantiated (c++/33959).  */
9581               if (TYPE_P (context))
9582                 context = complete_type (context);
9583             }
9584
9585           /* Then, figure out what arguments are appropriate for the
9586              type we are trying to find.  For example, given:
9587
9588                template <class T> struct S;
9589                template <class T, class U> void f(T, U) { S<U> su; }
9590
9591              and supposing that we are instantiating f<int, double>,
9592              then our ARGS will be {int, double}, but, when looking up
9593              S we only want {double}.  */
9594           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9595                                          complain, in_decl);
9596           if (argvec == error_mark_node)
9597             r = error_mark_node;
9598           else
9599             {
9600               r = lookup_template_class (t, argvec, in_decl, context,
9601                                          entering_scope, complain);
9602               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9603             }
9604
9605           cp_unevaluated_operand = saved_unevaluated_operand;
9606           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9607
9608           return r;
9609         }
9610       else
9611         /* This is not a template type, so there's nothing to do.  */
9612         return t;
9613
9614     default:
9615       return tsubst (t, args, complain, in_decl);
9616     }
9617 }
9618
9619 /* Substitute into the default argument ARG (a default argument for
9620    FN), which has the indicated TYPE.  */
9621
9622 tree
9623 tsubst_default_argument (tree fn, tree type, tree arg)
9624 {
9625   tree saved_class_ptr = NULL_TREE;
9626   tree saved_class_ref = NULL_TREE;
9627
9628   /* This can happen in invalid code.  */
9629   if (TREE_CODE (arg) == DEFAULT_ARG)
9630     return arg;
9631
9632   /* This default argument came from a template.  Instantiate the
9633      default argument here, not in tsubst.  In the case of
9634      something like:
9635
9636        template <class T>
9637        struct S {
9638          static T t();
9639          void f(T = t());
9640        };
9641
9642      we must be careful to do name lookup in the scope of S<T>,
9643      rather than in the current class.  */
9644   push_access_scope (fn);
9645   /* The "this" pointer is not valid in a default argument.  */
9646   if (cfun)
9647     {
9648       saved_class_ptr = current_class_ptr;
9649       cp_function_chain->x_current_class_ptr = NULL_TREE;
9650       saved_class_ref = current_class_ref;
9651       cp_function_chain->x_current_class_ref = NULL_TREE;
9652     }
9653
9654   push_deferring_access_checks(dk_no_deferred);
9655   /* The default argument expression may cause implicitly defined
9656      member functions to be synthesized, which will result in garbage
9657      collection.  We must treat this situation as if we were within
9658      the body of function so as to avoid collecting live data on the
9659      stack.  */
9660   ++function_depth;
9661   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9662                      tf_warning_or_error, NULL_TREE,
9663                      /*integral_constant_expression_p=*/false);
9664   --function_depth;
9665   pop_deferring_access_checks();
9666
9667   /* Restore the "this" pointer.  */
9668   if (cfun)
9669     {
9670       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9671       cp_function_chain->x_current_class_ref = saved_class_ref;
9672     }
9673
9674   /* Make sure the default argument is reasonable.  */
9675   arg = check_default_argument (type, arg);
9676
9677   pop_access_scope (fn);
9678
9679   return arg;
9680 }
9681
9682 /* Substitute into all the default arguments for FN.  */
9683
9684 static void
9685 tsubst_default_arguments (tree fn)
9686 {
9687   tree arg;
9688   tree tmpl_args;
9689
9690   tmpl_args = DECL_TI_ARGS (fn);
9691
9692   /* If this function is not yet instantiated, we certainly don't need
9693      its default arguments.  */
9694   if (uses_template_parms (tmpl_args))
9695     return;
9696   /* Don't do this again for clones.  */
9697   if (DECL_CLONED_FUNCTION_P (fn))
9698     return;
9699
9700   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9701        arg;
9702        arg = TREE_CHAIN (arg))
9703     if (TREE_PURPOSE (arg))
9704       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9705                                                     TREE_VALUE (arg),
9706                                                     TREE_PURPOSE (arg));
9707 }
9708
9709 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9710    result of the substitution.  Issue error and warning messages under
9711    control of COMPLAIN.  */
9712
9713 static tree
9714 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9715 {
9716 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9717   location_t saved_loc;
9718   tree r = NULL_TREE;
9719   tree in_decl = t;
9720   hashval_t hash = 0;
9721
9722   /* Set the filename and linenumber to improve error-reporting.  */
9723   saved_loc = input_location;
9724   input_location = DECL_SOURCE_LOCATION (t);
9725
9726   switch (TREE_CODE (t))
9727     {
9728     case TEMPLATE_DECL:
9729       {
9730         /* We can get here when processing a member function template,
9731            member class template, or template template parameter.  */
9732         tree decl = DECL_TEMPLATE_RESULT (t);
9733         tree spec;
9734         tree tmpl_args;
9735         tree full_args;
9736
9737         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9738           {
9739             /* Template template parameter is treated here.  */
9740             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9741             if (new_type == error_mark_node)
9742               RETURN (error_mark_node);
9743
9744             r = copy_decl (t);
9745             DECL_CHAIN (r) = NULL_TREE;
9746             TREE_TYPE (r) = new_type;
9747             DECL_TEMPLATE_RESULT (r)
9748               = build_decl (DECL_SOURCE_LOCATION (decl),
9749                             TYPE_DECL, DECL_NAME (decl), new_type);
9750             DECL_TEMPLATE_PARMS (r)
9751               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9752                                        complain);
9753             TYPE_NAME (new_type) = r;
9754             break;
9755           }
9756
9757         /* We might already have an instance of this template.
9758            The ARGS are for the surrounding class type, so the
9759            full args contain the tsubst'd args for the context,
9760            plus the innermost args from the template decl.  */
9761         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9762           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9763           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9764         /* Because this is a template, the arguments will still be
9765            dependent, even after substitution.  If
9766            PROCESSING_TEMPLATE_DECL is not set, the dependency
9767            predicates will short-circuit.  */
9768         ++processing_template_decl;
9769         full_args = tsubst_template_args (tmpl_args, args,
9770                                           complain, in_decl);
9771         --processing_template_decl;
9772         if (full_args == error_mark_node)
9773           RETURN (error_mark_node);
9774
9775         /* If this is a default template template argument,
9776            tsubst might not have changed anything.  */
9777         if (full_args == tmpl_args)
9778           RETURN (t);
9779
9780         hash = hash_tmpl_and_args (t, full_args);
9781         spec = retrieve_specialization (t, full_args, hash);
9782         if (spec != NULL_TREE)
9783           {
9784             r = spec;
9785             break;
9786           }
9787
9788         /* Make a new template decl.  It will be similar to the
9789            original, but will record the current template arguments.
9790            We also create a new function declaration, which is just
9791            like the old one, but points to this new template, rather
9792            than the old one.  */
9793         r = copy_decl (t);
9794         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9795         DECL_CHAIN (r) = NULL_TREE;
9796
9797         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9798
9799         if (TREE_CODE (decl) == TYPE_DECL)
9800           {
9801             tree new_type;
9802             ++processing_template_decl;
9803             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9804             --processing_template_decl;
9805             if (new_type == error_mark_node)
9806               RETURN (error_mark_node);
9807
9808             TREE_TYPE (r) = new_type;
9809             CLASSTYPE_TI_TEMPLATE (new_type) = r;
9810             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9811             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9812             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9813           }
9814         else
9815           {
9816             tree new_decl;
9817             ++processing_template_decl;
9818             new_decl = tsubst (decl, args, complain, in_decl);
9819             --processing_template_decl;
9820             if (new_decl == error_mark_node)
9821               RETURN (error_mark_node);
9822
9823             DECL_TEMPLATE_RESULT (r) = new_decl;
9824             DECL_TI_TEMPLATE (new_decl) = r;
9825             TREE_TYPE (r) = TREE_TYPE (new_decl);
9826             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9827             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9828           }
9829
9830         SET_DECL_IMPLICIT_INSTANTIATION (r);
9831         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9832         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9833
9834         /* The template parameters for this new template are all the
9835            template parameters for the old template, except the
9836            outermost level of parameters.  */
9837         DECL_TEMPLATE_PARMS (r)
9838           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9839                                    complain);
9840
9841         if (PRIMARY_TEMPLATE_P (t))
9842           DECL_PRIMARY_TEMPLATE (r) = r;
9843
9844         if (TREE_CODE (decl) != TYPE_DECL)
9845           /* Record this non-type partial instantiation.  */
9846           register_specialization (r, t,
9847                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9848                                    false, hash);
9849       }
9850       break;
9851
9852     case FUNCTION_DECL:
9853       {
9854         tree ctx;
9855         tree argvec = NULL_TREE;
9856         tree *friends;
9857         tree gen_tmpl;
9858         tree type;
9859         int member;
9860         int args_depth;
9861         int parms_depth;
9862
9863         /* Nobody should be tsubst'ing into non-template functions.  */
9864         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
9865
9866         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
9867           {
9868             tree spec;
9869             bool dependent_p;
9870
9871             /* If T is not dependent, just return it.  We have to
9872                increment PROCESSING_TEMPLATE_DECL because
9873                value_dependent_expression_p assumes that nothing is
9874                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
9875             ++processing_template_decl;
9876             dependent_p = value_dependent_expression_p (t);
9877             --processing_template_decl;
9878             if (!dependent_p)
9879               RETURN (t);
9880
9881             /* Calculate the most general template of which R is a
9882                specialization, and the complete set of arguments used to
9883                specialize R.  */
9884             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9885             argvec = tsubst_template_args (DECL_TI_ARGS
9886                                           (DECL_TEMPLATE_RESULT
9887                                                  (DECL_TI_TEMPLATE (t))),
9888                                            args, complain, in_decl);
9889             if (argvec == error_mark_node)
9890               RETURN (error_mark_node);
9891
9892             /* Check to see if we already have this specialization.  */
9893             hash = hash_tmpl_and_args (gen_tmpl, argvec);
9894             spec = retrieve_specialization (gen_tmpl, argvec, hash);
9895
9896             if (spec)
9897               {
9898                 r = spec;
9899                 break;
9900               }
9901
9902             /* We can see more levels of arguments than parameters if
9903                there was a specialization of a member template, like
9904                this:
9905
9906                  template <class T> struct S { template <class U> void f(); }
9907                  template <> template <class U> void S<int>::f(U);
9908
9909                Here, we'll be substituting into the specialization,
9910                because that's where we can find the code we actually
9911                want to generate, but we'll have enough arguments for
9912                the most general template.
9913
9914                We also deal with the peculiar case:
9915
9916                  template <class T> struct S {
9917                    template <class U> friend void f();
9918                  };
9919                  template <class U> void f() {}
9920                  template S<int>;
9921                  template void f<double>();
9922
9923                Here, the ARGS for the instantiation of will be {int,
9924                double}.  But, we only need as many ARGS as there are
9925                levels of template parameters in CODE_PATTERN.  We are
9926                careful not to get fooled into reducing the ARGS in
9927                situations like:
9928
9929                  template <class T> struct S { template <class U> void f(U); }
9930                  template <class T> template <> void S<T>::f(int) {}
9931
9932                which we can spot because the pattern will be a
9933                specialization in this case.  */
9934             args_depth = TMPL_ARGS_DEPTH (args);
9935             parms_depth =
9936               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9937             if (args_depth > parms_depth
9938                 && !DECL_TEMPLATE_SPECIALIZATION (t))
9939               args = get_innermost_template_args (args, parms_depth);
9940           }
9941         else
9942           {
9943             /* This special case arises when we have something like this:
9944
9945                  template <class T> struct S {
9946                    friend void f<int>(int, double);
9947                  };
9948
9949                Here, the DECL_TI_TEMPLATE for the friend declaration
9950                will be an IDENTIFIER_NODE.  We are being called from
9951                tsubst_friend_function, and we want only to create a
9952                new decl (R) with appropriate types so that we can call
9953                determine_specialization.  */
9954             gen_tmpl = NULL_TREE;
9955           }
9956
9957         if (DECL_CLASS_SCOPE_P (t))
9958           {
9959             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9960               member = 2;
9961             else
9962               member = 1;
9963             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9964                                     complain, t, /*entering_scope=*/1);
9965           }
9966         else
9967           {
9968             member = 0;
9969             ctx = DECL_CONTEXT (t);
9970           }
9971         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9972         if (type == error_mark_node)
9973           RETURN (error_mark_node);
9974
9975         /* We do NOT check for matching decls pushed separately at this
9976            point, as they may not represent instantiations of this
9977            template, and in any case are considered separate under the
9978            discrete model.  */
9979         r = copy_decl (t);
9980         DECL_USE_TEMPLATE (r) = 0;
9981         TREE_TYPE (r) = type;
9982         /* Clear out the mangled name and RTL for the instantiation.  */
9983         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9984         SET_DECL_RTL (r, NULL);
9985         /* Leave DECL_INITIAL set on deleted instantiations.  */
9986         if (!DECL_DELETED_FN (r))
9987           DECL_INITIAL (r) = NULL_TREE;
9988         DECL_CONTEXT (r) = ctx;
9989
9990         if (member && DECL_CONV_FN_P (r))
9991           /* Type-conversion operator.  Reconstruct the name, in
9992              case it's the name of one of the template's parameters.  */
9993           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9994
9995         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9996                                      complain, t);
9997         DECL_RESULT (r) = NULL_TREE;
9998
9999         TREE_STATIC (r) = 0;
10000         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10001         DECL_EXTERNAL (r) = 1;
10002         /* If this is an instantiation of a function with internal
10003            linkage, we already know what object file linkage will be
10004            assigned to the instantiation.  */
10005         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10006         DECL_DEFER_OUTPUT (r) = 0;
10007         DECL_CHAIN (r) = NULL_TREE;
10008         DECL_PENDING_INLINE_INFO (r) = 0;
10009         DECL_PENDING_INLINE_P (r) = 0;
10010         DECL_SAVED_TREE (r) = NULL_TREE;
10011         DECL_STRUCT_FUNCTION (r) = NULL;
10012         TREE_USED (r) = 0;
10013         /* We'll re-clone as appropriate in instantiate_template.  */
10014         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10015
10016         /* If we aren't complaining now, return on error before we register
10017            the specialization so that we'll complain eventually.  */
10018         if ((complain & tf_error) == 0
10019             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10020             && !grok_op_properties (r, /*complain=*/false))
10021           RETURN (error_mark_node);
10022
10023         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10024            this in the special friend case mentioned above where
10025            GEN_TMPL is NULL.  */
10026         if (gen_tmpl)
10027           {
10028             DECL_TEMPLATE_INFO (r)
10029               = build_template_info (gen_tmpl, argvec);
10030             SET_DECL_IMPLICIT_INSTANTIATION (r);
10031             register_specialization (r, gen_tmpl, argvec, false, hash);
10032
10033             /* We're not supposed to instantiate default arguments
10034                until they are called, for a template.  But, for a
10035                declaration like:
10036
10037                  template <class T> void f ()
10038                  { extern void g(int i = T()); }
10039
10040                we should do the substitution when the template is
10041                instantiated.  We handle the member function case in
10042                instantiate_class_template since the default arguments
10043                might refer to other members of the class.  */
10044             if (!member
10045                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10046                 && !uses_template_parms (argvec))
10047               tsubst_default_arguments (r);
10048           }
10049         else
10050           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10051
10052         /* Copy the list of befriending classes.  */
10053         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10054              *friends;
10055              friends = &TREE_CHAIN (*friends))
10056           {
10057             *friends = copy_node (*friends);
10058             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10059                                             args, complain,
10060                                             in_decl);
10061           }
10062
10063         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10064           {
10065             maybe_retrofit_in_chrg (r);
10066             if (DECL_CONSTRUCTOR_P (r))
10067               grok_ctor_properties (ctx, r);
10068             /* If this is an instantiation of a member template, clone it.
10069                If it isn't, that'll be handled by
10070                clone_constructors_and_destructors.  */
10071             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10072               clone_function_decl (r, /*update_method_vec_p=*/0);
10073           }
10074         else if ((complain & tf_error) != 0
10075                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10076                  && !grok_op_properties (r, /*complain=*/true))
10077           RETURN (error_mark_node);
10078
10079         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10080           SET_DECL_FRIEND_CONTEXT (r,
10081                                    tsubst (DECL_FRIEND_CONTEXT (t),
10082                                             args, complain, in_decl));
10083
10084         /* Possibly limit visibility based on template args.  */
10085         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10086         if (DECL_VISIBILITY_SPECIFIED (t))
10087           {
10088             DECL_VISIBILITY_SPECIFIED (r) = 0;
10089             DECL_ATTRIBUTES (r)
10090               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10091           }
10092         determine_visibility (r);
10093         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10094             && !processing_template_decl)
10095           defaulted_late_check (r);
10096
10097         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10098                                         args, complain, in_decl);
10099       }
10100       break;
10101
10102     case PARM_DECL:
10103       {
10104         tree type = NULL_TREE;
10105         int i, len = 1;
10106         tree expanded_types = NULL_TREE;
10107         tree prev_r = NULL_TREE;
10108         tree first_r = NULL_TREE;
10109
10110         if (FUNCTION_PARAMETER_PACK_P (t))
10111           {
10112             /* If there is a local specialization that isn't a
10113                parameter pack, it means that we're doing a "simple"
10114                substitution from inside tsubst_pack_expansion. Just
10115                return the local specialization (which will be a single
10116                parm).  */
10117             tree spec = retrieve_local_specialization (t);
10118             if (spec 
10119                 && TREE_CODE (spec) == PARM_DECL
10120                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10121               RETURN (spec);
10122
10123             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10124                the parameters in this function parameter pack.  */
10125             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10126                                                     complain, in_decl);
10127             if (TREE_CODE (expanded_types) == TREE_VEC)
10128               {
10129                 len = TREE_VEC_LENGTH (expanded_types);
10130
10131                 /* Zero-length parameter packs are boring. Just substitute
10132                    into the chain.  */
10133                 if (len == 0)
10134                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10135                                   TREE_CHAIN (t)));
10136               }
10137             else
10138               {
10139                 /* All we did was update the type. Make a note of that.  */
10140                 type = expanded_types;
10141                 expanded_types = NULL_TREE;
10142               }
10143           }
10144
10145         /* Loop through all of the parameter's we'll build. When T is
10146            a function parameter pack, LEN is the number of expanded
10147            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10148         r = NULL_TREE;
10149         for (i = 0; i < len; ++i)
10150           {
10151             prev_r = r;
10152             r = copy_node (t);
10153             if (DECL_TEMPLATE_PARM_P (t))
10154               SET_DECL_TEMPLATE_PARM_P (r);
10155
10156             if (expanded_types)
10157               /* We're on the Ith parameter of the function parameter
10158                  pack.  */
10159               {
10160                 /* An argument of a function parameter pack is not a parameter
10161                    pack.  */
10162                 FUNCTION_PARAMETER_PACK_P (r) = false;
10163
10164                 /* Get the Ith type.  */
10165                 type = TREE_VEC_ELT (expanded_types, i);
10166
10167                 if (DECL_NAME (r))
10168                   /* Rename the parameter to include the index.  */
10169                   DECL_NAME (r) =
10170                     make_ith_pack_parameter_name (DECL_NAME (r), i);
10171               }
10172             else if (!type)
10173               /* We're dealing with a normal parameter.  */
10174               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10175
10176             type = type_decays_to (type);
10177             TREE_TYPE (r) = type;
10178             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10179
10180             if (DECL_INITIAL (r))
10181               {
10182                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10183                   DECL_INITIAL (r) = TREE_TYPE (r);
10184                 else
10185                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10186                                              complain, in_decl);
10187               }
10188
10189             DECL_CONTEXT (r) = NULL_TREE;
10190
10191             if (!DECL_TEMPLATE_PARM_P (r))
10192               DECL_ARG_TYPE (r) = type_passed_as (type);
10193
10194             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10195                                             args, complain, in_decl);
10196
10197             /* Keep track of the first new parameter we
10198                generate. That's what will be returned to the
10199                caller.  */
10200             if (!first_r)
10201               first_r = r;
10202
10203             /* Build a proper chain of parameters when substituting
10204                into a function parameter pack.  */
10205             if (prev_r)
10206               DECL_CHAIN (prev_r) = r;
10207           }
10208
10209         if (DECL_CHAIN (t))
10210           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10211                                    complain, DECL_CHAIN (t));
10212
10213         /* FIRST_R contains the start of the chain we've built.  */
10214         r = first_r;
10215       }
10216       break;
10217
10218     case FIELD_DECL:
10219       {
10220         tree type;
10221
10222         r = copy_decl (t);
10223         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10224         if (type == error_mark_node)
10225           RETURN (error_mark_node);
10226         TREE_TYPE (r) = type;
10227         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10228
10229         /* DECL_INITIAL gives the number of bits in a bit-field.  */
10230         DECL_INITIAL (r)
10231           = tsubst_expr (DECL_INITIAL (t), args,
10232                          complain, in_decl,
10233                          /*integral_constant_expression_p=*/true);
10234         /* We don't have to set DECL_CONTEXT here; it is set by
10235            finish_member_declaration.  */
10236         DECL_CHAIN (r) = NULL_TREE;
10237         if (VOID_TYPE_P (type))
10238           error ("instantiation of %q+D as type %qT", r, type);
10239
10240         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10241                                         args, complain, in_decl);
10242       }
10243       break;
10244
10245     case USING_DECL:
10246       /* We reach here only for member using decls.  */
10247       if (DECL_DEPENDENT_P (t))
10248         {
10249           r = do_class_using_decl
10250             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10251              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10252           if (!r)
10253             r = error_mark_node;
10254           else
10255             {
10256               TREE_PROTECTED (r) = TREE_PROTECTED (t);
10257               TREE_PRIVATE (r) = TREE_PRIVATE (t);
10258             }
10259         }
10260       else
10261         {
10262           r = copy_node (t);
10263           DECL_CHAIN (r) = NULL_TREE;
10264         }
10265       break;
10266
10267     case TYPE_DECL:
10268     case VAR_DECL:
10269       {
10270         tree argvec = NULL_TREE;
10271         tree gen_tmpl = NULL_TREE;
10272         tree spec;
10273         tree tmpl = NULL_TREE;
10274         tree ctx;
10275         tree type = NULL_TREE;
10276         bool local_p;
10277
10278         if (TREE_CODE (t) == TYPE_DECL
10279             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10280           {
10281             /* If this is the canonical decl, we don't have to
10282                mess with instantiations, and often we can't (for
10283                typename, template type parms and such).  Note that
10284                TYPE_NAME is not correct for the above test if
10285                we've copied the type for a typedef.  */
10286             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10287             if (type == error_mark_node)
10288               RETURN (error_mark_node);
10289             r = TYPE_NAME (type);
10290             break;
10291           }
10292
10293         /* Check to see if we already have the specialization we
10294            need.  */
10295         spec = NULL_TREE;
10296         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10297           {
10298             /* T is a static data member or namespace-scope entity.
10299                We have to substitute into namespace-scope variables
10300                (even though such entities are never templates) because
10301                of cases like:
10302                
10303                  template <class T> void f() { extern T t; }
10304
10305                where the entity referenced is not known until
10306                instantiation time.  */
10307             local_p = false;
10308             ctx = DECL_CONTEXT (t);
10309             if (DECL_CLASS_SCOPE_P (t))
10310               {
10311                 ctx = tsubst_aggr_type (ctx, args,
10312                                         complain,
10313                                         in_decl, /*entering_scope=*/1);
10314                 /* If CTX is unchanged, then T is in fact the
10315                    specialization we want.  That situation occurs when
10316                    referencing a static data member within in its own
10317                    class.  We can use pointer equality, rather than
10318                    same_type_p, because DECL_CONTEXT is always
10319                    canonical.  */
10320                 if (ctx == DECL_CONTEXT (t))
10321                   spec = t;
10322               }
10323
10324             if (!spec)
10325               {
10326                 tmpl = DECL_TI_TEMPLATE (t);
10327                 gen_tmpl = most_general_template (tmpl);
10328                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10329                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10330                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10331               }
10332           }
10333         else
10334           {
10335             /* A local variable.  */
10336             local_p = true;
10337             /* Subsequent calls to pushdecl will fill this in.  */
10338             ctx = NULL_TREE;
10339             spec = retrieve_local_specialization (t);
10340           }
10341         /* If we already have the specialization we need, there is
10342            nothing more to do.  */ 
10343         if (spec)
10344           {
10345             r = spec;
10346             break;
10347           }
10348
10349         /* Create a new node for the specialization we need.  */
10350         r = copy_decl (t);
10351         if (type == NULL_TREE)
10352           {
10353             if (is_typedef_decl (t))
10354               type = DECL_ORIGINAL_TYPE (t);
10355             else
10356               type = TREE_TYPE (t);
10357             if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
10358               type = strip_array_domain (type);
10359             type = tsubst (type, args, complain, in_decl);
10360           }
10361         if (TREE_CODE (r) == VAR_DECL)
10362           {
10363             /* Even if the original location is out of scope, the
10364                newly substituted one is not.  */
10365             DECL_DEAD_FOR_LOCAL (r) = 0;
10366             DECL_INITIALIZED_P (r) = 0;
10367             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10368             if (type == error_mark_node)
10369               RETURN (error_mark_node);
10370             if (TREE_CODE (type) == FUNCTION_TYPE)
10371               {
10372                 /* It may seem that this case cannot occur, since:
10373
10374                      typedef void f();
10375                      void g() { f x; }
10376
10377                    declares a function, not a variable.  However:
10378       
10379                      typedef void f();
10380                      template <typename T> void g() { T t; }
10381                      template void g<f>();
10382
10383                    is an attempt to declare a variable with function
10384                    type.  */
10385                 error ("variable %qD has function type",
10386                        /* R is not yet sufficiently initialized, so we
10387                           just use its name.  */
10388                        DECL_NAME (r));
10389                 RETURN (error_mark_node);
10390               }
10391             type = complete_type (type);
10392             /* Wait until cp_finish_decl to set this again, to handle
10393                circular dependency (template/instantiate6.C). */
10394             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10395             type = check_var_type (DECL_NAME (r), type);
10396
10397             if (DECL_HAS_VALUE_EXPR_P (t))
10398               {
10399                 tree ve = DECL_VALUE_EXPR (t);
10400                 ve = tsubst_expr (ve, args, complain, in_decl,
10401                                   /*constant_expression_p=*/false);
10402                 if (REFERENCE_REF_P (ve))
10403                   {
10404                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10405                     ve = TREE_OPERAND (ve, 0);
10406                   }
10407                 SET_DECL_VALUE_EXPR (r, ve);
10408               }
10409           }
10410         else if (DECL_SELF_REFERENCE_P (t))
10411           SET_DECL_SELF_REFERENCE_P (r);
10412         TREE_TYPE (r) = type;
10413         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10414         DECL_CONTEXT (r) = ctx;
10415         /* Clear out the mangled name and RTL for the instantiation.  */
10416         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10417         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10418           SET_DECL_RTL (r, NULL);
10419         /* The initializer must not be expanded until it is required;
10420            see [temp.inst].  */
10421         DECL_INITIAL (r) = NULL_TREE;
10422         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10423           SET_DECL_RTL (r, NULL);
10424         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10425         if (TREE_CODE (r) == VAR_DECL)
10426           {
10427             /* Possibly limit visibility based on template args.  */
10428             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10429             if (DECL_VISIBILITY_SPECIFIED (t))
10430               {
10431                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10432                 DECL_ATTRIBUTES (r)
10433                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10434               }
10435             determine_visibility (r);
10436           }
10437
10438         if (!local_p)
10439           {
10440             /* A static data member declaration is always marked
10441                external when it is declared in-class, even if an
10442                initializer is present.  We mimic the non-template
10443                processing here.  */
10444             DECL_EXTERNAL (r) = 1;
10445
10446             register_specialization (r, gen_tmpl, argvec, false, hash);
10447             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10448             SET_DECL_IMPLICIT_INSTANTIATION (r);
10449           }
10450         else if (cp_unevaluated_operand)
10451           {
10452             /* We're substituting this var in a decltype outside of its
10453                scope, such as for a lambda return type.  Don't add it to
10454                local_specializations, do perform auto deduction.  */
10455             tree auto_node = type_uses_auto (type);
10456             if (auto_node)
10457               {
10458                 tree init
10459                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10460                                  /*constant_expression_p=*/false);
10461                 init = resolve_nondeduced_context (init);
10462                 TREE_TYPE (r) = type
10463                   = do_auto_deduction (type, init, auto_node);
10464               }
10465           }
10466         else
10467           register_local_specialization (r, t);
10468
10469         DECL_CHAIN (r) = NULL_TREE;
10470
10471         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10472                                         /*flags=*/0,
10473                                         args, complain, in_decl);
10474
10475         /* Preserve a typedef that names a type.  */
10476         if (is_typedef_decl (r))
10477           {
10478             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10479             set_underlying_type (r);
10480           }
10481
10482         layout_decl (r, 0);
10483       }
10484       break;
10485
10486     default:
10487       gcc_unreachable ();
10488     }
10489 #undef RETURN
10490
10491  out:
10492   /* Restore the file and line information.  */
10493   input_location = saved_loc;
10494
10495   return r;
10496 }
10497
10498 /* Substitute into the ARG_TYPES of a function type.  */
10499
10500 static tree
10501 tsubst_arg_types (tree arg_types,
10502                   tree args,
10503                   tsubst_flags_t complain,
10504                   tree in_decl)
10505 {
10506   tree remaining_arg_types;
10507   tree type = NULL_TREE;
10508   int i = 1;
10509   tree expanded_args = NULL_TREE;
10510   tree default_arg;
10511
10512   if (!arg_types || arg_types == void_list_node)
10513     return arg_types;
10514
10515   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10516                                           args, complain, in_decl);
10517   if (remaining_arg_types == error_mark_node)
10518     return error_mark_node;
10519
10520   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10521     {
10522       /* For a pack expansion, perform substitution on the
10523          entire expression. Later on, we'll handle the arguments
10524          one-by-one.  */
10525       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10526                                             args, complain, in_decl);
10527
10528       if (TREE_CODE (expanded_args) == TREE_VEC)
10529         /* So that we'll spin through the parameters, one by one.  */
10530         i = TREE_VEC_LENGTH (expanded_args);
10531       else
10532         {
10533           /* We only partially substituted into the parameter
10534              pack. Our type is TYPE_PACK_EXPANSION.  */
10535           type = expanded_args;
10536           expanded_args = NULL_TREE;
10537         }
10538     }
10539
10540   while (i > 0) {
10541     --i;
10542     
10543     if (expanded_args)
10544       type = TREE_VEC_ELT (expanded_args, i);
10545     else if (!type)
10546       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10547
10548     if (type == error_mark_node)
10549       return error_mark_node;
10550     if (VOID_TYPE_P (type))
10551       {
10552         if (complain & tf_error)
10553           {
10554             error ("invalid parameter type %qT", type);
10555             if (in_decl)
10556               error ("in declaration %q+D", in_decl);
10557           }
10558         return error_mark_node;
10559     }
10560     
10561     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10562        top-level qualifiers as required.  */
10563     type = cv_unqualified (type_decays_to (type));
10564
10565     /* We do not substitute into default arguments here.  The standard
10566        mandates that they be instantiated only when needed, which is
10567        done in build_over_call.  */
10568     default_arg = TREE_PURPOSE (arg_types);
10569
10570     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10571       {
10572         /* We've instantiated a template before its default arguments
10573            have been parsed.  This can happen for a nested template
10574            class, and is not an error unless we require the default
10575            argument in a call of this function.  */
10576         remaining_arg_types = 
10577           tree_cons (default_arg, type, remaining_arg_types);
10578         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10579                        remaining_arg_types);
10580       }
10581     else
10582       remaining_arg_types = 
10583         hash_tree_cons (default_arg, type, remaining_arg_types);
10584   }
10585         
10586   return remaining_arg_types;
10587 }
10588
10589 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10590    *not* handle the exception-specification for FNTYPE, because the
10591    initial substitution of explicitly provided template parameters
10592    during argument deduction forbids substitution into the
10593    exception-specification:
10594
10595      [temp.deduct]
10596
10597      All references in the function type of the function template to  the
10598      corresponding template parameters are replaced by the specified tem-
10599      plate argument values.  If a substitution in a template parameter or
10600      in  the function type of the function template results in an invalid
10601      type, type deduction fails.  [Note: The equivalent  substitution  in
10602      exception specifications is done only when the function is instanti-
10603      ated, at which point a program is  ill-formed  if  the  substitution
10604      results in an invalid type.]  */
10605
10606 static tree
10607 tsubst_function_type (tree t,
10608                       tree args,
10609                       tsubst_flags_t complain,
10610                       tree in_decl)
10611 {
10612   tree return_type;
10613   tree arg_types;
10614   tree fntype;
10615
10616   /* The TYPE_CONTEXT is not used for function/method types.  */
10617   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10618
10619   /* Substitute the return type.  */
10620   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10621   if (return_type == error_mark_node)
10622     return error_mark_node;
10623   /* The standard does not presently indicate that creation of a
10624      function type with an invalid return type is a deduction failure.
10625      However, that is clearly analogous to creating an array of "void"
10626      or a reference to a reference.  This is core issue #486.  */
10627   if (TREE_CODE (return_type) == ARRAY_TYPE
10628       || TREE_CODE (return_type) == FUNCTION_TYPE)
10629     {
10630       if (complain & tf_error)
10631         {
10632           if (TREE_CODE (return_type) == ARRAY_TYPE)
10633             error ("function returning an array");
10634           else
10635             error ("function returning a function");
10636         }
10637       return error_mark_node;
10638     }
10639
10640   /* Substitute the argument types.  */
10641   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10642                                 complain, in_decl);
10643   if (arg_types == error_mark_node)
10644     return error_mark_node;
10645
10646   /* Construct a new type node and return it.  */
10647   if (TREE_CODE (t) == FUNCTION_TYPE)
10648     {
10649       fntype = build_function_type (return_type, arg_types);
10650       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10651     }
10652   else
10653     {
10654       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10655       if (! MAYBE_CLASS_TYPE_P (r))
10656         {
10657           /* [temp.deduct]
10658
10659              Type deduction may fail for any of the following
10660              reasons:
10661
10662              -- Attempting to create "pointer to member of T" when T
10663              is not a class type.  */
10664           if (complain & tf_error)
10665             error ("creating pointer to member function of non-class type %qT",
10666                       r);
10667           return error_mark_node;
10668         }
10669
10670       fntype = build_method_type_directly (r, return_type,
10671                                            TREE_CHAIN (arg_types));
10672     }
10673   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10674
10675   return fntype;
10676 }
10677
10678 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10679    ARGS into that specification, and return the substituted
10680    specification.  If there is no specification, return NULL_TREE.  */
10681
10682 static tree
10683 tsubst_exception_specification (tree fntype,
10684                                 tree args,
10685                                 tsubst_flags_t complain,
10686                                 tree in_decl,
10687                                 bool defer_ok)
10688 {
10689   tree specs;
10690   tree new_specs;
10691
10692   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10693   new_specs = NULL_TREE;
10694   if (specs && TREE_PURPOSE (specs))
10695     {
10696       /* A noexcept-specifier.  */
10697       tree expr = TREE_PURPOSE (specs);
10698       if (expr == boolean_true_node || expr == boolean_false_node)
10699         new_specs = expr;
10700       else if (defer_ok)
10701         {
10702           /* Defer instantiation of noexcept-specifiers to avoid
10703              excessive instantiations (c++/49107).  */
10704           new_specs = make_node (DEFERRED_NOEXCEPT);
10705           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
10706             {
10707               /* We already partially instantiated this member template,
10708                  so combine the new args with the old.  */
10709               DEFERRED_NOEXCEPT_PATTERN (new_specs)
10710                 = DEFERRED_NOEXCEPT_PATTERN (expr);
10711               DEFERRED_NOEXCEPT_ARGS (new_specs)
10712                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
10713             }
10714           else
10715             {
10716               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
10717               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
10718             }
10719         }
10720       else
10721         new_specs = tsubst_copy_and_build
10722           (expr, args, complain, in_decl, /*function_p=*/false,
10723            /*integral_constant_expression_p=*/true);
10724       new_specs = build_noexcept_spec (new_specs, complain);
10725     }
10726   else if (specs)
10727     {
10728       if (! TREE_VALUE (specs))
10729         new_specs = specs;
10730       else
10731         while (specs)
10732           {
10733             tree spec;
10734             int i, len = 1;
10735             tree expanded_specs = NULL_TREE;
10736
10737             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
10738               {
10739                 /* Expand the pack expansion type.  */
10740                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
10741                                                        args, complain,
10742                                                        in_decl);
10743
10744                 if (expanded_specs == error_mark_node)
10745                   return error_mark_node;
10746                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
10747                   len = TREE_VEC_LENGTH (expanded_specs);
10748                 else
10749                   {
10750                     /* We're substituting into a member template, so
10751                        we got a TYPE_PACK_EXPANSION back.  Add that
10752                        expansion and move on.  */
10753                     gcc_assert (TREE_CODE (expanded_specs) 
10754                                 == TYPE_PACK_EXPANSION);
10755                     new_specs = add_exception_specifier (new_specs,
10756                                                          expanded_specs,
10757                                                          complain);
10758                     specs = TREE_CHAIN (specs);
10759                     continue;
10760                   }
10761               }
10762
10763             for (i = 0; i < len; ++i)
10764               {
10765                 if (expanded_specs)
10766                   spec = TREE_VEC_ELT (expanded_specs, i);
10767                 else
10768                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
10769                 if (spec == error_mark_node)
10770                   return spec;
10771                 new_specs = add_exception_specifier (new_specs, spec, 
10772                                                      complain);
10773               }
10774
10775             specs = TREE_CHAIN (specs);
10776           }
10777     }
10778   return new_specs;
10779 }
10780
10781 /* Take the tree structure T and replace template parameters used
10782    therein with the argument vector ARGS.  IN_DECL is an associated
10783    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
10784    Issue error and warning messages under control of COMPLAIN.  Note
10785    that we must be relatively non-tolerant of extensions here, in
10786    order to preserve conformance; if we allow substitutions that
10787    should not be allowed, we may allow argument deductions that should
10788    not succeed, and therefore report ambiguous overload situations
10789    where there are none.  In theory, we could allow the substitution,
10790    but indicate that it should have failed, and allow our caller to
10791    make sure that the right thing happens, but we don't try to do this
10792    yet.
10793
10794    This function is used for dealing with types, decls and the like;
10795    for expressions, use tsubst_expr or tsubst_copy.  */
10796
10797 tree
10798 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10799 {
10800   enum tree_code code;
10801   tree type, r;
10802
10803   if (t == NULL_TREE || t == error_mark_node
10804       || t == integer_type_node
10805       || t == void_type_node
10806       || t == char_type_node
10807       || t == unknown_type_node
10808       || TREE_CODE (t) == NAMESPACE_DECL
10809       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
10810     return t;
10811
10812   if (DECL_P (t))
10813     return tsubst_decl (t, args, complain);
10814
10815   if (args == NULL_TREE)
10816     return t;
10817
10818   code = TREE_CODE (t);
10819
10820   if (code == IDENTIFIER_NODE)
10821     type = IDENTIFIER_TYPE_VALUE (t);
10822   else
10823     type = TREE_TYPE (t);
10824
10825   gcc_assert (type != unknown_type_node);
10826
10827   /* Reuse typedefs.  We need to do this to handle dependent attributes,
10828      such as attribute aligned.  */
10829   if (TYPE_P (t)
10830       && typedef_variant_p (t))
10831     {
10832       tree decl = TYPE_NAME (t);
10833       
10834       if (DECL_CLASS_SCOPE_P (decl)
10835           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
10836           && uses_template_parms (DECL_CONTEXT (decl)))
10837         {
10838           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10839           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
10840           r = retrieve_specialization (tmpl, gen_args, 0);
10841         }
10842       else if (DECL_FUNCTION_SCOPE_P (decl)
10843                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
10844                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
10845         r = retrieve_local_specialization (decl);
10846       else
10847         /* The typedef is from a non-template context.  */
10848         return t;
10849
10850       if (r)
10851         {
10852           r = TREE_TYPE (r);
10853           r = cp_build_qualified_type_real
10854             (r, cp_type_quals (t) | cp_type_quals (r),
10855              complain | tf_ignore_bad_quals);
10856           return r;
10857         }
10858       /* Else we must be instantiating the typedef, so fall through.  */
10859     }
10860
10861   if (type
10862       && code != TYPENAME_TYPE
10863       && code != TEMPLATE_TYPE_PARM
10864       && code != IDENTIFIER_NODE
10865       && code != FUNCTION_TYPE
10866       && code != METHOD_TYPE)
10867     type = tsubst (type, args, complain, in_decl);
10868   if (type == error_mark_node)
10869     return error_mark_node;
10870
10871   switch (code)
10872     {
10873     case RECORD_TYPE:
10874     case UNION_TYPE:
10875     case ENUMERAL_TYPE:
10876       return tsubst_aggr_type (t, args, complain, in_decl,
10877                                /*entering_scope=*/0);
10878
10879     case ERROR_MARK:
10880     case IDENTIFIER_NODE:
10881     case VOID_TYPE:
10882     case REAL_TYPE:
10883     case COMPLEX_TYPE:
10884     case VECTOR_TYPE:
10885     case BOOLEAN_TYPE:
10886     case NULLPTR_TYPE:
10887     case LANG_TYPE:
10888       return t;
10889
10890     case INTEGER_TYPE:
10891       if (t == integer_type_node)
10892         return t;
10893
10894       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
10895           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
10896         return t;
10897
10898       {
10899         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
10900
10901         max = tsubst_expr (omax, args, complain, in_decl,
10902                            /*integral_constant_expression_p=*/false);
10903
10904         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
10905            needed.  */
10906         if (TREE_CODE (max) == NOP_EXPR
10907             && TREE_SIDE_EFFECTS (omax)
10908             && !TREE_TYPE (max))
10909           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
10910
10911         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
10912            with TREE_SIDE_EFFECTS that indicates this is not an integral
10913            constant expression.  */
10914         if (processing_template_decl
10915             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10916           {
10917             gcc_assert (TREE_CODE (max) == NOP_EXPR);
10918             TREE_SIDE_EFFECTS (max) = 1;
10919           }
10920
10921         return compute_array_index_type (NULL_TREE, max, complain);
10922       }
10923
10924     case TEMPLATE_TYPE_PARM:
10925     case TEMPLATE_TEMPLATE_PARM:
10926     case BOUND_TEMPLATE_TEMPLATE_PARM:
10927     case TEMPLATE_PARM_INDEX:
10928       {
10929         int idx;
10930         int level;
10931         int levels;
10932         tree arg = NULL_TREE;
10933
10934         r = NULL_TREE;
10935
10936         gcc_assert (TREE_VEC_LENGTH (args) > 0);
10937         template_parm_level_and_index (t, &level, &idx); 
10938
10939         levels = TMPL_ARGS_DEPTH (args);
10940         if (level <= levels)
10941           {
10942             arg = TMPL_ARG (args, level, idx);
10943
10944             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10945               /* See through ARGUMENT_PACK_SELECT arguments. */
10946               arg = ARGUMENT_PACK_SELECT_ARG (arg);
10947           }
10948
10949         if (arg == error_mark_node)
10950           return error_mark_node;
10951         else if (arg != NULL_TREE)
10952           {
10953             if (ARGUMENT_PACK_P (arg))
10954               /* If ARG is an argument pack, we don't actually want to
10955                  perform a substitution here, because substitutions
10956                  for argument packs are only done
10957                  element-by-element. We can get to this point when
10958                  substituting the type of a non-type template
10959                  parameter pack, when that type actually contains
10960                  template parameter packs from an outer template, e.g.,
10961
10962                  template<typename... Types> struct A {
10963                    template<Types... Values> struct B { };
10964                  };  */
10965               return t;
10966
10967             if (code == TEMPLATE_TYPE_PARM)
10968               {
10969                 int quals;
10970                 gcc_assert (TYPE_P (arg));
10971
10972                 quals = cp_type_quals (arg) | cp_type_quals (t);
10973                   
10974                 return cp_build_qualified_type_real
10975                   (arg, quals, complain | tf_ignore_bad_quals);
10976               }
10977             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10978               {
10979                 /* We are processing a type constructed from a
10980                    template template parameter.  */
10981                 tree argvec = tsubst (TYPE_TI_ARGS (t),
10982                                       args, complain, in_decl);
10983                 if (argvec == error_mark_node)
10984                   return error_mark_node;
10985
10986                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10987                    are resolving nested-types in the signature of a
10988                    member function templates.  Otherwise ARG is a
10989                    TEMPLATE_DECL and is the real template to be
10990                    instantiated.  */
10991                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10992                   arg = TYPE_NAME (arg);
10993
10994                 r = lookup_template_class (arg,
10995                                            argvec, in_decl,
10996                                            DECL_CONTEXT (arg),
10997                                             /*entering_scope=*/0,
10998                                            complain);
10999                 return cp_build_qualified_type_real
11000                   (r, cp_type_quals (t), complain);
11001               }
11002             else
11003               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11004               return convert_from_reference (unshare_expr (arg));
11005           }
11006
11007         if (level == 1)
11008           /* This can happen during the attempted tsubst'ing in
11009              unify.  This means that we don't yet have any information
11010              about the template parameter in question.  */
11011           return t;
11012
11013         /* If we get here, we must have been looking at a parm for a
11014            more deeply nested template.  Make a new version of this
11015            template parameter, but with a lower level.  */
11016         switch (code)
11017           {
11018           case TEMPLATE_TYPE_PARM:
11019           case TEMPLATE_TEMPLATE_PARM:
11020           case BOUND_TEMPLATE_TEMPLATE_PARM:
11021             if (cp_type_quals (t))
11022               {
11023                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11024                 r = cp_build_qualified_type_real
11025                   (r, cp_type_quals (t),
11026                    complain | (code == TEMPLATE_TYPE_PARM
11027                                ? tf_ignore_bad_quals : 0));
11028               }
11029             else
11030               {
11031                 r = copy_type (t);
11032                 TEMPLATE_TYPE_PARM_INDEX (r)
11033                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11034                                                 r, levels, args, complain);
11035                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11036                 TYPE_MAIN_VARIANT (r) = r;
11037                 TYPE_POINTER_TO (r) = NULL_TREE;
11038                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11039
11040                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11041                   /* We have reduced the level of the template
11042                      template parameter, but not the levels of its
11043                      template parameters, so canonical_type_parameter
11044                      will not be able to find the canonical template
11045                      template parameter for this level. Thus, we
11046                      require structural equality checking to compare
11047                      TEMPLATE_TEMPLATE_PARMs. */
11048                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11049                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11050                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11051                 else
11052                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11053
11054                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11055                   {
11056                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11057                                           complain, in_decl);
11058                     if (argvec == error_mark_node)
11059                       return error_mark_node;
11060
11061                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11062                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11063                   }
11064               }
11065             break;
11066
11067           case TEMPLATE_PARM_INDEX:
11068             r = reduce_template_parm_level (t, type, levels, args, complain);
11069             break;
11070
11071           default:
11072             gcc_unreachable ();
11073           }
11074
11075         return r;
11076       }
11077
11078     case TREE_LIST:
11079       {
11080         tree purpose, value, chain;
11081
11082         if (t == void_list_node)
11083           return t;
11084
11085         purpose = TREE_PURPOSE (t);
11086         if (purpose)
11087           {
11088             purpose = tsubst (purpose, args, complain, in_decl);
11089             if (purpose == error_mark_node)
11090               return error_mark_node;
11091           }
11092         value = TREE_VALUE (t);
11093         if (value)
11094           {
11095             value = tsubst (value, args, complain, in_decl);
11096             if (value == error_mark_node)
11097               return error_mark_node;
11098           }
11099         chain = TREE_CHAIN (t);
11100         if (chain && chain != void_type_node)
11101           {
11102             chain = tsubst (chain, args, complain, in_decl);
11103             if (chain == error_mark_node)
11104               return error_mark_node;
11105           }
11106         if (purpose == TREE_PURPOSE (t)
11107             && value == TREE_VALUE (t)
11108             && chain == TREE_CHAIN (t))
11109           return t;
11110         return hash_tree_cons (purpose, value, chain);
11111       }
11112
11113     case TREE_BINFO:
11114       /* We should never be tsubsting a binfo.  */
11115       gcc_unreachable ();
11116
11117     case TREE_VEC:
11118       /* A vector of template arguments.  */
11119       gcc_assert (!type);
11120       return tsubst_template_args (t, args, complain, in_decl);
11121
11122     case POINTER_TYPE:
11123     case REFERENCE_TYPE:
11124       {
11125         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11126           return t;
11127
11128         /* [temp.deduct]
11129
11130            Type deduction may fail for any of the following
11131            reasons:
11132
11133            -- Attempting to create a pointer to reference type.
11134            -- Attempting to create a reference to a reference type or
11135               a reference to void.
11136
11137           Core issue 106 says that creating a reference to a reference
11138           during instantiation is no longer a cause for failure. We
11139           only enforce this check in strict C++98 mode.  */
11140         if ((TREE_CODE (type) == REFERENCE_TYPE
11141              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11142             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11143           {
11144             static location_t last_loc;
11145
11146             /* We keep track of the last time we issued this error
11147                message to avoid spewing a ton of messages during a
11148                single bad template instantiation.  */
11149             if (complain & tf_error
11150                 && last_loc != input_location)
11151               {
11152                 if (TREE_CODE (type) == VOID_TYPE)
11153                   error ("forming reference to void");
11154                else if (code == POINTER_TYPE)
11155                  error ("forming pointer to reference type %qT", type);
11156                else
11157                   error ("forming reference to reference type %qT", type);
11158                 last_loc = input_location;
11159               }
11160
11161             return error_mark_node;
11162           }
11163         else if (code == POINTER_TYPE)
11164           {
11165             r = build_pointer_type (type);
11166             if (TREE_CODE (type) == METHOD_TYPE)
11167               r = build_ptrmemfunc_type (r);
11168           }
11169         else if (TREE_CODE (type) == REFERENCE_TYPE)
11170           /* In C++0x, during template argument substitution, when there is an
11171              attempt to create a reference to a reference type, reference
11172              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11173
11174              "If a template-argument for a template-parameter T names a type
11175              that is a reference to a type A, an attempt to create the type
11176              'lvalue reference to cv T' creates the type 'lvalue reference to
11177              A,' while an attempt to create the type type rvalue reference to
11178              cv T' creates the type T"
11179           */
11180           r = cp_build_reference_type
11181               (TREE_TYPE (type),
11182                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11183         else
11184           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11185         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11186
11187         if (r != error_mark_node)
11188           /* Will this ever be needed for TYPE_..._TO values?  */
11189           layout_type (r);
11190
11191         return r;
11192       }
11193     case OFFSET_TYPE:
11194       {
11195         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11196         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11197           {
11198             /* [temp.deduct]
11199
11200                Type deduction may fail for any of the following
11201                reasons:
11202
11203                -- Attempting to create "pointer to member of T" when T
11204                   is not a class type.  */
11205             if (complain & tf_error)
11206               error ("creating pointer to member of non-class type %qT", r);
11207             return error_mark_node;
11208           }
11209         if (TREE_CODE (type) == REFERENCE_TYPE)
11210           {
11211             if (complain & tf_error)
11212               error ("creating pointer to member reference type %qT", type);
11213             return error_mark_node;
11214           }
11215         if (TREE_CODE (type) == VOID_TYPE)
11216           {
11217             if (complain & tf_error)
11218               error ("creating pointer to member of type void");
11219             return error_mark_node;
11220           }
11221         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11222         if (TREE_CODE (type) == FUNCTION_TYPE)
11223           {
11224             /* The type of the implicit object parameter gets its
11225                cv-qualifiers from the FUNCTION_TYPE. */
11226             tree memptr;
11227             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11228             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11229             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11230                                                  complain);
11231           }
11232         else
11233           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11234                                                cp_type_quals (t),
11235                                                complain);
11236       }
11237     case FUNCTION_TYPE:
11238     case METHOD_TYPE:
11239       {
11240         tree fntype;
11241         tree specs;
11242         fntype = tsubst_function_type (t, args, complain, in_decl);
11243         if (fntype == error_mark_node)
11244           return error_mark_node;
11245
11246         /* Substitute the exception specification.  */
11247         specs = tsubst_exception_specification (t, args, complain,
11248                                                 in_decl, /*defer_ok*/true);
11249         if (specs == error_mark_node)
11250           return error_mark_node;
11251         if (specs)
11252           fntype = build_exception_variant (fntype, specs);
11253         return fntype;
11254       }
11255     case ARRAY_TYPE:
11256       {
11257         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11258         if (domain == error_mark_node)
11259           return error_mark_node;
11260
11261         /* As an optimization, we avoid regenerating the array type if
11262            it will obviously be the same as T.  */
11263         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11264           return t;
11265
11266         /* These checks should match the ones in grokdeclarator.
11267
11268            [temp.deduct]
11269
11270            The deduction may fail for any of the following reasons:
11271
11272            -- Attempting to create an array with an element type that
11273               is void, a function type, or a reference type, or [DR337]
11274               an abstract class type.  */
11275         if (TREE_CODE (type) == VOID_TYPE
11276             || TREE_CODE (type) == FUNCTION_TYPE
11277             || TREE_CODE (type) == REFERENCE_TYPE)
11278           {
11279             if (complain & tf_error)
11280               error ("creating array of %qT", type);
11281             return error_mark_node;
11282           }
11283         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11284           {
11285             if (complain & tf_error)
11286               error ("creating array of %qT, which is an abstract class type",
11287                      type);
11288             return error_mark_node;
11289           }
11290
11291         r = build_cplus_array_type (type, domain);
11292
11293         if (TYPE_USER_ALIGN (t))
11294           {
11295             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11296             TYPE_USER_ALIGN (r) = 1;
11297           }
11298
11299         return r;
11300       }
11301
11302     case TYPENAME_TYPE:
11303       {
11304         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11305                                      in_decl, /*entering_scope=*/1);
11306         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11307                               complain, in_decl);
11308
11309         if (ctx == error_mark_node || f == error_mark_node)
11310           return error_mark_node;
11311
11312         if (!MAYBE_CLASS_TYPE_P (ctx))
11313           {
11314             if (complain & tf_error)
11315               error ("%qT is not a class, struct, or union type", ctx);
11316             return error_mark_node;
11317           }
11318         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11319           {
11320             /* Normally, make_typename_type does not require that the CTX
11321                have complete type in order to allow things like:
11322
11323                  template <class T> struct S { typename S<T>::X Y; };
11324
11325                But, such constructs have already been resolved by this
11326                point, so here CTX really should have complete type, unless
11327                it's a partial instantiation.  */
11328             ctx = complete_type (ctx);
11329             if (!COMPLETE_TYPE_P (ctx))
11330               {
11331                 if (complain & tf_error)
11332                   cxx_incomplete_type_error (NULL_TREE, ctx);
11333                 return error_mark_node;
11334               }
11335           }
11336
11337         f = make_typename_type (ctx, f, typename_type,
11338                                 (complain & tf_error) | tf_keep_type_decl);
11339         if (f == error_mark_node)
11340           return f;
11341         if (TREE_CODE (f) == TYPE_DECL)
11342           {
11343             complain |= tf_ignore_bad_quals;
11344             f = TREE_TYPE (f);
11345           }
11346
11347         if (TREE_CODE (f) != TYPENAME_TYPE)
11348           {
11349             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11350               {
11351                 if (complain & tf_error)
11352                   error ("%qT resolves to %qT, which is not an enumeration type",
11353                          t, f);
11354                 else
11355                   return error_mark_node;
11356               }
11357             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11358               {
11359                 if (complain & tf_error)
11360                   error ("%qT resolves to %qT, which is is not a class type",
11361                          t, f);
11362                 else
11363                   return error_mark_node;
11364               }
11365           }
11366
11367         return cp_build_qualified_type_real
11368           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11369       }
11370
11371     case UNBOUND_CLASS_TEMPLATE:
11372       {
11373         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11374                                      in_decl, /*entering_scope=*/1);
11375         tree name = TYPE_IDENTIFIER (t);
11376         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11377
11378         if (ctx == error_mark_node || name == error_mark_node)
11379           return error_mark_node;
11380
11381         if (parm_list)
11382           parm_list = tsubst_template_parms (parm_list, args, complain);
11383         return make_unbound_class_template (ctx, name, parm_list, complain);
11384       }
11385
11386     case TYPEOF_TYPE:
11387       {
11388         tree type;
11389
11390         ++cp_unevaluated_operand;
11391         ++c_inhibit_evaluation_warnings;
11392
11393         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11394                             complain, in_decl,
11395                             /*integral_constant_expression_p=*/false);
11396
11397         --cp_unevaluated_operand;
11398         --c_inhibit_evaluation_warnings;
11399
11400         type = finish_typeof (type);
11401         return cp_build_qualified_type_real (type,
11402                                              cp_type_quals (t)
11403                                              | cp_type_quals (type),
11404                                              complain);
11405       }
11406
11407     case DECLTYPE_TYPE:
11408       {
11409         tree type;
11410
11411         ++cp_unevaluated_operand;
11412         ++c_inhibit_evaluation_warnings;
11413
11414         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11415                             complain, in_decl,
11416                             /*integral_constant_expression_p=*/false);
11417
11418         --cp_unevaluated_operand;
11419         --c_inhibit_evaluation_warnings;
11420
11421         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11422           type = lambda_capture_field_type (type);
11423         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
11424           type = lambda_return_type (type);
11425         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11426           type = lambda_proxy_type (type);
11427         else
11428           type = finish_decltype_type
11429             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11430         return cp_build_qualified_type_real (type,
11431                                              cp_type_quals (t)
11432                                              | cp_type_quals (type),
11433                                              complain);
11434       }
11435
11436     case UNDERLYING_TYPE:
11437       {
11438         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11439                             complain, in_decl);
11440         return finish_underlying_type (type);
11441       }
11442
11443     case TYPE_ARGUMENT_PACK:
11444     case NONTYPE_ARGUMENT_PACK:
11445       {
11446         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11447         tree packed_out = 
11448           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11449                                 args,
11450                                 complain,
11451                                 in_decl);
11452         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11453
11454         /* For template nontype argument packs, also substitute into
11455            the type.  */
11456         if (code == NONTYPE_ARGUMENT_PACK)
11457           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11458
11459         return r;
11460       }
11461       break;
11462
11463     case INTEGER_CST:
11464     case REAL_CST:
11465     case STRING_CST:
11466     case PLUS_EXPR:
11467     case MINUS_EXPR:
11468     case NEGATE_EXPR:
11469     case NOP_EXPR:
11470     case INDIRECT_REF:
11471     case ADDR_EXPR:
11472     case CALL_EXPR:
11473     case ARRAY_REF:
11474     case SCOPE_REF:
11475       /* We should use one of the expression tsubsts for these codes.  */
11476       gcc_unreachable ();
11477
11478     default:
11479       sorry ("use of %qs in template", tree_code_name [(int) code]);
11480       return error_mark_node;
11481     }
11482 }
11483
11484 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11485    type of the expression on the left-hand side of the "." or "->"
11486    operator.  */
11487
11488 static tree
11489 tsubst_baselink (tree baselink, tree object_type,
11490                  tree args, tsubst_flags_t complain, tree in_decl)
11491 {
11492     tree name;
11493     tree qualifying_scope;
11494     tree fns;
11495     tree optype;
11496     tree template_args = 0;
11497     bool template_id_p = false;
11498
11499     /* A baselink indicates a function from a base class.  Both the
11500        BASELINK_ACCESS_BINFO and the base class referenced may
11501        indicate bases of the template class, rather than the
11502        instantiated class.  In addition, lookups that were not
11503        ambiguous before may be ambiguous now.  Therefore, we perform
11504        the lookup again.  */
11505     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11506     qualifying_scope = tsubst (qualifying_scope, args,
11507                                complain, in_decl);
11508     fns = BASELINK_FUNCTIONS (baselink);
11509     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11510     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11511       {
11512         template_id_p = true;
11513         template_args = TREE_OPERAND (fns, 1);
11514         fns = TREE_OPERAND (fns, 0);
11515         if (template_args)
11516           template_args = tsubst_template_args (template_args, args,
11517                                                 complain, in_decl);
11518       }
11519     name = DECL_NAME (get_first_fn (fns));
11520     if (IDENTIFIER_TYPENAME_P (name))
11521       name = mangle_conv_op_name_for_type (optype);
11522     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11523     if (!baselink)
11524       return error_mark_node;
11525
11526     /* If lookup found a single function, mark it as used at this
11527        point.  (If it lookup found multiple functions the one selected
11528        later by overload resolution will be marked as used at that
11529        point.)  */
11530     if (BASELINK_P (baselink))
11531       fns = BASELINK_FUNCTIONS (baselink);
11532     if (!template_id_p && !really_overloaded_fn (fns))
11533       mark_used (OVL_CURRENT (fns));
11534
11535     /* Add back the template arguments, if present.  */
11536     if (BASELINK_P (baselink) && template_id_p)
11537       BASELINK_FUNCTIONS (baselink)
11538         = build_nt (TEMPLATE_ID_EXPR,
11539                     BASELINK_FUNCTIONS (baselink),
11540                     template_args);
11541     /* Update the conversion operator type.  */
11542     BASELINK_OPTYPE (baselink) = optype;
11543
11544     if (!object_type)
11545       object_type = current_class_type;
11546     return adjust_result_of_qualified_name_lookup (baselink,
11547                                                    qualifying_scope,
11548                                                    object_type);
11549 }
11550
11551 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11552    true if the qualified-id will be a postfix-expression in-and-of
11553    itself; false if more of the postfix-expression follows the
11554    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11555    of "&".  */
11556
11557 static tree
11558 tsubst_qualified_id (tree qualified_id, tree args,
11559                      tsubst_flags_t complain, tree in_decl,
11560                      bool done, bool address_p)
11561 {
11562   tree expr;
11563   tree scope;
11564   tree name;
11565   bool is_template;
11566   tree template_args;
11567
11568   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11569
11570   /* Figure out what name to look up.  */
11571   name = TREE_OPERAND (qualified_id, 1);
11572   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11573     {
11574       is_template = true;
11575       template_args = TREE_OPERAND (name, 1);
11576       if (template_args)
11577         template_args = tsubst_template_args (template_args, args,
11578                                               complain, in_decl);
11579       name = TREE_OPERAND (name, 0);
11580     }
11581   else
11582     {
11583       is_template = false;
11584       template_args = NULL_TREE;
11585     }
11586
11587   /* Substitute into the qualifying scope.  When there are no ARGS, we
11588      are just trying to simplify a non-dependent expression.  In that
11589      case the qualifying scope may be dependent, and, in any case,
11590      substituting will not help.  */
11591   scope = TREE_OPERAND (qualified_id, 0);
11592   if (args)
11593     {
11594       scope = tsubst (scope, args, complain, in_decl);
11595       expr = tsubst_copy (name, args, complain, in_decl);
11596     }
11597   else
11598     expr = name;
11599
11600   if (dependent_scope_p (scope))
11601     {
11602       if (is_template)
11603         expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11604       return build_qualified_name (NULL_TREE, scope, expr,
11605                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11606     }
11607
11608   if (!BASELINK_P (name) && !DECL_P (expr))
11609     {
11610       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11611         {
11612           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11613           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11614             {
11615               error ("qualifying type %qT does not match destructor name ~%qT",
11616                      scope, TREE_OPERAND (expr, 0));
11617               expr = error_mark_node;
11618             }
11619           else
11620             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11621                                           /*is_type_p=*/0, false);
11622         }
11623       else
11624         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11625       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11626                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11627         {
11628           if (complain & tf_error)
11629             {
11630               error ("dependent-name %qE is parsed as a non-type, but "
11631                      "instantiation yields a type", qualified_id);
11632               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11633             }
11634           return error_mark_node;
11635         }
11636     }
11637
11638   if (DECL_P (expr))
11639     {
11640       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11641                                            scope);
11642       /* Remember that there was a reference to this entity.  */
11643       mark_used (expr);
11644     }
11645
11646   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11647     {
11648       if (complain & tf_error)
11649         qualified_name_lookup_error (scope,
11650                                      TREE_OPERAND (qualified_id, 1),
11651                                      expr, input_location);
11652       return error_mark_node;
11653     }
11654
11655   if (is_template)
11656     expr = lookup_template_function (expr, template_args);
11657
11658   if (expr == error_mark_node && complain & tf_error)
11659     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11660                                  expr, input_location);
11661   else if (TYPE_P (scope))
11662     {
11663       expr = (adjust_result_of_qualified_name_lookup
11664               (expr, scope, current_class_type));
11665       expr = (finish_qualified_id_expr
11666               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
11667                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
11668                /*template_arg_p=*/false));
11669     }
11670
11671   /* Expressions do not generally have reference type.  */
11672   if (TREE_CODE (expr) != SCOPE_REF
11673       /* However, if we're about to form a pointer-to-member, we just
11674          want the referenced member referenced.  */
11675       && TREE_CODE (expr) != OFFSET_REF)
11676     expr = convert_from_reference (expr);
11677
11678   return expr;
11679 }
11680
11681 /* Like tsubst, but deals with expressions.  This function just replaces
11682    template parms; to finish processing the resultant expression, use
11683    tsubst_expr.  */
11684
11685 static tree
11686 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11687 {
11688   enum tree_code code;
11689   tree r;
11690
11691   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
11692     return t;
11693
11694   code = TREE_CODE (t);
11695
11696   switch (code)
11697     {
11698     case PARM_DECL:
11699       r = retrieve_local_specialization (t);
11700
11701       if (r == NULL)
11702         {
11703           tree c;
11704           /* This can happen for a parameter name used later in a function
11705              declaration (such as in a late-specified return type).  Just
11706              make a dummy decl, since it's only used for its type.  */
11707           gcc_assert (cp_unevaluated_operand != 0);
11708           /* We copy T because want to tsubst the PARM_DECL only,
11709              not the following PARM_DECLs that are chained to T.  */
11710           c = copy_node (t);
11711           r = tsubst_decl (c, args, complain);
11712           /* Give it the template pattern as its context; its true context
11713              hasn't been instantiated yet and this is good enough for
11714              mangling.  */
11715           DECL_CONTEXT (r) = DECL_CONTEXT (t);
11716         }
11717       
11718       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
11719         r = ARGUMENT_PACK_SELECT_ARG (r);
11720       mark_used (r);
11721       return r;
11722
11723     case CONST_DECL:
11724       {
11725         tree enum_type;
11726         tree v;
11727
11728         if (DECL_TEMPLATE_PARM_P (t))
11729           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
11730         /* There is no need to substitute into namespace-scope
11731            enumerators.  */
11732         if (DECL_NAMESPACE_SCOPE_P (t))
11733           return t;
11734         /* If ARGS is NULL, then T is known to be non-dependent.  */
11735         if (args == NULL_TREE)
11736           return integral_constant_value (t);
11737
11738         /* Unfortunately, we cannot just call lookup_name here.
11739            Consider:
11740
11741              template <int I> int f() {
11742              enum E { a = I };
11743              struct S { void g() { E e = a; } };
11744              };
11745
11746            When we instantiate f<7>::S::g(), say, lookup_name is not
11747            clever enough to find f<7>::a.  */
11748         enum_type
11749           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
11750                               /*entering_scope=*/0);
11751
11752         for (v = TYPE_VALUES (enum_type);
11753              v != NULL_TREE;
11754              v = TREE_CHAIN (v))
11755           if (TREE_PURPOSE (v) == DECL_NAME (t))
11756             return TREE_VALUE (v);
11757
11758           /* We didn't find the name.  That should never happen; if
11759              name-lookup found it during preliminary parsing, we
11760              should find it again here during instantiation.  */
11761         gcc_unreachable ();
11762       }
11763       return t;
11764
11765     case FIELD_DECL:
11766       if (DECL_CONTEXT (t))
11767         {
11768           tree ctx;
11769
11770           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11771                                   /*entering_scope=*/1);
11772           if (ctx != DECL_CONTEXT (t))
11773             {
11774               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11775               if (!r)
11776                 {
11777                   if (complain & tf_error)
11778                     error ("using invalid field %qD", t);
11779                   return error_mark_node;
11780                 }
11781               return r;
11782             }
11783         }
11784
11785       return t;
11786
11787     case VAR_DECL:
11788     case FUNCTION_DECL:
11789       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
11790           || local_variable_p (t))
11791         t = tsubst (t, args, complain, in_decl);
11792       mark_used (t);
11793       return t;
11794
11795     case OVERLOAD:
11796       /* An OVERLOAD will always be a non-dependent overload set; an
11797          overload set from function scope will just be represented with an
11798          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
11799       gcc_assert (!uses_template_parms (t));
11800       return t;
11801
11802     case BASELINK:
11803       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
11804
11805     case TEMPLATE_DECL:
11806       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11807         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
11808                        args, complain, in_decl);
11809       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
11810         return tsubst (t, args, complain, in_decl);
11811       else if (DECL_CLASS_SCOPE_P (t)
11812                && uses_template_parms (DECL_CONTEXT (t)))
11813         {
11814           /* Template template argument like the following example need
11815              special treatment:
11816
11817                template <template <class> class TT> struct C {};
11818                template <class T> struct D {
11819                  template <class U> struct E {};
11820                  C<E> c;                                // #1
11821                };
11822                D<int> d;                                // #2
11823
11824              We are processing the template argument `E' in #1 for
11825              the template instantiation #2.  Originally, `E' is a
11826              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
11827              have to substitute this with one having context `D<int>'.  */
11828
11829           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
11830           return lookup_field (context, DECL_NAME(t), 0, false);
11831         }
11832       else
11833         /* Ordinary template template argument.  */
11834         return t;
11835
11836     case CAST_EXPR:
11837     case REINTERPRET_CAST_EXPR:
11838     case CONST_CAST_EXPR:
11839     case STATIC_CAST_EXPR:
11840     case DYNAMIC_CAST_EXPR:
11841     case NOP_EXPR:
11842       return build1
11843         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11844          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11845
11846     case SIZEOF_EXPR:
11847       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11848         {
11849
11850           tree expanded;
11851           int len = 0;
11852
11853           ++cp_unevaluated_operand;
11854           ++c_inhibit_evaluation_warnings;
11855           /* We only want to compute the number of arguments.  */
11856           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
11857                                             complain, in_decl);
11858           --cp_unevaluated_operand;
11859           --c_inhibit_evaluation_warnings;
11860
11861           if (TREE_CODE (expanded) == TREE_VEC)
11862             len = TREE_VEC_LENGTH (expanded);
11863
11864           if (expanded == error_mark_node)
11865             return error_mark_node;
11866           else if (PACK_EXPANSION_P (expanded)
11867                    || (TREE_CODE (expanded) == TREE_VEC
11868                        && len > 0
11869                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
11870             {
11871               if (TREE_CODE (expanded) == TREE_VEC)
11872                 expanded = TREE_VEC_ELT (expanded, len - 1);
11873
11874               if (TYPE_P (expanded))
11875                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
11876                                                    complain & tf_error);
11877               else
11878                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11879                                                    complain & tf_error);
11880             }
11881           else
11882             return build_int_cst (size_type_node, len);
11883         }
11884       /* Fall through */
11885
11886     case INDIRECT_REF:
11887     case NEGATE_EXPR:
11888     case TRUTH_NOT_EXPR:
11889     case BIT_NOT_EXPR:
11890     case ADDR_EXPR:
11891     case UNARY_PLUS_EXPR:      /* Unary + */
11892     case ALIGNOF_EXPR:
11893     case AT_ENCODE_EXPR:
11894     case ARROW_EXPR:
11895     case THROW_EXPR:
11896     case TYPEID_EXPR:
11897     case REALPART_EXPR:
11898     case IMAGPART_EXPR:
11899       return build1
11900         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11901          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11902
11903     case COMPONENT_REF:
11904       {
11905         tree object;
11906         tree name;
11907
11908         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11909         name = TREE_OPERAND (t, 1);
11910         if (TREE_CODE (name) == BIT_NOT_EXPR)
11911           {
11912             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11913                                 complain, in_decl);
11914             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11915           }
11916         else if (TREE_CODE (name) == SCOPE_REF
11917                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11918           {
11919             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11920                                      complain, in_decl);
11921             name = TREE_OPERAND (name, 1);
11922             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11923                                 complain, in_decl);
11924             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11925             name = build_qualified_name (/*type=*/NULL_TREE,
11926                                          base, name,
11927                                          /*template_p=*/false);
11928           }
11929         else if (TREE_CODE (name) == BASELINK)
11930           name = tsubst_baselink (name,
11931                                   non_reference (TREE_TYPE (object)),
11932                                   args, complain,
11933                                   in_decl);
11934         else
11935           name = tsubst_copy (name, args, complain, in_decl);
11936         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11937       }
11938
11939     case PLUS_EXPR:
11940     case MINUS_EXPR:
11941     case MULT_EXPR:
11942     case TRUNC_DIV_EXPR:
11943     case CEIL_DIV_EXPR:
11944     case FLOOR_DIV_EXPR:
11945     case ROUND_DIV_EXPR:
11946     case EXACT_DIV_EXPR:
11947     case BIT_AND_EXPR:
11948     case BIT_IOR_EXPR:
11949     case BIT_XOR_EXPR:
11950     case TRUNC_MOD_EXPR:
11951     case FLOOR_MOD_EXPR:
11952     case TRUTH_ANDIF_EXPR:
11953     case TRUTH_ORIF_EXPR:
11954     case TRUTH_AND_EXPR:
11955     case TRUTH_OR_EXPR:
11956     case RSHIFT_EXPR:
11957     case LSHIFT_EXPR:
11958     case RROTATE_EXPR:
11959     case LROTATE_EXPR:
11960     case EQ_EXPR:
11961     case NE_EXPR:
11962     case MAX_EXPR:
11963     case MIN_EXPR:
11964     case LE_EXPR:
11965     case GE_EXPR:
11966     case LT_EXPR:
11967     case GT_EXPR:
11968     case COMPOUND_EXPR:
11969     case DOTSTAR_EXPR:
11970     case MEMBER_REF:
11971     case PREDECREMENT_EXPR:
11972     case PREINCREMENT_EXPR:
11973     case POSTDECREMENT_EXPR:
11974     case POSTINCREMENT_EXPR:
11975       return build_nt
11976         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11977          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11978
11979     case SCOPE_REF:
11980       return build_qualified_name (/*type=*/NULL_TREE,
11981                                    tsubst_copy (TREE_OPERAND (t, 0),
11982                                                 args, complain, in_decl),
11983                                    tsubst_copy (TREE_OPERAND (t, 1),
11984                                                 args, complain, in_decl),
11985                                    QUALIFIED_NAME_IS_TEMPLATE (t));
11986
11987     case ARRAY_REF:
11988       return build_nt
11989         (ARRAY_REF,
11990          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11991          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11992          NULL_TREE, NULL_TREE);
11993
11994     case CALL_EXPR:
11995       {
11996         int n = VL_EXP_OPERAND_LENGTH (t);
11997         tree result = build_vl_exp (CALL_EXPR, n);
11998         int i;
11999         for (i = 0; i < n; i++)
12000           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12001                                              complain, in_decl);
12002         return result;
12003       }
12004
12005     case COND_EXPR:
12006     case MODOP_EXPR:
12007     case PSEUDO_DTOR_EXPR:
12008       {
12009         r = build_nt
12010           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12011            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12012            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12013         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12014         return r;
12015       }
12016
12017     case NEW_EXPR:
12018       {
12019         r = build_nt
12020         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12021          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12022          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12023         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12024         return r;
12025       }
12026
12027     case DELETE_EXPR:
12028       {
12029         r = build_nt
12030         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12031          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12032         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12033         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12034         return r;
12035       }
12036
12037     case TEMPLATE_ID_EXPR:
12038       {
12039         /* Substituted template arguments */
12040         tree fn = TREE_OPERAND (t, 0);
12041         tree targs = TREE_OPERAND (t, 1);
12042
12043         fn = tsubst_copy (fn, args, complain, in_decl);
12044         if (targs)
12045           targs = tsubst_template_args (targs, args, complain, in_decl);
12046
12047         return lookup_template_function (fn, targs);
12048       }
12049
12050     case TREE_LIST:
12051       {
12052         tree purpose, value, chain;
12053
12054         if (t == void_list_node)
12055           return t;
12056
12057         purpose = TREE_PURPOSE (t);
12058         if (purpose)
12059           purpose = tsubst_copy (purpose, args, complain, in_decl);
12060         value = TREE_VALUE (t);
12061         if (value)
12062           value = tsubst_copy (value, args, complain, in_decl);
12063         chain = TREE_CHAIN (t);
12064         if (chain && chain != void_type_node)
12065           chain = tsubst_copy (chain, args, complain, in_decl);
12066         if (purpose == TREE_PURPOSE (t)
12067             && value == TREE_VALUE (t)
12068             && chain == TREE_CHAIN (t))
12069           return t;
12070         return tree_cons (purpose, value, chain);
12071       }
12072
12073     case RECORD_TYPE:
12074     case UNION_TYPE:
12075     case ENUMERAL_TYPE:
12076     case INTEGER_TYPE:
12077     case TEMPLATE_TYPE_PARM:
12078     case TEMPLATE_TEMPLATE_PARM:
12079     case BOUND_TEMPLATE_TEMPLATE_PARM:
12080     case TEMPLATE_PARM_INDEX:
12081     case POINTER_TYPE:
12082     case REFERENCE_TYPE:
12083     case OFFSET_TYPE:
12084     case FUNCTION_TYPE:
12085     case METHOD_TYPE:
12086     case ARRAY_TYPE:
12087     case TYPENAME_TYPE:
12088     case UNBOUND_CLASS_TEMPLATE:
12089     case TYPEOF_TYPE:
12090     case DECLTYPE_TYPE:
12091     case TYPE_DECL:
12092       return tsubst (t, args, complain, in_decl);
12093
12094     case IDENTIFIER_NODE:
12095       if (IDENTIFIER_TYPENAME_P (t))
12096         {
12097           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12098           return mangle_conv_op_name_for_type (new_type);
12099         }
12100       else
12101         return t;
12102
12103     case CONSTRUCTOR:
12104       /* This is handled by tsubst_copy_and_build.  */
12105       gcc_unreachable ();
12106
12107     case VA_ARG_EXPR:
12108       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12109                                           in_decl),
12110                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12111
12112     case CLEANUP_POINT_EXPR:
12113       /* We shouldn't have built any of these during initial template
12114          generation.  Instead, they should be built during instantiation
12115          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12116       gcc_unreachable ();
12117
12118     case OFFSET_REF:
12119       r = build2
12120         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12121          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12122          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12123       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12124       mark_used (TREE_OPERAND (r, 1));
12125       return r;
12126
12127     case EXPR_PACK_EXPANSION:
12128       error ("invalid use of pack expansion expression");
12129       return error_mark_node;
12130
12131     case NONTYPE_ARGUMENT_PACK:
12132       error ("use %<...%> to expand argument pack");
12133       return error_mark_node;
12134
12135     case INTEGER_CST:
12136     case REAL_CST:
12137     case STRING_CST:
12138     case COMPLEX_CST:
12139       {
12140         /* Instantiate any typedefs in the type.  */
12141         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12142         r = fold_convert (type, t);
12143         gcc_assert (TREE_CODE (r) == code);
12144         return r;
12145       }
12146
12147     case PTRMEM_CST:
12148       /* These can sometimes show up in a partial instantiation, but never
12149          involve template parms.  */
12150       gcc_assert (!uses_template_parms (t));
12151       return t;
12152
12153     default:
12154       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12155       gcc_checking_assert (false);
12156       return t;
12157     }
12158 }
12159
12160 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12161
12162 static tree
12163 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12164                     tree in_decl)
12165 {
12166   tree new_clauses = NULL, nc, oc;
12167
12168   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12169     {
12170       nc = copy_node (oc);
12171       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12172       new_clauses = nc;
12173
12174       switch (OMP_CLAUSE_CODE (nc))
12175         {
12176         case OMP_CLAUSE_LASTPRIVATE:
12177           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12178             {
12179               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12180               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12181                            in_decl, /*integral_constant_expression_p=*/false);
12182               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12183                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12184             }
12185           /* FALLTHRU */
12186         case OMP_CLAUSE_PRIVATE:
12187         case OMP_CLAUSE_SHARED:
12188         case OMP_CLAUSE_FIRSTPRIVATE:
12189         case OMP_CLAUSE_REDUCTION:
12190         case OMP_CLAUSE_COPYIN:
12191         case OMP_CLAUSE_COPYPRIVATE:
12192         case OMP_CLAUSE_IF:
12193         case OMP_CLAUSE_NUM_THREADS:
12194         case OMP_CLAUSE_SCHEDULE:
12195         case OMP_CLAUSE_COLLAPSE:
12196         case OMP_CLAUSE_FINAL:
12197           OMP_CLAUSE_OPERAND (nc, 0)
12198             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12199                            in_decl, /*integral_constant_expression_p=*/false);
12200           break;
12201         case OMP_CLAUSE_NOWAIT:
12202         case OMP_CLAUSE_ORDERED:
12203         case OMP_CLAUSE_DEFAULT:
12204         case OMP_CLAUSE_UNTIED:
12205         case OMP_CLAUSE_MERGEABLE:
12206           break;
12207         default:
12208           gcc_unreachable ();
12209         }
12210     }
12211
12212   return finish_omp_clauses (nreverse (new_clauses));
12213 }
12214
12215 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12216
12217 static tree
12218 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12219                           tree in_decl)
12220 {
12221 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12222
12223   tree purpose, value, chain;
12224
12225   if (t == NULL)
12226     return t;
12227
12228   if (TREE_CODE (t) != TREE_LIST)
12229     return tsubst_copy_and_build (t, args, complain, in_decl,
12230                                   /*function_p=*/false,
12231                                   /*integral_constant_expression_p=*/false);
12232
12233   if (t == void_list_node)
12234     return t;
12235
12236   purpose = TREE_PURPOSE (t);
12237   if (purpose)
12238     purpose = RECUR (purpose);
12239   value = TREE_VALUE (t);
12240   if (value && TREE_CODE (value) != LABEL_DECL)
12241     value = RECUR (value);
12242   chain = TREE_CHAIN (t);
12243   if (chain && chain != void_type_node)
12244     chain = RECUR (chain);
12245   return tree_cons (purpose, value, chain);
12246 #undef RECUR
12247 }
12248
12249 /* Substitute one OMP_FOR iterator.  */
12250
12251 static void
12252 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12253                          tree condv, tree incrv, tree *clauses,
12254                          tree args, tsubst_flags_t complain, tree in_decl,
12255                          bool integral_constant_expression_p)
12256 {
12257 #define RECUR(NODE)                             \
12258   tsubst_expr ((NODE), args, complain, in_decl, \
12259                integral_constant_expression_p)
12260   tree decl, init, cond, incr, auto_node;
12261
12262   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12263   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12264   decl = RECUR (TREE_OPERAND (init, 0));
12265   init = TREE_OPERAND (init, 1);
12266   auto_node = type_uses_auto (TREE_TYPE (decl));
12267   if (auto_node && init)
12268     {
12269       tree init_expr = init;
12270       if (TREE_CODE (init_expr) == DECL_EXPR)
12271         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12272       init_expr = RECUR (init_expr);
12273       TREE_TYPE (decl)
12274         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12275     }
12276   gcc_assert (!type_dependent_expression_p (decl));
12277
12278   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12279     {
12280       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12281       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12282       if (TREE_CODE (incr) == MODIFY_EXPR)
12283         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12284                                     RECUR (TREE_OPERAND (incr, 1)),
12285                                     complain);
12286       else
12287         incr = RECUR (incr);
12288       TREE_VEC_ELT (declv, i) = decl;
12289       TREE_VEC_ELT (initv, i) = init;
12290       TREE_VEC_ELT (condv, i) = cond;
12291       TREE_VEC_ELT (incrv, i) = incr;
12292       return;
12293     }
12294
12295   if (init && TREE_CODE (init) != DECL_EXPR)
12296     {
12297       tree c;
12298       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12299         {
12300           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12301                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12302               && OMP_CLAUSE_DECL (c) == decl)
12303             break;
12304           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12305                    && OMP_CLAUSE_DECL (c) == decl)
12306             error ("iteration variable %qD should not be firstprivate", decl);
12307           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12308                    && OMP_CLAUSE_DECL (c) == decl)
12309             error ("iteration variable %qD should not be reduction", decl);
12310         }
12311       if (c == NULL)
12312         {
12313           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12314           OMP_CLAUSE_DECL (c) = decl;
12315           c = finish_omp_clauses (c);
12316           if (c)
12317             {
12318               OMP_CLAUSE_CHAIN (c) = *clauses;
12319               *clauses = c;
12320             }
12321         }
12322     }
12323   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12324   if (COMPARISON_CLASS_P (cond))
12325     cond = build2 (TREE_CODE (cond), boolean_type_node,
12326                    RECUR (TREE_OPERAND (cond, 0)),
12327                    RECUR (TREE_OPERAND (cond, 1)));
12328   else
12329     cond = RECUR (cond);
12330   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12331   switch (TREE_CODE (incr))
12332     {
12333     case PREINCREMENT_EXPR:
12334     case PREDECREMENT_EXPR:
12335     case POSTINCREMENT_EXPR:
12336     case POSTDECREMENT_EXPR:
12337       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12338                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12339       break;
12340     case MODIFY_EXPR:
12341       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12342           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12343         {
12344           tree rhs = TREE_OPERAND (incr, 1);
12345           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12346                          RECUR (TREE_OPERAND (incr, 0)),
12347                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12348                                  RECUR (TREE_OPERAND (rhs, 0)),
12349                                  RECUR (TREE_OPERAND (rhs, 1))));
12350         }
12351       else
12352         incr = RECUR (incr);
12353       break;
12354     case MODOP_EXPR:
12355       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12356           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12357         {
12358           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12359           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12360                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12361                                  TREE_TYPE (decl), lhs,
12362                                  RECUR (TREE_OPERAND (incr, 2))));
12363         }
12364       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12365                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12366                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12367         {
12368           tree rhs = TREE_OPERAND (incr, 2);
12369           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12370                          RECUR (TREE_OPERAND (incr, 0)),
12371                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12372                                  RECUR (TREE_OPERAND (rhs, 0)),
12373                                  RECUR (TREE_OPERAND (rhs, 1))));
12374         }
12375       else
12376         incr = RECUR (incr);
12377       break;
12378     default:
12379       incr = RECUR (incr);
12380       break;
12381     }
12382
12383   TREE_VEC_ELT (declv, i) = decl;
12384   TREE_VEC_ELT (initv, i) = init;
12385   TREE_VEC_ELT (condv, i) = cond;
12386   TREE_VEC_ELT (incrv, i) = incr;
12387 #undef RECUR
12388 }
12389
12390 /* Like tsubst_copy for expressions, etc. but also does semantic
12391    processing.  */
12392
12393 static tree
12394 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12395              bool integral_constant_expression_p)
12396 {
12397 #define RECUR(NODE)                             \
12398   tsubst_expr ((NODE), args, complain, in_decl, \
12399                integral_constant_expression_p)
12400
12401   tree stmt, tmp;
12402
12403   if (t == NULL_TREE || t == error_mark_node)
12404     return t;
12405
12406   if (EXPR_HAS_LOCATION (t))
12407     input_location = EXPR_LOCATION (t);
12408   if (STATEMENT_CODE_P (TREE_CODE (t)))
12409     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12410
12411   switch (TREE_CODE (t))
12412     {
12413     case STATEMENT_LIST:
12414       {
12415         tree_stmt_iterator i;
12416         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12417           RECUR (tsi_stmt (i));
12418         break;
12419       }
12420
12421     case CTOR_INITIALIZER:
12422       finish_mem_initializers (tsubst_initializer_list
12423                                (TREE_OPERAND (t, 0), args));
12424       break;
12425
12426     case RETURN_EXPR:
12427       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12428       break;
12429
12430     case EXPR_STMT:
12431       tmp = RECUR (EXPR_STMT_EXPR (t));
12432       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12433         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12434       else
12435         finish_expr_stmt (tmp);
12436       break;
12437
12438     case USING_STMT:
12439       do_using_directive (USING_STMT_NAMESPACE (t));
12440       break;
12441
12442     case DECL_EXPR:
12443       {
12444         tree decl, pattern_decl;
12445         tree init;
12446
12447         pattern_decl = decl = DECL_EXPR_DECL (t);
12448         if (TREE_CODE (decl) == LABEL_DECL)
12449           finish_label_decl (DECL_NAME (decl));
12450         else if (TREE_CODE (decl) == USING_DECL)
12451           {
12452             tree scope = USING_DECL_SCOPE (decl);
12453             tree name = DECL_NAME (decl);
12454             tree decl;
12455
12456             scope = tsubst (scope, args, complain, in_decl);
12457             decl = lookup_qualified_name (scope, name,
12458                                           /*is_type_p=*/false,
12459                                           /*complain=*/false);
12460             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12461               qualified_name_lookup_error (scope, name, decl, input_location);
12462             else
12463               do_local_using_decl (decl, scope, name);
12464           }
12465         else
12466           {
12467             init = DECL_INITIAL (decl);
12468             decl = tsubst (decl, args, complain, in_decl);
12469             if (decl != error_mark_node)
12470               {
12471                 /* By marking the declaration as instantiated, we avoid
12472                    trying to instantiate it.  Since instantiate_decl can't
12473                    handle local variables, and since we've already done
12474                    all that needs to be done, that's the right thing to
12475                    do.  */
12476                 if (TREE_CODE (decl) == VAR_DECL)
12477                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12478                 if (TREE_CODE (decl) == VAR_DECL
12479                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12480                   /* Anonymous aggregates are a special case.  */
12481                   finish_anon_union (decl);
12482                 else
12483                   {
12484                     int const_init = false;
12485                     maybe_push_decl (decl);
12486                     if (TREE_CODE (decl) == VAR_DECL
12487                         && DECL_PRETTY_FUNCTION_P (decl))
12488                       {
12489                         /* For __PRETTY_FUNCTION__ we have to adjust the
12490                            initializer.  */
12491                         const char *const name
12492                           = cxx_printable_name (current_function_decl, 2);
12493                         init = cp_fname_init (name, &TREE_TYPE (decl));
12494                       }
12495                     else
12496                       {
12497                         tree t = RECUR (init);
12498
12499                         if (init && !t)
12500                           {
12501                             /* If we had an initializer but it
12502                                instantiated to nothing,
12503                                value-initialize the object.  This will
12504                                only occur when the initializer was a
12505                                pack expansion where the parameter packs
12506                                used in that expansion were of length
12507                                zero.  */
12508                             init = build_value_init (TREE_TYPE (decl),
12509                                                      complain);
12510                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12511                               init = get_target_expr_sfinae (init, complain);
12512                           }
12513                         else
12514                           init = t;
12515                       }
12516
12517                     if (TREE_CODE (decl) == VAR_DECL)
12518                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12519                                     (pattern_decl));
12520                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12521                   }
12522               }
12523           }
12524
12525         /* A DECL_EXPR can also be used as an expression, in the condition
12526            clause of an if/for/while construct.  */
12527         return decl;
12528       }
12529
12530     case FOR_STMT:
12531       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12532       RECUR (FOR_INIT_STMT (t));
12533       finish_for_init_stmt (stmt);
12534       tmp = RECUR (FOR_COND (t));
12535       finish_for_cond (tmp, stmt);
12536       tmp = RECUR (FOR_EXPR (t));
12537       finish_for_expr (tmp, stmt);
12538       RECUR (FOR_BODY (t));
12539       finish_for_stmt (stmt);
12540       break;
12541
12542     case RANGE_FOR_STMT:
12543       {
12544         tree decl, expr;
12545         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12546         decl = RANGE_FOR_DECL (t);
12547         decl = tsubst (decl, args, complain, in_decl);
12548         maybe_push_decl (decl);
12549         expr = RECUR (RANGE_FOR_EXPR (t));
12550         stmt = cp_convert_range_for (stmt, decl, expr);
12551         RECUR (RANGE_FOR_BODY (t));
12552         finish_for_stmt (stmt);
12553       }
12554       break;
12555
12556     case WHILE_STMT:
12557       stmt = begin_while_stmt ();
12558       tmp = RECUR (WHILE_COND (t));
12559       finish_while_stmt_cond (tmp, stmt);
12560       RECUR (WHILE_BODY (t));
12561       finish_while_stmt (stmt);
12562       break;
12563
12564     case DO_STMT:
12565       stmt = begin_do_stmt ();
12566       RECUR (DO_BODY (t));
12567       finish_do_body (stmt);
12568       tmp = RECUR (DO_COND (t));
12569       finish_do_stmt (tmp, stmt);
12570       break;
12571
12572     case IF_STMT:
12573       stmt = begin_if_stmt ();
12574       tmp = RECUR (IF_COND (t));
12575       finish_if_stmt_cond (tmp, stmt);
12576       RECUR (THEN_CLAUSE (t));
12577       finish_then_clause (stmt);
12578
12579       if (ELSE_CLAUSE (t))
12580         {
12581           begin_else_clause (stmt);
12582           RECUR (ELSE_CLAUSE (t));
12583           finish_else_clause (stmt);
12584         }
12585
12586       finish_if_stmt (stmt);
12587       break;
12588
12589     case BIND_EXPR:
12590       if (BIND_EXPR_BODY_BLOCK (t))
12591         stmt = begin_function_body ();
12592       else
12593         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12594                                     ? BCS_TRY_BLOCK : 0);
12595
12596       RECUR (BIND_EXPR_BODY (t));
12597
12598       if (BIND_EXPR_BODY_BLOCK (t))
12599         finish_function_body (stmt);
12600       else
12601         finish_compound_stmt (stmt);
12602       break;
12603
12604     case BREAK_STMT:
12605       finish_break_stmt ();
12606       break;
12607
12608     case CONTINUE_STMT:
12609       finish_continue_stmt ();
12610       break;
12611
12612     case SWITCH_STMT:
12613       stmt = begin_switch_stmt ();
12614       tmp = RECUR (SWITCH_STMT_COND (t));
12615       finish_switch_cond (tmp, stmt);
12616       RECUR (SWITCH_STMT_BODY (t));
12617       finish_switch_stmt (stmt);
12618       break;
12619
12620     case CASE_LABEL_EXPR:
12621       finish_case_label (EXPR_LOCATION (t),
12622                          RECUR (CASE_LOW (t)),
12623                          RECUR (CASE_HIGH (t)));
12624       break;
12625
12626     case LABEL_EXPR:
12627       {
12628         tree decl = LABEL_EXPR_LABEL (t);
12629         tree label;
12630
12631         label = finish_label_stmt (DECL_NAME (decl));
12632         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12633           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12634       }
12635       break;
12636
12637     case GOTO_EXPR:
12638       tmp = GOTO_DESTINATION (t);
12639       if (TREE_CODE (tmp) != LABEL_DECL)
12640         /* Computed goto's must be tsubst'd into.  On the other hand,
12641            non-computed gotos must not be; the identifier in question
12642            will have no binding.  */
12643         tmp = RECUR (tmp);
12644       else
12645         tmp = DECL_NAME (tmp);
12646       finish_goto_stmt (tmp);
12647       break;
12648
12649     case ASM_EXPR:
12650       tmp = finish_asm_stmt
12651         (ASM_VOLATILE_P (t),
12652          RECUR (ASM_STRING (t)),
12653          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
12654          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
12655          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
12656          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
12657       {
12658         tree asm_expr = tmp;
12659         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
12660           asm_expr = TREE_OPERAND (asm_expr, 0);
12661         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
12662       }
12663       break;
12664
12665     case TRY_BLOCK:
12666       if (CLEANUP_P (t))
12667         {
12668           stmt = begin_try_block ();
12669           RECUR (TRY_STMTS (t));
12670           finish_cleanup_try_block (stmt);
12671           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
12672         }
12673       else
12674         {
12675           tree compound_stmt = NULL_TREE;
12676
12677           if (FN_TRY_BLOCK_P (t))
12678             stmt = begin_function_try_block (&compound_stmt);
12679           else
12680             stmt = begin_try_block ();
12681
12682           RECUR (TRY_STMTS (t));
12683
12684           if (FN_TRY_BLOCK_P (t))
12685             finish_function_try_block (stmt);
12686           else
12687             finish_try_block (stmt);
12688
12689           RECUR (TRY_HANDLERS (t));
12690           if (FN_TRY_BLOCK_P (t))
12691             finish_function_handler_sequence (stmt, compound_stmt);
12692           else
12693             finish_handler_sequence (stmt);
12694         }
12695       break;
12696
12697     case HANDLER:
12698       {
12699         tree decl = HANDLER_PARMS (t);
12700
12701         if (decl)
12702           {
12703             decl = tsubst (decl, args, complain, in_decl);
12704             /* Prevent instantiate_decl from trying to instantiate
12705                this variable.  We've already done all that needs to be
12706                done.  */
12707             if (decl != error_mark_node)
12708               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12709           }
12710         stmt = begin_handler ();
12711         finish_handler_parms (decl, stmt);
12712         RECUR (HANDLER_BODY (t));
12713         finish_handler (stmt);
12714       }
12715       break;
12716
12717     case TAG_DEFN:
12718       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12719       break;
12720
12721     case STATIC_ASSERT:
12722       {
12723         tree condition = 
12724           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
12725                        args,
12726                        complain, in_decl,
12727                        /*integral_constant_expression_p=*/true);
12728         finish_static_assert (condition,
12729                               STATIC_ASSERT_MESSAGE (t),
12730                               STATIC_ASSERT_SOURCE_LOCATION (t),
12731                               /*member_p=*/false);
12732       }
12733       break;
12734
12735     case OMP_PARALLEL:
12736       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
12737                                 args, complain, in_decl);
12738       stmt = begin_omp_parallel ();
12739       RECUR (OMP_PARALLEL_BODY (t));
12740       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
12741         = OMP_PARALLEL_COMBINED (t);
12742       break;
12743
12744     case OMP_TASK:
12745       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
12746                                 args, complain, in_decl);
12747       stmt = begin_omp_task ();
12748       RECUR (OMP_TASK_BODY (t));
12749       finish_omp_task (tmp, stmt);
12750       break;
12751
12752     case OMP_FOR:
12753       {
12754         tree clauses, body, pre_body;
12755         tree declv, initv, condv, incrv;
12756         int i;
12757
12758         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
12759                                       args, complain, in_decl);
12760         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12761         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12762         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12763         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12764
12765         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
12766           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
12767                                    &clauses, args, complain, in_decl,
12768                                    integral_constant_expression_p);
12769
12770         stmt = begin_omp_structured_block ();
12771
12772         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
12773           if (TREE_VEC_ELT (initv, i) == NULL
12774               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
12775             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
12776           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
12777             {
12778               tree init = RECUR (TREE_VEC_ELT (initv, i));
12779               gcc_assert (init == TREE_VEC_ELT (declv, i));
12780               TREE_VEC_ELT (initv, i) = NULL_TREE;
12781             }
12782           else
12783             {
12784               tree decl_expr = TREE_VEC_ELT (initv, i);
12785               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
12786               gcc_assert (init != NULL);
12787               TREE_VEC_ELT (initv, i) = RECUR (init);
12788               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
12789               RECUR (decl_expr);
12790               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
12791             }
12792
12793         pre_body = push_stmt_list ();
12794         RECUR (OMP_FOR_PRE_BODY (t));
12795         pre_body = pop_stmt_list (pre_body);
12796
12797         body = push_stmt_list ();
12798         RECUR (OMP_FOR_BODY (t));
12799         body = pop_stmt_list (body);
12800
12801         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
12802                             body, pre_body, clauses);
12803
12804         add_stmt (finish_omp_structured_block (stmt));
12805       }
12806       break;
12807
12808     case OMP_SECTIONS:
12809     case OMP_SINGLE:
12810       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
12811       stmt = push_stmt_list ();
12812       RECUR (OMP_BODY (t));
12813       stmt = pop_stmt_list (stmt);
12814
12815       t = copy_node (t);
12816       OMP_BODY (t) = stmt;
12817       OMP_CLAUSES (t) = tmp;
12818       add_stmt (t);
12819       break;
12820
12821     case OMP_SECTION:
12822     case OMP_CRITICAL:
12823     case OMP_MASTER:
12824     case OMP_ORDERED:
12825       stmt = push_stmt_list ();
12826       RECUR (OMP_BODY (t));
12827       stmt = pop_stmt_list (stmt);
12828
12829       t = copy_node (t);
12830       OMP_BODY (t) = stmt;
12831       add_stmt (t);
12832       break;
12833
12834     case OMP_ATOMIC:
12835       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
12836       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
12837         {
12838           tree op1 = TREE_OPERAND (t, 1);
12839           tree rhs1 = NULL_TREE;
12840           tree lhs, rhs;
12841           if (TREE_CODE (op1) == COMPOUND_EXPR)
12842             {
12843               rhs1 = RECUR (TREE_OPERAND (op1, 0));
12844               op1 = TREE_OPERAND (op1, 1);
12845             }
12846           lhs = RECUR (TREE_OPERAND (op1, 0));
12847           rhs = RECUR (TREE_OPERAND (op1, 1));
12848           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
12849                              NULL_TREE, NULL_TREE, rhs1);
12850         }
12851       else
12852         {
12853           tree op1 = TREE_OPERAND (t, 1);
12854           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
12855           tree rhs1 = NULL_TREE;
12856           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
12857           enum tree_code opcode = NOP_EXPR;
12858           if (code == OMP_ATOMIC_READ)
12859             {
12860               v = RECUR (TREE_OPERAND (op1, 0));
12861               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
12862             }
12863           else if (code == OMP_ATOMIC_CAPTURE_OLD
12864                    || code == OMP_ATOMIC_CAPTURE_NEW)
12865             {
12866               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
12867               v = RECUR (TREE_OPERAND (op1, 0));
12868               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
12869               if (TREE_CODE (op11) == COMPOUND_EXPR)
12870                 {
12871                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
12872                   op11 = TREE_OPERAND (op11, 1);
12873                 }
12874               lhs = RECUR (TREE_OPERAND (op11, 0));
12875               rhs = RECUR (TREE_OPERAND (op11, 1));
12876               opcode = TREE_CODE (op11);
12877             }
12878           else
12879             {
12880               code = OMP_ATOMIC;
12881               lhs = RECUR (TREE_OPERAND (op1, 0));
12882               rhs = RECUR (TREE_OPERAND (op1, 1));
12883             }
12884           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
12885         }
12886       break;
12887
12888     case EXPR_PACK_EXPANSION:
12889       error ("invalid use of pack expansion expression");
12890       return error_mark_node;
12891
12892     case NONTYPE_ARGUMENT_PACK:
12893       error ("use %<...%> to expand argument pack");
12894       return error_mark_node;
12895
12896     default:
12897       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
12898
12899       return tsubst_copy_and_build (t, args, complain, in_decl,
12900                                     /*function_p=*/false,
12901                                     integral_constant_expression_p);
12902     }
12903
12904   return NULL_TREE;
12905 #undef RECUR
12906 }
12907
12908 /* T is a postfix-expression that is not being used in a function
12909    call.  Return the substituted version of T.  */
12910
12911 static tree
12912 tsubst_non_call_postfix_expression (tree t, tree args,
12913                                     tsubst_flags_t complain,
12914                                     tree in_decl)
12915 {
12916   if (TREE_CODE (t) == SCOPE_REF)
12917     t = tsubst_qualified_id (t, args, complain, in_decl,
12918                              /*done=*/false, /*address_p=*/false);
12919   else
12920     t = tsubst_copy_and_build (t, args, complain, in_decl,
12921                                /*function_p=*/false,
12922                                /*integral_constant_expression_p=*/false);
12923
12924   return t;
12925 }
12926
12927 /* Like tsubst but deals with expressions and performs semantic
12928    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
12929
12930 tree
12931 tsubst_copy_and_build (tree t,
12932                        tree args,
12933                        tsubst_flags_t complain,
12934                        tree in_decl,
12935                        bool function_p,
12936                        bool integral_constant_expression_p)
12937 {
12938 #define RECUR(NODE)                                             \
12939   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
12940                          /*function_p=*/false,                  \
12941                          integral_constant_expression_p)
12942
12943   tree op1;
12944
12945   if (t == NULL_TREE || t == error_mark_node)
12946     return t;
12947
12948   switch (TREE_CODE (t))
12949     {
12950     case USING_DECL:
12951       t = DECL_NAME (t);
12952       /* Fall through.  */
12953     case IDENTIFIER_NODE:
12954       {
12955         tree decl;
12956         cp_id_kind idk;
12957         bool non_integral_constant_expression_p;
12958         const char *error_msg;
12959
12960         if (IDENTIFIER_TYPENAME_P (t))
12961           {
12962             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12963             t = mangle_conv_op_name_for_type (new_type);
12964           }
12965
12966         /* Look up the name.  */
12967         decl = lookup_name (t);
12968
12969         /* By convention, expressions use ERROR_MARK_NODE to indicate
12970            failure, not NULL_TREE.  */
12971         if (decl == NULL_TREE)
12972           decl = error_mark_node;
12973
12974         decl = finish_id_expression (t, decl, NULL_TREE,
12975                                      &idk,
12976                                      integral_constant_expression_p,
12977                                      /*allow_non_integral_constant_expression_p=*/false,
12978                                      &non_integral_constant_expression_p,
12979                                      /*template_p=*/false,
12980                                      /*done=*/true,
12981                                      /*address_p=*/false,
12982                                      /*template_arg_p=*/false,
12983                                      &error_msg,
12984                                      input_location);
12985         if (error_msg)
12986           error (error_msg);
12987         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12988           decl = unqualified_name_lookup_error (decl);
12989         return decl;
12990       }
12991
12992     case TEMPLATE_ID_EXPR:
12993       {
12994         tree object;
12995         tree templ = RECUR (TREE_OPERAND (t, 0));
12996         tree targs = TREE_OPERAND (t, 1);
12997
12998         if (targs)
12999           targs = tsubst_template_args (targs, args, complain, in_decl);
13000
13001         if (TREE_CODE (templ) == COMPONENT_REF)
13002           {
13003             object = TREE_OPERAND (templ, 0);
13004             templ = TREE_OPERAND (templ, 1);
13005           }
13006         else
13007           object = NULL_TREE;
13008         templ = lookup_template_function (templ, targs);
13009
13010         if (object)
13011           return build3 (COMPONENT_REF, TREE_TYPE (templ),
13012                          object, templ, NULL_TREE);
13013         else
13014           return baselink_for_fns (templ);
13015       }
13016
13017     case INDIRECT_REF:
13018       {
13019         tree r = RECUR (TREE_OPERAND (t, 0));
13020
13021         if (REFERENCE_REF_P (t))
13022           {
13023             /* A type conversion to reference type will be enclosed in
13024                such an indirect ref, but the substitution of the cast
13025                will have also added such an indirect ref.  */
13026             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13027               r = convert_from_reference (r);
13028           }
13029         else
13030           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13031         return r;
13032       }
13033
13034     case NOP_EXPR:
13035       return build_nop
13036         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13037          RECUR (TREE_OPERAND (t, 0)));
13038
13039     case CAST_EXPR:
13040     case REINTERPRET_CAST_EXPR:
13041     case CONST_CAST_EXPR:
13042     case DYNAMIC_CAST_EXPR:
13043     case STATIC_CAST_EXPR:
13044       {
13045         tree type;
13046         tree op;
13047
13048         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13049         if (integral_constant_expression_p
13050             && !cast_valid_in_integral_constant_expression_p (type))
13051           {
13052             if (complain & tf_error)
13053               error ("a cast to a type other than an integral or "
13054                      "enumeration type cannot appear in a constant-expression");
13055             return error_mark_node; 
13056           }
13057
13058         op = RECUR (TREE_OPERAND (t, 0));
13059
13060         switch (TREE_CODE (t))
13061           {
13062           case CAST_EXPR:
13063             return build_functional_cast (type, op, complain);
13064           case REINTERPRET_CAST_EXPR:
13065             return build_reinterpret_cast (type, op, complain);
13066           case CONST_CAST_EXPR:
13067             return build_const_cast (type, op, complain);
13068           case DYNAMIC_CAST_EXPR:
13069             return build_dynamic_cast (type, op, complain);
13070           case STATIC_CAST_EXPR:
13071             return build_static_cast (type, op, complain);
13072           default:
13073             gcc_unreachable ();
13074           }
13075       }
13076
13077     case POSTDECREMENT_EXPR:
13078     case POSTINCREMENT_EXPR:
13079       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13080                                                 args, complain, in_decl);
13081       return build_x_unary_op (TREE_CODE (t), op1, complain);
13082
13083     case PREDECREMENT_EXPR:
13084     case PREINCREMENT_EXPR:
13085     case NEGATE_EXPR:
13086     case BIT_NOT_EXPR:
13087     case ABS_EXPR:
13088     case TRUTH_NOT_EXPR:
13089     case UNARY_PLUS_EXPR:  /* Unary + */
13090     case REALPART_EXPR:
13091     case IMAGPART_EXPR:
13092       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13093                                complain);
13094
13095     case ADDR_EXPR:
13096       op1 = TREE_OPERAND (t, 0);
13097       if (TREE_CODE (op1) == LABEL_DECL)
13098         return finish_label_address_expr (DECL_NAME (op1),
13099                                           EXPR_LOCATION (op1));
13100       if (TREE_CODE (op1) == SCOPE_REF)
13101         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13102                                    /*done=*/true, /*address_p=*/true);
13103       else
13104         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13105                                                   in_decl);
13106       return build_x_unary_op (ADDR_EXPR, op1, complain);
13107
13108     case PLUS_EXPR:
13109     case MINUS_EXPR:
13110     case MULT_EXPR:
13111     case TRUNC_DIV_EXPR:
13112     case CEIL_DIV_EXPR:
13113     case FLOOR_DIV_EXPR:
13114     case ROUND_DIV_EXPR:
13115     case EXACT_DIV_EXPR:
13116     case BIT_AND_EXPR:
13117     case BIT_IOR_EXPR:
13118     case BIT_XOR_EXPR:
13119     case TRUNC_MOD_EXPR:
13120     case FLOOR_MOD_EXPR:
13121     case TRUTH_ANDIF_EXPR:
13122     case TRUTH_ORIF_EXPR:
13123     case TRUTH_AND_EXPR:
13124     case TRUTH_OR_EXPR:
13125     case RSHIFT_EXPR:
13126     case LSHIFT_EXPR:
13127     case RROTATE_EXPR:
13128     case LROTATE_EXPR:
13129     case EQ_EXPR:
13130     case NE_EXPR:
13131     case MAX_EXPR:
13132     case MIN_EXPR:
13133     case LE_EXPR:
13134     case GE_EXPR:
13135     case LT_EXPR:
13136     case GT_EXPR:
13137     case MEMBER_REF:
13138     case DOTSTAR_EXPR:
13139       return build_x_binary_op
13140         (TREE_CODE (t),
13141          RECUR (TREE_OPERAND (t, 0)),
13142          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13143           ? ERROR_MARK
13144           : TREE_CODE (TREE_OPERAND (t, 0))),
13145          RECUR (TREE_OPERAND (t, 1)),
13146          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13147           ? ERROR_MARK
13148           : TREE_CODE (TREE_OPERAND (t, 1))),
13149          /*overload=*/NULL,
13150          complain);
13151
13152     case SCOPE_REF:
13153       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13154                                   /*address_p=*/false);
13155     case ARRAY_REF:
13156       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13157                                                 args, complain, in_decl);
13158       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13159
13160     case SIZEOF_EXPR:
13161       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13162         return tsubst_copy (t, args, complain, in_decl);
13163       /* Fall through */
13164       
13165     case ALIGNOF_EXPR:
13166       op1 = TREE_OPERAND (t, 0);
13167       if (!args)
13168         {
13169           /* When there are no ARGS, we are trying to evaluate a
13170              non-dependent expression from the parser.  Trying to do
13171              the substitutions may not work.  */
13172           if (!TYPE_P (op1))
13173             op1 = TREE_TYPE (op1);
13174         }
13175       else
13176         {
13177           ++cp_unevaluated_operand;
13178           ++c_inhibit_evaluation_warnings;
13179           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13180                                        /*function_p=*/false,
13181                                        /*integral_constant_expression_p=*/false);
13182           --cp_unevaluated_operand;
13183           --c_inhibit_evaluation_warnings;
13184         }
13185       if (TYPE_P (op1))
13186         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
13187                                            complain & tf_error);
13188       else
13189         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
13190                                            complain & tf_error);
13191
13192     case AT_ENCODE_EXPR:
13193       {
13194         op1 = TREE_OPERAND (t, 0);
13195         ++cp_unevaluated_operand;
13196         ++c_inhibit_evaluation_warnings;
13197         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13198                                      /*function_p=*/false,
13199                                      /*integral_constant_expression_p=*/false);
13200         --cp_unevaluated_operand;
13201         --c_inhibit_evaluation_warnings;
13202         return objc_build_encode_expr (op1);
13203       }
13204
13205     case NOEXCEPT_EXPR:
13206       op1 = TREE_OPERAND (t, 0);
13207       ++cp_unevaluated_operand;
13208       ++c_inhibit_evaluation_warnings;
13209       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13210                                    /*function_p=*/false,
13211                                    /*integral_constant_expression_p=*/false);
13212       --cp_unevaluated_operand;
13213       --c_inhibit_evaluation_warnings;
13214       return finish_noexcept_expr (op1, complain);
13215
13216     case MODOP_EXPR:
13217       {
13218         tree r = build_x_modify_expr
13219           (RECUR (TREE_OPERAND (t, 0)),
13220            TREE_CODE (TREE_OPERAND (t, 1)),
13221            RECUR (TREE_OPERAND (t, 2)),
13222            complain);
13223         /* TREE_NO_WARNING must be set if either the expression was
13224            parenthesized or it uses an operator such as >>= rather
13225            than plain assignment.  In the former case, it was already
13226            set and must be copied.  In the latter case,
13227            build_x_modify_expr sets it and it must not be reset
13228            here.  */
13229         if (TREE_NO_WARNING (t))
13230           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13231         return r;
13232       }
13233
13234     case ARROW_EXPR:
13235       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13236                                                 args, complain, in_decl);
13237       /* Remember that there was a reference to this entity.  */
13238       if (DECL_P (op1))
13239         mark_used (op1);
13240       return build_x_arrow (op1);
13241
13242     case NEW_EXPR:
13243       {
13244         tree placement = RECUR (TREE_OPERAND (t, 0));
13245         tree init = RECUR (TREE_OPERAND (t, 3));
13246         VEC(tree,gc) *placement_vec;
13247         VEC(tree,gc) *init_vec;
13248         tree ret;
13249
13250         if (placement == NULL_TREE)
13251           placement_vec = NULL;
13252         else
13253           {
13254             placement_vec = make_tree_vector ();
13255             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13256               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13257           }
13258
13259         /* If there was an initializer in the original tree, but it
13260            instantiated to an empty list, then we should pass a
13261            non-NULL empty vector to tell build_new that it was an
13262            empty initializer() rather than no initializer.  This can
13263            only happen when the initializer is a pack expansion whose
13264            parameter packs are of length zero.  */
13265         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13266           init_vec = NULL;
13267         else
13268           {
13269             init_vec = make_tree_vector ();
13270             if (init == void_zero_node)
13271               gcc_assert (init_vec != NULL);
13272             else
13273               {
13274                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13275                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13276               }
13277           }
13278
13279         ret = build_new (&placement_vec,
13280                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13281                          RECUR (TREE_OPERAND (t, 2)),
13282                          &init_vec,
13283                          NEW_EXPR_USE_GLOBAL (t),
13284                          complain);
13285
13286         if (placement_vec != NULL)
13287           release_tree_vector (placement_vec);
13288         if (init_vec != NULL)
13289           release_tree_vector (init_vec);
13290
13291         return ret;
13292       }
13293
13294     case DELETE_EXPR:
13295      return delete_sanity
13296        (RECUR (TREE_OPERAND (t, 0)),
13297         RECUR (TREE_OPERAND (t, 1)),
13298         DELETE_EXPR_USE_VEC (t),
13299         DELETE_EXPR_USE_GLOBAL (t),
13300         complain);
13301
13302     case COMPOUND_EXPR:
13303       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13304                                     RECUR (TREE_OPERAND (t, 1)),
13305                                     complain);
13306
13307     case CALL_EXPR:
13308       {
13309         tree function;
13310         VEC(tree,gc) *call_args;
13311         unsigned int nargs, i;
13312         bool qualified_p;
13313         bool koenig_p;
13314         tree ret;
13315
13316         function = CALL_EXPR_FN (t);
13317         /* When we parsed the expression,  we determined whether or
13318            not Koenig lookup should be performed.  */
13319         koenig_p = KOENIG_LOOKUP_P (t);
13320         if (TREE_CODE (function) == SCOPE_REF)
13321           {
13322             qualified_p = true;
13323             function = tsubst_qualified_id (function, args, complain, in_decl,
13324                                             /*done=*/false,
13325                                             /*address_p=*/false);
13326           }
13327         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13328           {
13329             /* Do nothing; calling tsubst_copy_and_build on an identifier
13330                would incorrectly perform unqualified lookup again.
13331
13332                Note that we can also have an IDENTIFIER_NODE if the earlier
13333                unqualified lookup found a member function; in that case
13334                koenig_p will be false and we do want to do the lookup
13335                again to find the instantiated member function.
13336
13337                FIXME but doing that causes c++/15272, so we need to stop
13338                using IDENTIFIER_NODE in that situation.  */
13339             qualified_p = false;
13340           }
13341         else
13342           {
13343             if (TREE_CODE (function) == COMPONENT_REF)
13344               {
13345                 tree op = TREE_OPERAND (function, 1);
13346
13347                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13348                                || (BASELINK_P (op)
13349                                    && BASELINK_QUALIFIED_P (op)));
13350               }
13351             else
13352               qualified_p = false;
13353
13354             function = tsubst_copy_and_build (function, args, complain,
13355                                               in_decl,
13356                                               !qualified_p,
13357                                               integral_constant_expression_p);
13358
13359             if (BASELINK_P (function))
13360               qualified_p = true;
13361           }
13362
13363         nargs = call_expr_nargs (t);
13364         call_args = make_tree_vector ();
13365         for (i = 0; i < nargs; ++i)
13366           {
13367             tree arg = CALL_EXPR_ARG (t, i);
13368
13369             if (!PACK_EXPANSION_P (arg))
13370               VEC_safe_push (tree, gc, call_args,
13371                              RECUR (CALL_EXPR_ARG (t, i)));
13372             else
13373               {
13374                 /* Expand the pack expansion and push each entry onto
13375                    CALL_ARGS.  */
13376                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13377                 if (TREE_CODE (arg) == TREE_VEC)
13378                   {
13379                     unsigned int len, j;
13380
13381                     len = TREE_VEC_LENGTH (arg);
13382                     for (j = 0; j < len; ++j)
13383                       {
13384                         tree value = TREE_VEC_ELT (arg, j);
13385                         if (value != NULL_TREE)
13386                           value = convert_from_reference (value);
13387                         VEC_safe_push (tree, gc, call_args, value);
13388                       }
13389                   }
13390                 else
13391                   {
13392                     /* A partial substitution.  Add one entry.  */
13393                     VEC_safe_push (tree, gc, call_args, arg);
13394                   }
13395               }
13396           }
13397
13398         /* We do not perform argument-dependent lookup if normal
13399            lookup finds a non-function, in accordance with the
13400            expected resolution of DR 218.  */
13401         if (koenig_p
13402             && ((is_overloaded_fn (function)
13403                  /* If lookup found a member function, the Koenig lookup is
13404                     not appropriate, even if an unqualified-name was used
13405                     to denote the function.  */
13406                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13407                 || TREE_CODE (function) == IDENTIFIER_NODE)
13408             /* Only do this when substitution turns a dependent call
13409                into a non-dependent call.  */
13410             && type_dependent_expression_p_push (t)
13411             && !any_type_dependent_arguments_p (call_args))
13412           function = perform_koenig_lookup (function, call_args, false,
13413                                             tf_none);
13414
13415         if (TREE_CODE (function) == IDENTIFIER_NODE
13416             && !any_type_dependent_arguments_p (call_args))
13417           {
13418             if (koenig_p && (complain & tf_warning_or_error))
13419               {
13420                 /* For backwards compatibility and good diagnostics, try
13421                    the unqualified lookup again if we aren't in SFINAE
13422                    context.  */
13423                 tree unq = (tsubst_copy_and_build
13424                             (function, args, complain, in_decl, true,
13425                              integral_constant_expression_p));
13426                 if (unq != function)
13427                   {
13428                     tree fn = unq;
13429                     if (TREE_CODE (fn) == COMPONENT_REF)
13430                       fn = TREE_OPERAND (fn, 1);
13431                     if (is_overloaded_fn (fn))
13432                       fn = get_first_fn (fn);
13433                     permerror (EXPR_LOC_OR_HERE (t),
13434                                "%qD was not declared in this scope, "
13435                                "and no declarations were found by "
13436                                "argument-dependent lookup at the point "
13437                                "of instantiation", function);
13438                     if (DECL_CLASS_SCOPE_P (fn))
13439                       {
13440                         inform (EXPR_LOC_OR_HERE (t),
13441                                 "declarations in dependent base %qT are "
13442                                 "not found by unqualified lookup",
13443                                 DECL_CLASS_CONTEXT (fn));
13444                         if (current_class_ptr)
13445                           inform (EXPR_LOC_OR_HERE (t),
13446                                   "use %<this->%D%> instead", function);
13447                         else
13448                           inform (EXPR_LOC_OR_HERE (t),
13449                                   "use %<%T::%D%> instead",
13450                                   current_class_name, function);
13451                       }
13452                     else
13453                       inform (0, "%q+D declared here, later in the "
13454                                 "translation unit", fn);
13455                     function = unq;
13456                   }
13457               }
13458             if (TREE_CODE (function) == IDENTIFIER_NODE)
13459               {
13460                 unqualified_name_lookup_error (function);
13461                 release_tree_vector (call_args);
13462                 return error_mark_node;
13463               }
13464           }
13465
13466         /* Remember that there was a reference to this entity.  */
13467         if (DECL_P (function))
13468           mark_used (function);
13469
13470         if (TREE_CODE (function) == OFFSET_REF)
13471           ret = build_offset_ref_call_from_tree (function, &call_args);
13472         else if (TREE_CODE (function) == COMPONENT_REF)
13473           {
13474             tree instance = TREE_OPERAND (function, 0);
13475             tree fn = TREE_OPERAND (function, 1);
13476
13477             if (processing_template_decl
13478                 && (type_dependent_expression_p (instance)
13479                     || (!BASELINK_P (fn)
13480                         && TREE_CODE (fn) != FIELD_DECL)
13481                     || type_dependent_expression_p (fn)
13482                     || any_type_dependent_arguments_p (call_args)))
13483               ret = build_nt_call_vec (function, call_args);
13484             else if (!BASELINK_P (fn))
13485               ret = finish_call_expr (function, &call_args,
13486                                        /*disallow_virtual=*/false,
13487                                        /*koenig_p=*/false,
13488                                        complain);
13489             else
13490               ret = (build_new_method_call
13491                       (instance, fn,
13492                        &call_args, NULL_TREE,
13493                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13494                        /*fn_p=*/NULL,
13495                        complain));
13496           }
13497         else
13498           ret = finish_call_expr (function, &call_args,
13499                                   /*disallow_virtual=*/qualified_p,
13500                                   koenig_p,
13501                                   complain);
13502
13503         release_tree_vector (call_args);
13504
13505         return ret;
13506       }
13507
13508     case COND_EXPR:
13509       return build_x_conditional_expr
13510         (RECUR (TREE_OPERAND (t, 0)),
13511          RECUR (TREE_OPERAND (t, 1)),
13512          RECUR (TREE_OPERAND (t, 2)),
13513          complain);
13514
13515     case PSEUDO_DTOR_EXPR:
13516       return finish_pseudo_destructor_expr
13517         (RECUR (TREE_OPERAND (t, 0)),
13518          RECUR (TREE_OPERAND (t, 1)),
13519          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13520
13521     case TREE_LIST:
13522       {
13523         tree purpose, value, chain;
13524
13525         if (t == void_list_node)
13526           return t;
13527
13528         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13529             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13530           {
13531             /* We have pack expansions, so expand those and
13532                create a new list out of it.  */
13533             tree purposevec = NULL_TREE;
13534             tree valuevec = NULL_TREE;
13535             tree chain;
13536             int i, len = -1;
13537
13538             /* Expand the argument expressions.  */
13539             if (TREE_PURPOSE (t))
13540               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13541                                                  complain, in_decl);
13542             if (TREE_VALUE (t))
13543               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13544                                                complain, in_decl);
13545
13546             /* Build the rest of the list.  */
13547             chain = TREE_CHAIN (t);
13548             if (chain && chain != void_type_node)
13549               chain = RECUR (chain);
13550
13551             /* Determine the number of arguments.  */
13552             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13553               {
13554                 len = TREE_VEC_LENGTH (purposevec);
13555                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13556               }
13557             else if (TREE_CODE (valuevec) == TREE_VEC)
13558               len = TREE_VEC_LENGTH (valuevec);
13559             else
13560               {
13561                 /* Since we only performed a partial substitution into
13562                    the argument pack, we only return a single list
13563                    node.  */
13564                 if (purposevec == TREE_PURPOSE (t)
13565                     && valuevec == TREE_VALUE (t)
13566                     && chain == TREE_CHAIN (t))
13567                   return t;
13568
13569                 return tree_cons (purposevec, valuevec, chain);
13570               }
13571             
13572             /* Convert the argument vectors into a TREE_LIST */
13573             i = len;
13574             while (i > 0)
13575               {
13576                 /* Grab the Ith values.  */
13577                 i--;
13578                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
13579                                      : NULL_TREE;
13580                 value 
13581                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
13582                              : NULL_TREE;
13583
13584                 /* Build the list (backwards).  */
13585                 chain = tree_cons (purpose, value, chain);
13586               }
13587
13588             return chain;
13589           }
13590
13591         purpose = TREE_PURPOSE (t);
13592         if (purpose)
13593           purpose = RECUR (purpose);
13594         value = TREE_VALUE (t);
13595         if (value)
13596           value = RECUR (value);
13597         chain = TREE_CHAIN (t);
13598         if (chain && chain != void_type_node)
13599           chain = RECUR (chain);
13600         if (purpose == TREE_PURPOSE (t)
13601             && value == TREE_VALUE (t)
13602             && chain == TREE_CHAIN (t))
13603           return t;
13604         return tree_cons (purpose, value, chain);
13605       }
13606
13607     case COMPONENT_REF:
13608       {
13609         tree object;
13610         tree object_type;
13611         tree member;
13612
13613         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13614                                                      args, complain, in_decl);
13615         /* Remember that there was a reference to this entity.  */
13616         if (DECL_P (object))
13617           mark_used (object);
13618         object_type = TREE_TYPE (object);
13619
13620         member = TREE_OPERAND (t, 1);
13621         if (BASELINK_P (member))
13622           member = tsubst_baselink (member,
13623                                     non_reference (TREE_TYPE (object)),
13624                                     args, complain, in_decl);
13625         else
13626           member = tsubst_copy (member, args, complain, in_decl);
13627         if (member == error_mark_node)
13628           return error_mark_node;
13629
13630         if (object_type && !CLASS_TYPE_P (object_type))
13631           {
13632             if (SCALAR_TYPE_P (object_type))
13633               {
13634                 tree s = NULL_TREE;
13635                 tree dtor = member;
13636
13637                 if (TREE_CODE (dtor) == SCOPE_REF)
13638                   {
13639                     s = TREE_OPERAND (dtor, 0);
13640                     dtor = TREE_OPERAND (dtor, 1);
13641                   }
13642                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
13643                   {
13644                     dtor = TREE_OPERAND (dtor, 0);
13645                     if (TYPE_P (dtor))
13646                       return finish_pseudo_destructor_expr (object, s, dtor);
13647                   }
13648               }
13649           }
13650         else if (TREE_CODE (member) == SCOPE_REF
13651                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
13652           {
13653             tree tmpl;
13654             tree args;
13655
13656             /* Lookup the template functions now that we know what the
13657                scope is.  */
13658             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
13659             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
13660             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
13661                                             /*is_type_p=*/false,
13662                                             /*complain=*/false);
13663             if (BASELINK_P (member))
13664               {
13665                 BASELINK_FUNCTIONS (member)
13666                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
13667                               args);
13668                 member = (adjust_result_of_qualified_name_lookup
13669                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
13670                            object_type));
13671               }
13672             else
13673               {
13674                 qualified_name_lookup_error (object_type, tmpl, member,
13675                                              input_location);
13676                 return error_mark_node;
13677               }
13678           }
13679         else if (TREE_CODE (member) == SCOPE_REF
13680                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
13681                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
13682           {
13683             if (complain & tf_error)
13684               {
13685                 if (TYPE_P (TREE_OPERAND (member, 0)))
13686                   error ("%qT is not a class or namespace",
13687                          TREE_OPERAND (member, 0));
13688                 else
13689                   error ("%qD is not a class or namespace",
13690                          TREE_OPERAND (member, 0));
13691               }
13692             return error_mark_node;
13693           }
13694         else if (TREE_CODE (member) == FIELD_DECL)
13695           return finish_non_static_data_member (member, object, NULL_TREE);
13696
13697         return finish_class_member_access_expr (object, member,
13698                                                 /*template_p=*/false,
13699                                                 complain);
13700       }
13701
13702     case THROW_EXPR:
13703       return build_throw
13704         (RECUR (TREE_OPERAND (t, 0)));
13705
13706     case CONSTRUCTOR:
13707       {
13708         VEC(constructor_elt,gc) *n;
13709         constructor_elt *ce;
13710         unsigned HOST_WIDE_INT idx;
13711         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13712         bool process_index_p;
13713         int newlen;
13714         bool need_copy_p = false;
13715         tree r;
13716
13717         if (type == error_mark_node)
13718           return error_mark_node;
13719
13720         /* digest_init will do the wrong thing if we let it.  */
13721         if (type && TYPE_PTRMEMFUNC_P (type))
13722           return t;
13723
13724         /* We do not want to process the index of aggregate
13725            initializers as they are identifier nodes which will be
13726            looked up by digest_init.  */
13727         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
13728
13729         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
13730         newlen = VEC_length (constructor_elt, n);
13731         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
13732           {
13733             if (ce->index && process_index_p)
13734               ce->index = RECUR (ce->index);
13735
13736             if (PACK_EXPANSION_P (ce->value))
13737               {
13738                 /* Substitute into the pack expansion.  */
13739                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
13740                                                   in_decl);
13741
13742                 if (ce->value == error_mark_node
13743                     || PACK_EXPANSION_P (ce->value))
13744                   ;
13745                 else if (TREE_VEC_LENGTH (ce->value) == 1)
13746                   /* Just move the argument into place.  */
13747                   ce->value = TREE_VEC_ELT (ce->value, 0);
13748                 else
13749                   {
13750                     /* Update the length of the final CONSTRUCTOR
13751                        arguments vector, and note that we will need to
13752                        copy.*/
13753                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
13754                     need_copy_p = true;
13755                   }
13756               }
13757             else
13758               ce->value = RECUR (ce->value);
13759           }
13760
13761         if (need_copy_p)
13762           {
13763             VEC(constructor_elt,gc) *old_n = n;
13764
13765             n = VEC_alloc (constructor_elt, gc, newlen);
13766             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
13767               {
13768                 if (TREE_CODE (ce->value) == TREE_VEC)
13769                   {
13770                     int i, len = TREE_VEC_LENGTH (ce->value);
13771                     for (i = 0; i < len; ++i)
13772                       CONSTRUCTOR_APPEND_ELT (n, 0,
13773                                               TREE_VEC_ELT (ce->value, i));
13774                   }
13775                 else
13776                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
13777               }
13778           }
13779
13780         r = build_constructor (init_list_type_node, n);
13781         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
13782
13783         if (TREE_HAS_CONSTRUCTOR (t))
13784           return finish_compound_literal (type, r, complain);
13785
13786         TREE_TYPE (r) = type;
13787         return r;
13788       }
13789
13790     case TYPEID_EXPR:
13791       {
13792         tree operand_0 = TREE_OPERAND (t, 0);
13793         if (TYPE_P (operand_0))
13794           {
13795             operand_0 = tsubst (operand_0, args, complain, in_decl);
13796             return get_typeid (operand_0);
13797           }
13798         else
13799           {
13800             operand_0 = RECUR (operand_0);
13801             return build_typeid (operand_0);
13802           }
13803       }
13804
13805     case VAR_DECL:
13806       if (!args)
13807         return t;
13808       /* Fall through */
13809
13810     case PARM_DECL:
13811       {
13812         tree r = tsubst_copy (t, args, complain, in_decl);
13813
13814         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
13815           /* If the original type was a reference, we'll be wrapped in
13816              the appropriate INDIRECT_REF.  */
13817           r = convert_from_reference (r);
13818         return r;
13819       }
13820
13821     case VA_ARG_EXPR:
13822       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
13823                              tsubst (TREE_TYPE (t), args, complain, in_decl));
13824
13825     case OFFSETOF_EXPR:
13826       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
13827
13828     case TRAIT_EXPR:
13829       {
13830         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
13831                                   complain, in_decl);
13832
13833         tree type2 = TRAIT_EXPR_TYPE2 (t);
13834         if (type2)
13835           type2 = tsubst_copy (type2, args, complain, in_decl);
13836         
13837         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
13838       }
13839
13840     case STMT_EXPR:
13841       {
13842         tree old_stmt_expr = cur_stmt_expr;
13843         tree stmt_expr = begin_stmt_expr ();
13844
13845         cur_stmt_expr = stmt_expr;
13846         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
13847                      integral_constant_expression_p);
13848         stmt_expr = finish_stmt_expr (stmt_expr, false);
13849         cur_stmt_expr = old_stmt_expr;
13850
13851         /* If the resulting list of expression statement is empty,
13852            fold it further into void_zero_node.  */
13853         if (empty_expr_stmt_p (stmt_expr))
13854           stmt_expr = void_zero_node;
13855
13856         return stmt_expr;
13857       }
13858
13859     case CONST_DECL:
13860       t = tsubst_copy (t, args, complain, in_decl);
13861       /* As in finish_id_expression, we resolve enumeration constants
13862          to their underlying values.  */
13863       if (TREE_CODE (t) == CONST_DECL)
13864         {
13865           used_types_insert (TREE_TYPE (t));
13866           return DECL_INITIAL (t);
13867         }
13868       return t;
13869
13870     case LAMBDA_EXPR:
13871       {
13872         tree r = build_lambda_expr ();
13873
13874         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13875         TREE_TYPE (r) = type;
13876         CLASSTYPE_LAMBDA_EXPR (type) = r;
13877
13878         LAMBDA_EXPR_LOCATION (r)
13879           = LAMBDA_EXPR_LOCATION (t);
13880         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
13881           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
13882         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
13883         LAMBDA_EXPR_DISCRIMINATOR (r)
13884           = (LAMBDA_EXPR_DISCRIMINATOR (t));
13885         LAMBDA_EXPR_CAPTURE_LIST (r)
13886           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
13887         LAMBDA_EXPR_EXTRA_SCOPE (r)
13888           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
13889         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
13890                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
13891
13892         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
13893         determine_visibility (TYPE_NAME (type));
13894         /* Now that we know visibility, instantiate the type so we have a
13895            declaration of the op() for later calls to lambda_function.  */
13896         complete_type (type);
13897
13898         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
13899         if (type)
13900           apply_lambda_return_type (r, type);
13901
13902         return build_lambda_object (r);
13903       }
13904
13905     case TARGET_EXPR:
13906       /* We can get here for a constant initializer of non-dependent type.
13907          FIXME stop folding in cp_parser_initializer_clause.  */
13908       gcc_assert (TREE_CONSTANT (t));
13909       {
13910         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
13911         TREE_CONSTANT (r) = true;
13912         return r;
13913       }
13914
13915     default:
13916       /* Handle Objective-C++ constructs, if appropriate.  */
13917       {
13918         tree subst
13919           = objcp_tsubst_copy_and_build (t, args, complain,
13920                                          in_decl, /*function_p=*/false);
13921         if (subst)
13922           return subst;
13923       }
13924       return tsubst_copy (t, args, complain, in_decl);
13925     }
13926
13927 #undef RECUR
13928 }
13929
13930 /* Verify that the instantiated ARGS are valid. For type arguments,
13931    make sure that the type's linkage is ok. For non-type arguments,
13932    make sure they are constants if they are integral or enumerations.
13933    Emit an error under control of COMPLAIN, and return TRUE on error.  */
13934
13935 static bool
13936 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
13937 {
13938   if (ARGUMENT_PACK_P (t))
13939     {
13940       tree vec = ARGUMENT_PACK_ARGS (t);
13941       int len = TREE_VEC_LENGTH (vec);
13942       bool result = false;
13943       int i;
13944
13945       for (i = 0; i < len; ++i)
13946         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
13947           result = true;
13948       return result;
13949     }
13950   else if (TYPE_P (t))
13951     {
13952       /* [basic.link]: A name with no linkage (notably, the name
13953          of a class or enumeration declared in a local scope)
13954          shall not be used to declare an entity with linkage.
13955          This implies that names with no linkage cannot be used as
13956          template arguments
13957
13958          DR 757 relaxes this restriction for C++0x.  */
13959       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13960                  : no_linkage_check (t, /*relaxed_p=*/false));
13961
13962       if (nt)
13963         {
13964           /* DR 488 makes use of a type with no linkage cause
13965              type deduction to fail.  */
13966           if (complain & tf_error)
13967             {
13968               if (TYPE_ANONYMOUS_P (nt))
13969                 error ("%qT is/uses anonymous type", t);
13970               else
13971                 error ("template argument for %qD uses local type %qT",
13972                        tmpl, t);
13973             }
13974           return true;
13975         }
13976       /* In order to avoid all sorts of complications, we do not
13977          allow variably-modified types as template arguments.  */
13978       else if (variably_modified_type_p (t, NULL_TREE))
13979         {
13980           if (complain & tf_error)
13981             error ("%qT is a variably modified type", t);
13982           return true;
13983         }
13984     }
13985   /* A non-type argument of integral or enumerated type must be a
13986      constant.  */
13987   else if (TREE_TYPE (t)
13988            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13989            && !TREE_CONSTANT (t))
13990     {
13991       if (complain & tf_error)
13992         error ("integral expression %qE is not constant", t);
13993       return true;
13994     }
13995   return false;
13996 }
13997
13998 static bool
13999 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14000 {
14001   int ix, len = DECL_NTPARMS (tmpl);
14002   bool result = false;
14003
14004   for (ix = 0; ix != len; ix++)
14005     {
14006       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14007         result = true;
14008     }
14009   if (result && (complain & tf_error))
14010     error ("  trying to instantiate %qD", tmpl);
14011   return result;
14012 }
14013
14014 /* In C++0x, it's possible to have a function template whose type depends
14015    on itself recursively.  This is most obvious with decltype, but can also
14016    occur with enumeration scope (c++/48969).  So we need to catch infinite
14017    recursion and reject the substitution at deduction time; this function
14018    will return error_mark_node for any repeated substitution.
14019
14020    This also catches excessive recursion such as when f<N> depends on
14021    f<N-1> across all integers, and returns error_mark_node for all the
14022    substitutions back up to the initial one.
14023
14024    This is, of course, not reentrant.  */
14025
14026 static tree
14027 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14028 {
14029   static bool excessive_deduction_depth;
14030   static int deduction_depth;
14031   struct pending_template *old_last_pend = last_pending_template;
14032   struct tinst_level *old_error_tinst = last_error_tinst_level;
14033
14034   tree fntype = TREE_TYPE (fn);
14035   tree tinst;
14036   tree r;
14037
14038   if (excessive_deduction_depth)
14039     return error_mark_node;
14040
14041   tinst = build_tree_list (fn, targs);
14042   if (!push_tinst_level (tinst))
14043     {
14044       excessive_deduction_depth = true;
14045       ggc_free (tinst);
14046       return error_mark_node;
14047     }
14048
14049   input_location = DECL_SOURCE_LOCATION (fn);
14050   ++deduction_depth;
14051   push_deduction_access_scope (fn);
14052   r = tsubst (fntype, targs, complain, NULL_TREE);
14053   pop_deduction_access_scope (fn);
14054   --deduction_depth;
14055
14056   if (excessive_deduction_depth)
14057     {
14058       r = error_mark_node;
14059       if (deduction_depth == 0)
14060         /* Reset once we're all the way out.  */
14061         excessive_deduction_depth = false;
14062     }
14063
14064   pop_tinst_level ();
14065   /* We can't free this if a pending_template entry or last_error_tinst_level
14066      is pointing at it.  */
14067   if (last_pending_template == old_last_pend
14068       && last_error_tinst_level == old_error_tinst)
14069     ggc_free (tinst);
14070   return r;
14071 }
14072
14073 /* Instantiate the indicated variable or function template TMPL with
14074    the template arguments in TARG_PTR.  */
14075
14076 static tree
14077 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14078 {
14079   tree targ_ptr = orig_args;
14080   tree fndecl;
14081   tree gen_tmpl;
14082   tree spec;
14083   HOST_WIDE_INT saved_processing_template_decl;
14084
14085   if (tmpl == error_mark_node)
14086     return error_mark_node;
14087
14088   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14089
14090   /* If this function is a clone, handle it specially.  */
14091   if (DECL_CLONED_FUNCTION_P (tmpl))
14092     {
14093       tree spec;
14094       tree clone;
14095
14096       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14097          DECL_CLONED_FUNCTION.  */
14098       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14099                                    targ_ptr, complain);
14100       if (spec == error_mark_node)
14101         return error_mark_node;
14102
14103       /* Look for the clone.  */
14104       FOR_EACH_CLONE (clone, spec)
14105         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14106           return clone;
14107       /* We should always have found the clone by now.  */
14108       gcc_unreachable ();
14109       return NULL_TREE;
14110     }
14111
14112   /* Check to see if we already have this specialization.  */
14113   gen_tmpl = most_general_template (tmpl);
14114   if (tmpl != gen_tmpl)
14115     /* The TMPL is a partial instantiation.  To get a full set of
14116        arguments we must add the arguments used to perform the
14117        partial instantiation.  */
14118     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14119                                             targ_ptr);
14120
14121   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14122      but it doesn't seem to be on the hot path.  */
14123   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14124
14125   gcc_assert (tmpl == gen_tmpl
14126               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14127                   == spec)
14128               || fndecl == NULL_TREE);
14129
14130   if (spec != NULL_TREE)
14131     return spec;
14132
14133   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14134                                complain))
14135     return error_mark_node;
14136
14137   /* We are building a FUNCTION_DECL, during which the access of its
14138      parameters and return types have to be checked.  However this
14139      FUNCTION_DECL which is the desired context for access checking
14140      is not built yet.  We solve this chicken-and-egg problem by
14141      deferring all checks until we have the FUNCTION_DECL.  */
14142   push_deferring_access_checks (dk_deferred);
14143
14144   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
14145      (because, for example, we have encountered a non-dependent
14146      function call in the body of a template function and must now
14147      determine which of several overloaded functions will be called),
14148      within the instantiation itself we are not processing a
14149      template.  */  
14150   saved_processing_template_decl = processing_template_decl;
14151   processing_template_decl = 0;
14152   /* Substitute template parameters to obtain the specialization.  */
14153   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14154                    targ_ptr, complain, gen_tmpl);
14155   processing_template_decl = saved_processing_template_decl;
14156   if (fndecl == error_mark_node)
14157     return error_mark_node;
14158
14159   /* Now we know the specialization, compute access previously
14160      deferred.  */
14161   push_access_scope (fndecl);
14162
14163   /* Some typedefs referenced from within the template code need to be access
14164      checked at template instantiation time, i.e now. These types were
14165      added to the template at parsing time. Let's get those and perfom
14166      the acces checks then.  */
14167   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14168   perform_deferred_access_checks ();
14169   pop_access_scope (fndecl);
14170   pop_deferring_access_checks ();
14171
14172   /* The DECL_TI_TEMPLATE should always be the immediate parent
14173      template, not the most general template.  */
14174   DECL_TI_TEMPLATE (fndecl) = tmpl;
14175
14176   /* If we've just instantiated the main entry point for a function,
14177      instantiate all the alternate entry points as well.  We do this
14178      by cloning the instantiation of the main entry point, not by
14179      instantiating the template clones.  */
14180   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14181     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14182
14183   return fndecl;
14184 }
14185
14186 /* Wrapper for instantiate_template_1.  */
14187
14188 tree
14189 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14190 {
14191   tree ret;
14192   timevar_push (TV_TEMPLATE_INST);
14193   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14194   timevar_pop (TV_TEMPLATE_INST);
14195   return ret;
14196 }
14197
14198 /* We're going to do deduction substitution on the type of TMPL, a function
14199    template.  In C++11 mode, push into that access scope.  In C++03 mode,
14200    disable access checking.  */
14201
14202 static void
14203 push_deduction_access_scope (tree tmpl)
14204 {
14205   if (cxx_dialect >= cxx0x)
14206     {
14207       int ptd = processing_template_decl;
14208       push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14209       /* Preserve processing_template_decl across push_to_top_level.  */
14210       if (ptd && !processing_template_decl)
14211         ++processing_template_decl;
14212     }
14213   else
14214     push_deferring_access_checks (dk_no_check);
14215 }
14216
14217 /* And pop back out.  */
14218
14219 static void
14220 pop_deduction_access_scope (tree tmpl)
14221 {
14222   if (cxx_dialect >= cxx0x)
14223     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14224   else
14225     pop_deferring_access_checks ();
14226 }
14227
14228 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14229    NARGS elements of the arguments that are being used when calling
14230    it.  TARGS is a vector into which the deduced template arguments
14231    are placed.
14232
14233    Return zero for success, 2 for an incomplete match that doesn't resolve
14234    all the types, and 1 for complete failure.  An error message will be
14235    printed only for an incomplete match.
14236
14237    If FN is a conversion operator, or we are trying to produce a specific
14238    specialization, RETURN_TYPE is the return type desired.
14239
14240    The EXPLICIT_TARGS are explicit template arguments provided via a
14241    template-id.
14242
14243    The parameter STRICT is one of:
14244
14245    DEDUCE_CALL:
14246      We are deducing arguments for a function call, as in
14247      [temp.deduct.call].
14248
14249    DEDUCE_CONV:
14250      We are deducing arguments for a conversion function, as in
14251      [temp.deduct.conv].
14252
14253    DEDUCE_EXACT:
14254      We are deducing arguments when doing an explicit instantiation
14255      as in [temp.explicit], when determining an explicit specialization
14256      as in [temp.expl.spec], or when taking the address of a function
14257      template, as in [temp.deduct.funcaddr].  */
14258
14259 int
14260 fn_type_unification (tree fn,
14261                      tree explicit_targs,
14262                      tree targs,
14263                      const tree *args,
14264                      unsigned int nargs,
14265                      tree return_type,
14266                      unification_kind_t strict,
14267                      int flags,
14268                      bool explain_p)
14269 {
14270   tree parms;
14271   tree fntype;
14272   int result;
14273   bool incomplete_argument_packs_p = false;
14274
14275   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14276
14277   fntype = TREE_TYPE (fn);
14278   if (explicit_targs)
14279     {
14280       /* [temp.deduct]
14281
14282          The specified template arguments must match the template
14283          parameters in kind (i.e., type, nontype, template), and there
14284          must not be more arguments than there are parameters;
14285          otherwise type deduction fails.
14286
14287          Nontype arguments must match the types of the corresponding
14288          nontype template parameters, or must be convertible to the
14289          types of the corresponding nontype parameters as specified in
14290          _temp.arg.nontype_, otherwise type deduction fails.
14291
14292          All references in the function type of the function template
14293          to the corresponding template parameters are replaced by the
14294          specified template argument values.  If a substitution in a
14295          template parameter or in the function type of the function
14296          template results in an invalid type, type deduction fails.  */
14297       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14298       int i, len = TREE_VEC_LENGTH (tparms);
14299       tree converted_args;
14300       bool incomplete = false;
14301
14302       if (explicit_targs == error_mark_node)
14303         return unify_invalid (explain_p);
14304
14305       converted_args
14306         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14307                                   (explain_p
14308                                    ? tf_warning_or_error
14309                                    : tf_none),
14310                                    /*require_all_args=*/false,
14311                                    /*use_default_args=*/false));
14312       if (converted_args == error_mark_node)
14313         return 1;
14314
14315       /* Substitute the explicit args into the function type.  This is
14316          necessary so that, for instance, explicitly declared function
14317          arguments can match null pointed constants.  If we were given
14318          an incomplete set of explicit args, we must not do semantic
14319          processing during substitution as we could create partial
14320          instantiations.  */
14321       for (i = 0; i < len; i++)
14322         {
14323           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14324           bool parameter_pack = false;
14325
14326           /* Dig out the actual parm.  */
14327           if (TREE_CODE (parm) == TYPE_DECL
14328               || TREE_CODE (parm) == TEMPLATE_DECL)
14329             {
14330               parm = TREE_TYPE (parm);
14331               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14332             }
14333           else if (TREE_CODE (parm) == PARM_DECL)
14334             {
14335               parm = DECL_INITIAL (parm);
14336               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14337             }
14338
14339           if (parameter_pack)
14340             {
14341               int level, idx;
14342               tree targ;
14343               template_parm_level_and_index (parm, &level, &idx);
14344
14345               /* Mark the argument pack as "incomplete". We could
14346                  still deduce more arguments during unification.
14347                  We remove this mark in type_unification_real.  */
14348               targ = TMPL_ARG (converted_args, level, idx);
14349               if (targ)
14350                 {
14351                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14352                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14353                     = ARGUMENT_PACK_ARGS (targ);
14354                 }
14355
14356               /* We have some incomplete argument packs.  */
14357               incomplete_argument_packs_p = true;
14358             }
14359         }
14360
14361       if (incomplete_argument_packs_p)
14362         /* Any substitution is guaranteed to be incomplete if there
14363            are incomplete argument packs, because we can still deduce
14364            more arguments.  */
14365         incomplete = 1;
14366       else
14367         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
14368
14369       processing_template_decl += incomplete;
14370       fntype = deduction_tsubst_fntype (fn, converted_args,
14371                                         (explain_p
14372                                          ? tf_warning_or_error
14373                                          : tf_none));
14374       processing_template_decl -= incomplete;
14375
14376       if (fntype == error_mark_node)
14377         return 1;
14378
14379       /* Place the explicitly specified arguments in TARGS.  */
14380       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14381         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14382     }
14383
14384   /* Never do unification on the 'this' parameter.  */
14385   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14386
14387   if (return_type)
14388     {
14389       tree *new_args;
14390
14391       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14392       new_args = XALLOCAVEC (tree, nargs + 1);
14393       new_args[0] = return_type;
14394       memcpy (new_args + 1, args, nargs * sizeof (tree));
14395       args = new_args;
14396       ++nargs;
14397     }
14398
14399   /* We allow incomplete unification without an error message here
14400      because the standard doesn't seem to explicitly prohibit it.  Our
14401      callers must be ready to deal with unification failures in any
14402      event.  */
14403   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14404                                   targs, parms, args, nargs, /*subr=*/0,
14405                                   strict, flags, explain_p);
14406
14407   /* Now that we have bindings for all of the template arguments,
14408      ensure that the arguments deduced for the template template
14409      parameters have compatible template parameter lists.  We cannot
14410      check this property before we have deduced all template
14411      arguments, because the template parameter types of a template
14412      template parameter might depend on prior template parameters
14413      deduced after the template template parameter.  The following
14414      ill-formed example illustrates this issue:
14415
14416        template<typename T, template<T> class C> void f(C<5>, T);
14417
14418        template<int N> struct X {};
14419
14420        void g() {
14421          f(X<5>(), 5l); // error: template argument deduction fails
14422        }
14423
14424      The template parameter list of 'C' depends on the template type
14425      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14426      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14427      time that we deduce 'C'.  */
14428   if (result == 0
14429       && !template_template_parm_bindings_ok_p 
14430            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14431     return unify_inconsistent_template_template_parameters (explain_p);
14432
14433   if (result == 0)
14434     /* All is well so far.  Now, check:
14435
14436        [temp.deduct]
14437
14438        When all template arguments have been deduced, all uses of
14439        template parameters in nondeduced contexts are replaced with
14440        the corresponding deduced argument values.  If the
14441        substitution results in an invalid type, as described above,
14442        type deduction fails.  */
14443     {
14444       tree substed = deduction_tsubst_fntype (fn, targs,
14445                                               (explain_p
14446                                                ? tf_warning_or_error
14447                                                : tf_none));
14448       if (substed == error_mark_node)
14449         return 1;
14450
14451       /* If we're looking for an exact match, check that what we got
14452          is indeed an exact match.  It might not be if some template
14453          parameters are used in non-deduced contexts.  */
14454       if (strict == DEDUCE_EXACT)
14455         {
14456           unsigned int i;
14457
14458           tree sarg
14459             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14460           if (return_type)
14461             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14462           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14463             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14464               return unify_type_mismatch (explain_p, args[i],
14465                                           TREE_VALUE (sarg));
14466         }
14467     }
14468
14469   return result;
14470 }
14471
14472 /* Adjust types before performing type deduction, as described in
14473    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14474    sections are symmetric.  PARM is the type of a function parameter
14475    or the return type of the conversion function.  ARG is the type of
14476    the argument passed to the call, or the type of the value
14477    initialized with the result of the conversion function.
14478    ARG_EXPR is the original argument expression, which may be null.  */
14479
14480 static int
14481 maybe_adjust_types_for_deduction (unification_kind_t strict,
14482                                   tree* parm,
14483                                   tree* arg,
14484                                   tree arg_expr)
14485 {
14486   int result = 0;
14487
14488   switch (strict)
14489     {
14490     case DEDUCE_CALL:
14491       break;
14492
14493     case DEDUCE_CONV:
14494       {
14495         /* Swap PARM and ARG throughout the remainder of this
14496            function; the handling is precisely symmetric since PARM
14497            will initialize ARG rather than vice versa.  */
14498         tree* temp = parm;
14499         parm = arg;
14500         arg = temp;
14501         break;
14502       }
14503
14504     case DEDUCE_EXACT:
14505       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14506          too, but here handle it by stripping the reference from PARM
14507          rather than by adding it to ARG.  */
14508       if (TREE_CODE (*parm) == REFERENCE_TYPE
14509           && TYPE_REF_IS_RVALUE (*parm)
14510           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14511           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14512           && TREE_CODE (*arg) == REFERENCE_TYPE
14513           && !TYPE_REF_IS_RVALUE (*arg))
14514         *parm = TREE_TYPE (*parm);
14515       /* Nothing else to do in this case.  */
14516       return 0;
14517
14518     default:
14519       gcc_unreachable ();
14520     }
14521
14522   if (TREE_CODE (*parm) != REFERENCE_TYPE)
14523     {
14524       /* [temp.deduct.call]
14525
14526          If P is not a reference type:
14527
14528          --If A is an array type, the pointer type produced by the
14529          array-to-pointer standard conversion (_conv.array_) is
14530          used in place of A for type deduction; otherwise,
14531
14532          --If A is a function type, the pointer type produced by
14533          the function-to-pointer standard conversion
14534          (_conv.func_) is used in place of A for type deduction;
14535          otherwise,
14536
14537          --If A is a cv-qualified type, the top level
14538          cv-qualifiers of A's type are ignored for type
14539          deduction.  */
14540       if (TREE_CODE (*arg) == ARRAY_TYPE)
14541         *arg = build_pointer_type (TREE_TYPE (*arg));
14542       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
14543         *arg = build_pointer_type (*arg);
14544       else
14545         *arg = TYPE_MAIN_VARIANT (*arg);
14546     }
14547
14548   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
14549      of the form T&&, where T is a template parameter, and the argument
14550      is an lvalue, T is deduced as A& */
14551   if (TREE_CODE (*parm) == REFERENCE_TYPE
14552       && TYPE_REF_IS_RVALUE (*parm)
14553       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14554       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14555       && (arg_expr ? real_lvalue_p (arg_expr)
14556           /* try_one_overload doesn't provide an arg_expr, but
14557              functions are always lvalues.  */
14558           : TREE_CODE (*arg) == FUNCTION_TYPE))
14559     *arg = build_reference_type (*arg);
14560
14561   /* [temp.deduct.call]
14562
14563      If P is a cv-qualified type, the top level cv-qualifiers
14564      of P's type are ignored for type deduction.  If P is a
14565      reference type, the type referred to by P is used for
14566      type deduction.  */
14567   *parm = TYPE_MAIN_VARIANT (*parm);
14568   if (TREE_CODE (*parm) == REFERENCE_TYPE)
14569     {
14570       *parm = TREE_TYPE (*parm);
14571       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14572     }
14573
14574   /* DR 322. For conversion deduction, remove a reference type on parm
14575      too (which has been swapped into ARG).  */
14576   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
14577     *arg = TREE_TYPE (*arg);
14578
14579   return result;
14580 }
14581
14582 /* Most parms like fn_type_unification.
14583
14584    If SUBR is 1, we're being called recursively (to unify the
14585    arguments of a function or method parameter of a function
14586    template). */
14587
14588 static int
14589 type_unification_real (tree tparms,
14590                        tree targs,
14591                        tree xparms,
14592                        const tree *xargs,
14593                        unsigned int xnargs,
14594                        int subr,
14595                        unification_kind_t strict,
14596                        int flags,
14597                        bool explain_p)
14598 {
14599   tree parm, arg, arg_expr;
14600   int i;
14601   int ntparms = TREE_VEC_LENGTH (tparms);
14602   int sub_strict;
14603   int saw_undeduced = 0;
14604   tree parms;
14605   const tree *args;
14606   unsigned int nargs;
14607   unsigned int ia;
14608
14609   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
14610   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
14611   gcc_assert (ntparms > 0);
14612
14613   /* Reset the number of non-defaulted template arguments contained
14614      in TARGS.  */
14615   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
14616
14617   switch (strict)
14618     {
14619     case DEDUCE_CALL:
14620       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
14621                     | UNIFY_ALLOW_DERIVED);
14622       break;
14623
14624     case DEDUCE_CONV:
14625       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14626       break;
14627
14628     case DEDUCE_EXACT:
14629       sub_strict = UNIFY_ALLOW_NONE;
14630       break;
14631
14632     default:
14633       gcc_unreachable ();
14634     }
14635
14636  again:
14637   parms = xparms;
14638   args = xargs;
14639   nargs = xnargs;
14640
14641   ia = 0;
14642   while (parms && parms != void_list_node
14643          && ia < nargs)
14644     {
14645       parm = TREE_VALUE (parms);
14646
14647       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
14648           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
14649         /* For a function parameter pack that occurs at the end of the
14650            parameter-declaration-list, the type A of each remaining
14651            argument of the call is compared with the type P of the
14652            declarator-id of the function parameter pack.  */
14653         break;
14654
14655       parms = TREE_CHAIN (parms);
14656
14657       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
14658         /* For a function parameter pack that does not occur at the
14659            end of the parameter-declaration-list, the type of the
14660            parameter pack is a non-deduced context.  */
14661         continue;
14662
14663       arg = args[ia];
14664       ++ia;
14665       arg_expr = NULL;
14666
14667       if (arg == error_mark_node)
14668         return unify_invalid (explain_p);
14669       if (arg == unknown_type_node)
14670         /* We can't deduce anything from this, but we might get all the
14671            template args from other function args.  */
14672         continue;
14673
14674       /* Conversions will be performed on a function argument that
14675          corresponds with a function parameter that contains only
14676          non-deducible template parameters and explicitly specified
14677          template parameters.  */
14678       if (!uses_template_parms (parm))
14679         {
14680           tree type;
14681
14682           if (!TYPE_P (arg))
14683             type = TREE_TYPE (arg);
14684           else
14685             type = arg;
14686
14687           if (same_type_p (parm, type))
14688             continue;
14689           if (strict != DEDUCE_EXACT
14690               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
14691                                   flags))
14692             continue;
14693
14694           if (strict == DEDUCE_EXACT)
14695             return unify_type_mismatch (explain_p, parm, arg);
14696           else
14697             return unify_arg_conversion (explain_p, parm, type, arg);
14698         }
14699
14700       if (!TYPE_P (arg))
14701         {
14702           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14703           if (type_unknown_p (arg))
14704             {
14705               /* [temp.deduct.type] 
14706
14707                  A template-argument can be deduced from a pointer to
14708                  function or pointer to member function argument if
14709                  the set of overloaded functions does not contain
14710                  function templates and at most one of a set of
14711                  overloaded functions provides a unique match.  */
14712               if (resolve_overloaded_unification
14713                   (tparms, targs, parm, arg, strict, sub_strict, explain_p))
14714                 continue;
14715
14716               return unify_overload_resolution_failure (explain_p, arg);
14717             }
14718           arg_expr = arg;
14719           arg = unlowered_expr_type (arg);
14720           if (arg == error_mark_node)
14721             return unify_invalid (explain_p);
14722         }
14723
14724       {
14725         int arg_strict = sub_strict;
14726
14727         if (!subr)
14728           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
14729                                                           arg_expr);
14730
14731         if (arg == init_list_type_node && arg_expr)
14732           arg = arg_expr;
14733         if (unify (tparms, targs, parm, arg, arg_strict, explain_p))
14734           /* If unification failed, the recursive call will have updated
14735              UI appropriately.  */
14736           return 1;
14737       }
14738     }
14739
14740
14741   if (parms 
14742       && parms != void_list_node
14743       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14744     {
14745       /* Unify the remaining arguments with the pack expansion type.  */
14746       tree argvec;
14747       tree parmvec = make_tree_vec (1);
14748
14749       /* Allocate a TREE_VEC and copy in all of the arguments */ 
14750       argvec = make_tree_vec (nargs - ia);
14751       for (i = 0; ia < nargs; ++ia, ++i)
14752         TREE_VEC_ELT (argvec, i) = args[ia];
14753
14754       /* Copy the parameter into parmvec.  */
14755       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
14756       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
14757                                 /*call_args_p=*/true, /*subr=*/subr, explain_p))
14758         return 1;
14759
14760       /* Advance to the end of the list of parameters.  */
14761       parms = TREE_CHAIN (parms);
14762     }
14763
14764   /* Fail if we've reached the end of the parm list, and more args
14765      are present, and the parm list isn't variadic.  */
14766   if (ia < nargs && parms == void_list_node)
14767     return unify_too_many_arguments (explain_p, nargs, ia);
14768   /* Fail if parms are left and they don't have default values.  */
14769   if (parms && parms != void_list_node
14770       && TREE_PURPOSE (parms) == NULL_TREE)
14771     {
14772       unsigned int count = nargs;
14773       tree p = parms;
14774       while (p && p != void_list_node)
14775         {
14776           count++;
14777           p = TREE_CHAIN (p);
14778         }
14779       return unify_too_few_arguments (explain_p, ia, count);
14780     }
14781
14782   if (!subr)
14783     {
14784       /* Check to see if we need another pass before we start clearing
14785          ARGUMENT_PACK_INCOMPLETE_P.  */
14786       for (i = 0; i < ntparms; i++)
14787         {
14788           tree targ = TREE_VEC_ELT (targs, i);
14789           tree tparm = TREE_VEC_ELT (tparms, i);
14790
14791           if (targ || tparm == error_mark_node)
14792             continue;
14793           tparm = TREE_VALUE (tparm);
14794
14795           /* If this is an undeduced nontype parameter that depends on
14796              a type parameter, try another pass; its type may have been
14797              deduced from a later argument than the one from which
14798              this parameter can be deduced.  */
14799           if (TREE_CODE (tparm) == PARM_DECL
14800               && uses_template_parms (TREE_TYPE (tparm))
14801               && !saw_undeduced++)
14802             goto again;
14803         }
14804
14805       for (i = 0; i < ntparms; i++)
14806         {
14807           tree targ = TREE_VEC_ELT (targs, i);
14808           tree tparm = TREE_VEC_ELT (tparms, i);
14809
14810           /* Clear the "incomplete" flags on all argument packs now so that
14811              substituting them into later default arguments works.  */
14812           if (targ && ARGUMENT_PACK_P (targ))
14813             {
14814               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
14815               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
14816             }
14817
14818           if (targ || tparm == error_mark_node)
14819             continue;
14820           tparm = TREE_VALUE (tparm);
14821
14822           /* Core issue #226 (C++0x) [temp.deduct]:
14823
14824              If a template argument has not been deduced, its
14825              default template argument, if any, is used. 
14826
14827              When we are in C++98 mode, TREE_PURPOSE will either
14828              be NULL_TREE or ERROR_MARK_NODE, so we do not need
14829              to explicitly check cxx_dialect here.  */
14830           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
14831             {
14832               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14833               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
14834               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
14835               arg = convert_template_argument (parm, arg, targs,
14836                                                (explain_p
14837                                                 ? tf_warning_or_error
14838                                                 : tf_none),
14839                                                i, NULL_TREE);
14840               if (arg == error_mark_node)
14841                 return 1;
14842               else
14843                 {
14844                   TREE_VEC_ELT (targs, i) = arg;
14845                   /* The position of the first default template argument,
14846                      is also the number of non-defaulted arguments in TARGS.
14847                      Record that.  */
14848                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14849                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
14850                   continue;
14851                 }
14852             }
14853
14854           /* If the type parameter is a parameter pack, then it will
14855              be deduced to an empty parameter pack.  */
14856           if (template_parameter_pack_p (tparm))
14857             {
14858               tree arg;
14859
14860               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
14861                 {
14862                   arg = make_node (NONTYPE_ARGUMENT_PACK);
14863                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
14864                   TREE_CONSTANT (arg) = 1;
14865                 }
14866               else
14867                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
14868
14869               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
14870
14871               TREE_VEC_ELT (targs, i) = arg;
14872               continue;
14873             }
14874
14875           return unify_parameter_deduction_failure (explain_p, tparm);
14876         }
14877     }
14878 #ifdef ENABLE_CHECKING
14879   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14880     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
14881 #endif
14882
14883   return unify_success (explain_p);
14884 }
14885
14886 /* Subroutine of type_unification_real.  Args are like the variables
14887    at the call site.  ARG is an overloaded function (or template-id);
14888    we try deducing template args from each of the overloads, and if
14889    only one succeeds, we go with that.  Modifies TARGS and returns
14890    true on success.  */
14891
14892 static bool
14893 resolve_overloaded_unification (tree tparms,
14894                                 tree targs,
14895                                 tree parm,
14896                                 tree arg,
14897                                 unification_kind_t strict,
14898                                 int sub_strict,
14899                                 bool explain_p)
14900 {
14901   tree tempargs = copy_node (targs);
14902   int good = 0;
14903   tree goodfn = NULL_TREE;
14904   bool addr_p;
14905
14906   if (TREE_CODE (arg) == ADDR_EXPR)
14907     {
14908       arg = TREE_OPERAND (arg, 0);
14909       addr_p = true;
14910     }
14911   else
14912     addr_p = false;
14913
14914   if (TREE_CODE (arg) == COMPONENT_REF)
14915     /* Handle `&x' where `x' is some static or non-static member
14916        function name.  */
14917     arg = TREE_OPERAND (arg, 1);
14918
14919   if (TREE_CODE (arg) == OFFSET_REF)
14920     arg = TREE_OPERAND (arg, 1);
14921
14922   /* Strip baselink information.  */
14923   if (BASELINK_P (arg))
14924     arg = BASELINK_FUNCTIONS (arg);
14925
14926   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
14927     {
14928       /* If we got some explicit template args, we need to plug them into
14929          the affected templates before we try to unify, in case the
14930          explicit args will completely resolve the templates in question.  */
14931
14932       int ok = 0;
14933       tree expl_subargs = TREE_OPERAND (arg, 1);
14934       arg = TREE_OPERAND (arg, 0);
14935
14936       for (; arg; arg = OVL_NEXT (arg))
14937         {
14938           tree fn = OVL_CURRENT (arg);
14939           tree subargs, elem;
14940
14941           if (TREE_CODE (fn) != TEMPLATE_DECL)
14942             continue;
14943
14944           ++processing_template_decl;
14945           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14946                                   expl_subargs, /*check_ret=*/false);
14947           if (subargs && !any_dependent_template_arguments_p (subargs))
14948             {
14949               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
14950               if (try_one_overload (tparms, targs, tempargs, parm,
14951                                     elem, strict, sub_strict, addr_p, explain_p)
14952                   && (!goodfn || !decls_match (goodfn, elem)))
14953                 {
14954                   goodfn = elem;
14955                   ++good;
14956                 }
14957             }
14958           else if (subargs)
14959             ++ok;
14960           --processing_template_decl;
14961         }
14962       /* If no templates (or more than one) are fully resolved by the
14963          explicit arguments, this template-id is a non-deduced context; it
14964          could still be OK if we deduce all template arguments for the
14965          enclosing call through other arguments.  */
14966       if (good != 1)
14967         good = ok;
14968     }
14969   else if (TREE_CODE (arg) != OVERLOAD
14970            && TREE_CODE (arg) != FUNCTION_DECL)
14971     /* If ARG is, for example, "(0, &f)" then its type will be unknown
14972        -- but the deduction does not succeed because the expression is
14973        not just the function on its own.  */
14974     return false;
14975   else
14976     for (; arg; arg = OVL_NEXT (arg))
14977       if (try_one_overload (tparms, targs, tempargs, parm,
14978                             TREE_TYPE (OVL_CURRENT (arg)),
14979                             strict, sub_strict, addr_p, explain_p)
14980           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
14981         {
14982           goodfn = OVL_CURRENT (arg);
14983           ++good;
14984         }
14985
14986   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14987      to function or pointer to member function argument if the set of
14988      overloaded functions does not contain function templates and at most
14989      one of a set of overloaded functions provides a unique match.
14990
14991      So if we found multiple possibilities, we return success but don't
14992      deduce anything.  */
14993
14994   if (good == 1)
14995     {
14996       int i = TREE_VEC_LENGTH (targs);
14997       for (; i--; )
14998         if (TREE_VEC_ELT (tempargs, i))
14999           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15000     }
15001   if (good)
15002     return true;
15003
15004   return false;
15005 }
15006
15007 /* Core DR 115: In contexts where deduction is done and fails, or in
15008    contexts where deduction is not done, if a template argument list is
15009    specified and it, along with any default template arguments, identifies
15010    a single function template specialization, then the template-id is an
15011    lvalue for the function template specialization.  */
15012
15013 tree
15014 resolve_nondeduced_context (tree orig_expr)
15015 {
15016   tree expr, offset, baselink;
15017   bool addr;
15018
15019   if (!type_unknown_p (orig_expr))
15020     return orig_expr;
15021
15022   expr = orig_expr;
15023   addr = false;
15024   offset = NULL_TREE;
15025   baselink = NULL_TREE;
15026
15027   if (TREE_CODE (expr) == ADDR_EXPR)
15028     {
15029       expr = TREE_OPERAND (expr, 0);
15030       addr = true;
15031     }
15032   if (TREE_CODE (expr) == OFFSET_REF)
15033     {
15034       offset = expr;
15035       expr = TREE_OPERAND (expr, 1);
15036     }
15037   if (TREE_CODE (expr) == BASELINK)
15038     {
15039       baselink = expr;
15040       expr = BASELINK_FUNCTIONS (expr);
15041     }
15042
15043   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15044     {
15045       int good = 0;
15046       tree goodfn = NULL_TREE;
15047
15048       /* If we got some explicit template args, we need to plug them into
15049          the affected templates before we try to unify, in case the
15050          explicit args will completely resolve the templates in question.  */
15051
15052       tree expl_subargs = TREE_OPERAND (expr, 1);
15053       tree arg = TREE_OPERAND (expr, 0);
15054       tree badfn = NULL_TREE;
15055       tree badargs = NULL_TREE;
15056
15057       for (; arg; arg = OVL_NEXT (arg))
15058         {
15059           tree fn = OVL_CURRENT (arg);
15060           tree subargs, elem;
15061
15062           if (TREE_CODE (fn) != TEMPLATE_DECL)
15063             continue;
15064
15065           ++processing_template_decl;
15066           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15067                                   expl_subargs, /*check_ret=*/false);
15068           if (subargs && !any_dependent_template_arguments_p (subargs))
15069             {
15070               elem = instantiate_template (fn, subargs, tf_none);
15071               if (elem == error_mark_node)
15072                 {
15073                   badfn = fn;
15074                   badargs = subargs;
15075                 }
15076               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15077                 {
15078                   goodfn = elem;
15079                   ++good;
15080                 }
15081             }
15082           --processing_template_decl;
15083         }
15084       if (good == 1)
15085         {
15086           mark_used (goodfn);
15087           expr = goodfn;
15088           if (baselink)
15089             expr = build_baselink (BASELINK_BINFO (baselink),
15090                                    BASELINK_ACCESS_BINFO (baselink),
15091                                    expr, BASELINK_OPTYPE (baselink));
15092           if (offset)
15093             {
15094               tree base
15095                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15096               expr = build_offset_ref (base, expr, addr);
15097             }
15098           if (addr)
15099             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15100           return expr;
15101         }
15102       else if (good == 0 && badargs)
15103         /* There were no good options and at least one bad one, so let the
15104            user know what the problem is.  */
15105         instantiate_template (badfn, badargs, tf_warning_or_error);
15106     }
15107   return orig_expr;
15108 }
15109
15110 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15111    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15112    different overloads deduce different arguments for a given parm.
15113    ADDR_P is true if the expression for which deduction is being
15114    performed was of the form "& fn" rather than simply "fn".
15115
15116    Returns 1 on success.  */
15117
15118 static int
15119 try_one_overload (tree tparms,
15120                   tree orig_targs,
15121                   tree targs,
15122                   tree parm,
15123                   tree arg,
15124                   unification_kind_t strict,
15125                   int sub_strict,
15126                   bool addr_p,
15127                   bool explain_p)
15128 {
15129   int nargs;
15130   tree tempargs;
15131   int i;
15132
15133   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15134      to function or pointer to member function argument if the set of
15135      overloaded functions does not contain function templates and at most
15136      one of a set of overloaded functions provides a unique match.
15137
15138      So if this is a template, just return success.  */
15139
15140   if (uses_template_parms (arg))
15141     return 1;
15142
15143   if (TREE_CODE (arg) == METHOD_TYPE)
15144     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15145   else if (addr_p)
15146     arg = build_pointer_type (arg);
15147
15148   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15149
15150   /* We don't copy orig_targs for this because if we have already deduced
15151      some template args from previous args, unify would complain when we
15152      try to deduce a template parameter for the same argument, even though
15153      there isn't really a conflict.  */
15154   nargs = TREE_VEC_LENGTH (targs);
15155   tempargs = make_tree_vec (nargs);
15156
15157   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15158     return 0;
15159
15160   /* First make sure we didn't deduce anything that conflicts with
15161      explicitly specified args.  */
15162   for (i = nargs; i--; )
15163     {
15164       tree elt = TREE_VEC_ELT (tempargs, i);
15165       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15166
15167       if (!elt)
15168         /*NOP*/;
15169       else if (uses_template_parms (elt))
15170         /* Since we're unifying against ourselves, we will fill in
15171            template args used in the function parm list with our own
15172            template parms.  Discard them.  */
15173         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15174       else if (oldelt && !template_args_equal (oldelt, elt))
15175         return 0;
15176     }
15177
15178   for (i = nargs; i--; )
15179     {
15180       tree elt = TREE_VEC_ELT (tempargs, i);
15181
15182       if (elt)
15183         TREE_VEC_ELT (targs, i) = elt;
15184     }
15185
15186   return 1;
15187 }
15188
15189 /* PARM is a template class (perhaps with unbound template
15190    parameters).  ARG is a fully instantiated type.  If ARG can be
15191    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15192    TARGS are as for unify.  */
15193
15194 static tree
15195 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15196                        bool explain_p)
15197 {
15198   tree copy_of_targs;
15199
15200   if (!CLASSTYPE_TEMPLATE_INFO (arg)
15201       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15202           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15203     return NULL_TREE;
15204
15205   /* We need to make a new template argument vector for the call to
15206      unify.  If we used TARGS, we'd clutter it up with the result of
15207      the attempted unification, even if this class didn't work out.
15208      We also don't want to commit ourselves to all the unifications
15209      we've already done, since unification is supposed to be done on
15210      an argument-by-argument basis.  In other words, consider the
15211      following pathological case:
15212
15213        template <int I, int J, int K>
15214        struct S {};
15215
15216        template <int I, int J>
15217        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15218
15219        template <int I, int J, int K>
15220        void f(S<I, J, K>, S<I, I, I>);
15221
15222        void g() {
15223          S<0, 0, 0> s0;
15224          S<0, 1, 2> s2;
15225
15226          f(s0, s2);
15227        }
15228
15229      Now, by the time we consider the unification involving `s2', we
15230      already know that we must have `f<0, 0, 0>'.  But, even though
15231      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15232      because there are two ways to unify base classes of S<0, 1, 2>
15233      with S<I, I, I>.  If we kept the already deduced knowledge, we
15234      would reject the possibility I=1.  */
15235   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15236
15237   /* If unification failed, we're done.  */
15238   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15239              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15240     return NULL_TREE;
15241
15242   return arg;
15243 }
15244
15245 /* Given a template type PARM and a class type ARG, find the unique
15246    base type in ARG that is an instance of PARM.  We do not examine
15247    ARG itself; only its base-classes.  If there is not exactly one
15248    appropriate base class, return NULL_TREE.  PARM may be the type of
15249    a partial specialization, as well as a plain template type.  Used
15250    by unify.  */
15251
15252 static enum template_base_result
15253 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15254                    bool explain_p, tree *result)
15255 {
15256   tree rval = NULL_TREE;
15257   tree binfo;
15258
15259   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15260
15261   binfo = TYPE_BINFO (complete_type (arg));
15262   if (!binfo)
15263     {
15264       /* The type could not be completed.  */
15265       *result = NULL_TREE;
15266       return tbr_incomplete_type;
15267     }
15268
15269   /* Walk in inheritance graph order.  The search order is not
15270      important, and this avoids multiple walks of virtual bases.  */
15271   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15272     {
15273       tree r = try_class_unification (tparms, targs, parm,
15274                                       BINFO_TYPE (binfo), explain_p);
15275
15276       if (r)
15277         {
15278           /* If there is more than one satisfactory baseclass, then:
15279
15280                [temp.deduct.call]
15281
15282               If they yield more than one possible deduced A, the type
15283               deduction fails.
15284
15285              applies.  */
15286           if (rval && !same_type_p (r, rval))
15287             {
15288               *result = NULL_TREE;
15289               return tbr_ambiguous_baseclass;
15290             }
15291
15292           rval = r;
15293         }
15294     }
15295
15296   *result = rval;
15297   return tbr_success;
15298 }
15299
15300 /* Returns the level of DECL, which declares a template parameter.  */
15301
15302 static int
15303 template_decl_level (tree decl)
15304 {
15305   switch (TREE_CODE (decl))
15306     {
15307     case TYPE_DECL:
15308     case TEMPLATE_DECL:
15309       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15310
15311     case PARM_DECL:
15312       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15313
15314     default:
15315       gcc_unreachable ();
15316     }
15317   return 0;
15318 }
15319
15320 /* Decide whether ARG can be unified with PARM, considering only the
15321    cv-qualifiers of each type, given STRICT as documented for unify.
15322    Returns nonzero iff the unification is OK on that basis.  */
15323
15324 static int
15325 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15326 {
15327   int arg_quals = cp_type_quals (arg);
15328   int parm_quals = cp_type_quals (parm);
15329
15330   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15331       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15332     {
15333       /*  Although a CVR qualifier is ignored when being applied to a
15334           substituted template parameter ([8.3.2]/1 for example), that
15335           does not allow us to unify "const T" with "int&" because both
15336           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15337           It is ok when we're allowing additional CV qualifiers
15338           at the outer level [14.8.2.1]/3,1st bullet.  */
15339       if ((TREE_CODE (arg) == REFERENCE_TYPE
15340            || TREE_CODE (arg) == FUNCTION_TYPE
15341            || TREE_CODE (arg) == METHOD_TYPE)
15342           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15343         return 0;
15344
15345       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15346           && (parm_quals & TYPE_QUAL_RESTRICT))
15347         return 0;
15348     }
15349
15350   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15351       && (arg_quals & parm_quals) != parm_quals)
15352     return 0;
15353
15354   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15355       && (parm_quals & arg_quals) != arg_quals)
15356     return 0;
15357
15358   return 1;
15359 }
15360
15361 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
15362 void 
15363 template_parm_level_and_index (tree parm, int* level, int* index)
15364 {
15365   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15366       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15367       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15368     {
15369       *index = TEMPLATE_TYPE_IDX (parm);
15370       *level = TEMPLATE_TYPE_LEVEL (parm);
15371     }
15372   else
15373     {
15374       *index = TEMPLATE_PARM_IDX (parm);
15375       *level = TEMPLATE_PARM_LEVEL (parm);
15376     }
15377 }
15378
15379 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15380   do {                                                                  \
15381     if (unify (TP, TA, P, A, S, EP))                                    \
15382       return 1;                                                         \
15383   } while (0);
15384
15385 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15386    expansion at the end of PACKED_PARMS. Returns 0 if the type
15387    deduction succeeds, 1 otherwise. STRICT is the same as in
15388    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15389    call argument list. We'll need to adjust the arguments to make them
15390    types. SUBR tells us if this is from a recursive call to
15391    type_unification_real.  */
15392 static int
15393 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15394                       tree packed_args, int strict, bool call_args_p,
15395                       bool subr, bool explain_p)
15396 {
15397   tree parm 
15398     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15399   tree pattern = PACK_EXPANSION_PATTERN (parm);
15400   tree pack, packs = NULL_TREE;
15401   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15402   int len = TREE_VEC_LENGTH (packed_args);
15403
15404   /* Determine the parameter packs we will be deducing from the
15405      pattern, and record their current deductions.  */
15406   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15407        pack; pack = TREE_CHAIN (pack))
15408     {
15409       tree parm_pack = TREE_VALUE (pack);
15410       int idx, level;
15411
15412       /* Determine the index and level of this parameter pack.  */
15413       template_parm_level_and_index (parm_pack, &level, &idx);
15414
15415       /* Keep track of the parameter packs and their corresponding
15416          argument packs.  */
15417       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15418       TREE_TYPE (packs) = make_tree_vec (len - start);
15419     }
15420   
15421   /* Loop through all of the arguments that have not yet been
15422      unified and unify each with the pattern.  */
15423   for (i = start; i < len; i++)
15424     {
15425       tree parm = pattern;
15426
15427       /* For each parameter pack, clear out the deduced value so that
15428          we can deduce it again.  */
15429       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15430         {
15431           int idx, level;
15432           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15433
15434           TMPL_ARG (targs, level, idx) = NULL_TREE;
15435         }
15436
15437       /* Unify the pattern with the current argument.  */
15438       {
15439         tree arg = TREE_VEC_ELT (packed_args, i);
15440         tree arg_expr = NULL_TREE;
15441         int arg_strict = strict;
15442
15443         if (call_args_p)
15444           {
15445             int sub_strict;
15446
15447             /* This mirrors what we do in type_unification_real.  */
15448             switch (strict)
15449               {
15450               case DEDUCE_CALL:
15451                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
15452                               | UNIFY_ALLOW_MORE_CV_QUAL
15453                               | UNIFY_ALLOW_DERIVED);
15454                 break;
15455                 
15456               case DEDUCE_CONV:
15457                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15458                 break;
15459                 
15460               case DEDUCE_EXACT:
15461                 sub_strict = UNIFY_ALLOW_NONE;
15462                 break;
15463                 
15464               default:
15465                 gcc_unreachable ();
15466               }
15467
15468             if (!TYPE_P (arg))
15469               {
15470                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15471                 if (type_unknown_p (arg))
15472                   {
15473                     /* [temp.deduct.type] A template-argument can be
15474                        deduced from a pointer to function or pointer
15475                        to member function argument if the set of
15476                        overloaded functions does not contain function
15477                        templates and at most one of a set of
15478                        overloaded functions provides a unique
15479                        match.  */
15480
15481                     if (resolve_overloaded_unification
15482                         (tparms, targs, parm, arg,
15483                          (unification_kind_t) strict,
15484                          sub_strict, explain_p))
15485                       goto unified;
15486                     return unify_overload_resolution_failure (explain_p, arg);
15487                   }
15488
15489                 arg_expr = arg;
15490                 arg = unlowered_expr_type (arg);
15491                 if (arg == error_mark_node)
15492                   return unify_invalid (explain_p);
15493               }
15494       
15495             arg_strict = sub_strict;
15496
15497             if (!subr)
15498               arg_strict |= 
15499                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
15500                                                   &parm, &arg, arg_expr);
15501           }
15502
15503         /* For deduction from an init-list we need the actual list.  */
15504         if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15505           arg = arg_expr;
15506         RECUR_AND_CHECK_FAILURE (tparms, targs, parm, arg, arg_strict,
15507                                  explain_p);
15508       }
15509
15510     unified:
15511       /* For each parameter pack, collect the deduced value.  */
15512       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15513         {
15514           int idx, level;
15515           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15516
15517           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
15518             TMPL_ARG (targs, level, idx);
15519         }
15520     }
15521
15522   /* Verify that the results of unification with the parameter packs
15523      produce results consistent with what we've seen before, and make
15524      the deduced argument packs available.  */
15525   for (pack = packs; pack; pack = TREE_CHAIN (pack))
15526     {
15527       tree old_pack = TREE_VALUE (pack);
15528       tree new_args = TREE_TYPE (pack);
15529       int i, len = TREE_VEC_LENGTH (new_args);
15530       int idx, level;
15531       bool nondeduced_p = false;
15532
15533       /* By default keep the original deduced argument pack.
15534          If necessary, more specific code is going to update the
15535          resulting deduced argument later down in this function.  */
15536       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15537       TMPL_ARG (targs, level, idx) = old_pack;
15538
15539       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
15540          actually deduce anything.  */
15541       for (i = 0; i < len && !nondeduced_p; ++i)
15542         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
15543           nondeduced_p = true;
15544       if (nondeduced_p)
15545         continue;
15546
15547       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
15548         {
15549           /* Prepend the explicit arguments onto NEW_ARGS.  */
15550           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15551           tree old_args = new_args;
15552           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
15553           int len = explicit_len + TREE_VEC_LENGTH (old_args);
15554
15555           /* Copy the explicit arguments.  */
15556           new_args = make_tree_vec (len);
15557           for (i = 0; i < explicit_len; i++)
15558             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
15559
15560           /* Copy the deduced arguments.  */
15561           for (; i < len; i++)
15562             TREE_VEC_ELT (new_args, i) =
15563               TREE_VEC_ELT (old_args, i - explicit_len);
15564         }
15565
15566       if (!old_pack)
15567         {
15568           tree result;
15569           /* Build the deduced *_ARGUMENT_PACK.  */
15570           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
15571             {
15572               result = make_node (NONTYPE_ARGUMENT_PACK);
15573               TREE_TYPE (result) = 
15574                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
15575               TREE_CONSTANT (result) = 1;
15576             }
15577           else
15578             result = cxx_make_type (TYPE_ARGUMENT_PACK);
15579
15580           SET_ARGUMENT_PACK_ARGS (result, new_args);
15581
15582           /* Note the deduced argument packs for this parameter
15583              pack.  */
15584           TMPL_ARG (targs, level, idx) = result;
15585         }
15586       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
15587                && (ARGUMENT_PACK_ARGS (old_pack) 
15588                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
15589         {
15590           /* We only had the explicitly-provided arguments before, but
15591              now we have a complete set of arguments.  */
15592           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15593
15594           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
15595           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
15596           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
15597         }
15598       else
15599         {
15600           tree bad_old_arg, bad_new_arg;
15601           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
15602
15603           if (!comp_template_args_with_info (old_args, new_args,
15604                                              &bad_old_arg, &bad_new_arg))
15605             /* Inconsistent unification of this parameter pack.  */
15606             return unify_parameter_pack_inconsistent (explain_p,
15607                                                       bad_old_arg,
15608                                                       bad_new_arg);
15609         }
15610     }
15611
15612   return unify_success (explain_p);
15613 }
15614
15615 /* Deduce the value of template parameters.  TPARMS is the (innermost)
15616    set of template parameters to a template.  TARGS is the bindings
15617    for those template parameters, as determined thus far; TARGS may
15618    include template arguments for outer levels of template parameters
15619    as well.  PARM is a parameter to a template function, or a
15620    subcomponent of that parameter; ARG is the corresponding argument.
15621    This function attempts to match PARM with ARG in a manner
15622    consistent with the existing assignments in TARGS.  If more values
15623    are deduced, then TARGS is updated.
15624
15625    Returns 0 if the type deduction succeeds, 1 otherwise.  The
15626    parameter STRICT is a bitwise or of the following flags:
15627
15628      UNIFY_ALLOW_NONE:
15629        Require an exact match between PARM and ARG.
15630      UNIFY_ALLOW_MORE_CV_QUAL:
15631        Allow the deduced ARG to be more cv-qualified (by qualification
15632        conversion) than ARG.
15633      UNIFY_ALLOW_LESS_CV_QUAL:
15634        Allow the deduced ARG to be less cv-qualified than ARG.
15635      UNIFY_ALLOW_DERIVED:
15636        Allow the deduced ARG to be a template base class of ARG,
15637        or a pointer to a template base class of the type pointed to by
15638        ARG.
15639      UNIFY_ALLOW_INTEGER:
15640        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
15641        case for more information.
15642      UNIFY_ALLOW_OUTER_LEVEL:
15643        This is the outermost level of a deduction. Used to determine validity
15644        of qualification conversions. A valid qualification conversion must
15645        have const qualified pointers leading up to the inner type which
15646        requires additional CV quals, except at the outer level, where const
15647        is not required [conv.qual]. It would be normal to set this flag in
15648        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
15649      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
15650        This is the outermost level of a deduction, and PARM can be more CV
15651        qualified at this point.
15652      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
15653        This is the outermost level of a deduction, and PARM can be less CV
15654        qualified at this point.  */
15655
15656 static int
15657 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
15658        bool explain_p)
15659 {
15660   int idx;
15661   tree targ;
15662   tree tparm;
15663   int strict_in = strict;
15664
15665   /* I don't think this will do the right thing with respect to types.
15666      But the only case I've seen it in so far has been array bounds, where
15667      signedness is the only information lost, and I think that will be
15668      okay.  */
15669   while (TREE_CODE (parm) == NOP_EXPR)
15670     parm = TREE_OPERAND (parm, 0);
15671
15672   if (arg == error_mark_node)
15673     return unify_invalid (explain_p);
15674   if (arg == unknown_type_node
15675       || arg == init_list_type_node)
15676     /* We can't deduce anything from this, but we might get all the
15677        template args from other function args.  */
15678     return unify_success (explain_p);
15679
15680   /* If PARM uses template parameters, then we can't bail out here,
15681      even if ARG == PARM, since we won't record unifications for the
15682      template parameters.  We might need them if we're trying to
15683      figure out which of two things is more specialized.  */
15684   if (arg == parm && !uses_template_parms (parm))
15685     return unify_success (explain_p);
15686
15687   /* Handle init lists early, so the rest of the function can assume
15688      we're dealing with a type. */
15689   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
15690     {
15691       tree elt, elttype;
15692       unsigned i;
15693       tree orig_parm = parm;
15694
15695       /* Replace T with std::initializer_list<T> for deduction.  */
15696       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15697           && flag_deduce_init_list)
15698         parm = listify (parm);
15699
15700       if (!is_std_init_list (parm))
15701         /* We can only deduce from an initializer list argument if the
15702            parameter is std::initializer_list; otherwise this is a
15703            non-deduced context. */
15704         return unify_success (explain_p);
15705
15706       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
15707
15708       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
15709         {
15710           int elt_strict = strict;
15711
15712           if (elt == error_mark_node)
15713             return unify_invalid (explain_p);
15714
15715           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
15716             {
15717               tree type = TREE_TYPE (elt);
15718               /* It should only be possible to get here for a call.  */
15719               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
15720               elt_strict |= maybe_adjust_types_for_deduction
15721                 (DEDUCE_CALL, &elttype, &type, elt);
15722               elt = type;
15723             }
15724
15725           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
15726                                    explain_p);
15727         }
15728
15729       /* If the std::initializer_list<T> deduction worked, replace the
15730          deduced A with std::initializer_list<A>.  */
15731       if (orig_parm != parm)
15732         {
15733           idx = TEMPLATE_TYPE_IDX (orig_parm);
15734           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15735           targ = listify (targ);
15736           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
15737         }
15738       return unify_success (explain_p);
15739     }
15740
15741   /* Immediately reject some pairs that won't unify because of
15742      cv-qualification mismatches.  */
15743   if (TREE_CODE (arg) == TREE_CODE (parm)
15744       && TYPE_P (arg)
15745       /* It is the elements of the array which hold the cv quals of an array
15746          type, and the elements might be template type parms. We'll check
15747          when we recurse.  */
15748       && TREE_CODE (arg) != ARRAY_TYPE
15749       /* We check the cv-qualifiers when unifying with template type
15750          parameters below.  We want to allow ARG `const T' to unify with
15751          PARM `T' for example, when computing which of two templates
15752          is more specialized, for example.  */
15753       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
15754       && !check_cv_quals_for_unify (strict_in, arg, parm))
15755     return unify_cv_qual_mismatch (explain_p, parm, arg);
15756
15757   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
15758       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
15759     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
15760   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
15761   strict &= ~UNIFY_ALLOW_DERIVED;
15762   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15763   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
15764
15765   switch (TREE_CODE (parm))
15766     {
15767     case TYPENAME_TYPE:
15768     case SCOPE_REF:
15769     case UNBOUND_CLASS_TEMPLATE:
15770       /* In a type which contains a nested-name-specifier, template
15771          argument values cannot be deduced for template parameters used
15772          within the nested-name-specifier.  */
15773       return unify_success (explain_p);
15774
15775     case TEMPLATE_TYPE_PARM:
15776     case TEMPLATE_TEMPLATE_PARM:
15777     case BOUND_TEMPLATE_TEMPLATE_PARM:
15778       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15779       if (tparm == error_mark_node)
15780         return unify_invalid (explain_p);
15781
15782       if (TEMPLATE_TYPE_LEVEL (parm)
15783           != template_decl_level (tparm))
15784         /* The PARM is not one we're trying to unify.  Just check
15785            to see if it matches ARG.  */
15786         {
15787           if (TREE_CODE (arg) == TREE_CODE (parm)
15788               && same_type_p (parm, arg))
15789             return unify_success (explain_p);
15790           else
15791             return unify_type_mismatch (explain_p, parm, arg);
15792         }
15793       idx = TEMPLATE_TYPE_IDX (parm);
15794       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15795       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
15796
15797       /* Check for mixed types and values.  */
15798       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15799            && TREE_CODE (tparm) != TYPE_DECL)
15800           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15801               && TREE_CODE (tparm) != TEMPLATE_DECL))
15802         gcc_unreachable ();
15803
15804       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15805         {
15806           /* ARG must be constructed from a template class or a template
15807              template parameter.  */
15808           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
15809               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
15810             return unify_template_deduction_failure (explain_p, parm, arg);
15811
15812           {
15813             tree parmvec = TYPE_TI_ARGS (parm);
15814             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
15815             tree full_argvec = add_to_template_args (targs, argvec);
15816             tree parm_parms 
15817               = DECL_INNERMOST_TEMPLATE_PARMS
15818                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
15819             int i, len;
15820             int parm_variadic_p = 0;
15821
15822             /* The resolution to DR150 makes clear that default
15823                arguments for an N-argument may not be used to bind T
15824                to a template template parameter with fewer than N
15825                parameters.  It is not safe to permit the binding of
15826                default arguments as an extension, as that may change
15827                the meaning of a conforming program.  Consider:
15828
15829                   struct Dense { static const unsigned int dim = 1; };
15830
15831                   template <template <typename> class View,
15832                             typename Block>
15833                   void operator+(float, View<Block> const&);
15834
15835                   template <typename Block,
15836                             unsigned int Dim = Block::dim>
15837                   struct Lvalue_proxy { operator float() const; };
15838
15839                   void
15840                   test_1d (void) {
15841                     Lvalue_proxy<Dense> p;
15842                     float b;
15843                     b + p;
15844                   }
15845
15846               Here, if Lvalue_proxy is permitted to bind to View, then
15847               the global operator+ will be used; if they are not, the
15848               Lvalue_proxy will be converted to float.  */
15849             if (coerce_template_parms (parm_parms,
15850                                        full_argvec,
15851                                        TYPE_TI_TEMPLATE (parm),
15852                                        (explain_p
15853                                         ? tf_warning_or_error
15854                                         : tf_none),
15855                                        /*require_all_args=*/true,
15856                                        /*use_default_args=*/false)
15857                 == error_mark_node)
15858               return 1;
15859
15860             /* Deduce arguments T, i from TT<T> or TT<i>.
15861                We check each element of PARMVEC and ARGVEC individually
15862                rather than the whole TREE_VEC since they can have
15863                different number of elements.  */
15864
15865             parmvec = expand_template_argument_pack (parmvec);
15866             argvec = expand_template_argument_pack (argvec);
15867
15868             len = TREE_VEC_LENGTH (parmvec);
15869
15870             /* Check if the parameters end in a pack, making them
15871                variadic.  */
15872             if (len > 0
15873                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
15874               parm_variadic_p = 1;
15875             
15876             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
15877               return unify_too_few_arguments (explain_p,
15878                                               TREE_VEC_LENGTH (argvec), len);
15879
15880              for (i = 0; i < len - parm_variadic_p; ++i)
15881               {
15882                 RECUR_AND_CHECK_FAILURE (tparms, targs,
15883                                          TREE_VEC_ELT (parmvec, i),
15884                                          TREE_VEC_ELT (argvec, i),
15885                                          UNIFY_ALLOW_NONE, explain_p);
15886               }
15887
15888             if (parm_variadic_p
15889                 && unify_pack_expansion (tparms, targs,
15890                                          parmvec, argvec,
15891                                          UNIFY_ALLOW_NONE,
15892                                          /*call_args_p=*/false,
15893                                          /*subr=*/false, explain_p))
15894               return 1;
15895           }
15896           arg = TYPE_TI_TEMPLATE (arg);
15897
15898           /* Fall through to deduce template name.  */
15899         }
15900
15901       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15902           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15903         {
15904           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
15905
15906           /* Simple cases: Value already set, does match or doesn't.  */
15907           if (targ != NULL_TREE && template_args_equal (targ, arg))
15908             return unify_success (explain_p);
15909           else if (targ)
15910             return unify_inconsistency (explain_p, parm, targ, arg);
15911         }
15912       else
15913         {
15914           /* If PARM is `const T' and ARG is only `int', we don't have
15915              a match unless we are allowing additional qualification.
15916              If ARG is `const int' and PARM is just `T' that's OK;
15917              that binds `const int' to `T'.  */
15918           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
15919                                          arg, parm))
15920             return unify_cv_qual_mismatch (explain_p, parm, arg);
15921
15922           /* Consider the case where ARG is `const volatile int' and
15923              PARM is `const T'.  Then, T should be `volatile int'.  */
15924           arg = cp_build_qualified_type_real
15925             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
15926           if (arg == error_mark_node)
15927             return unify_invalid (explain_p);
15928
15929           /* Simple cases: Value already set, does match or doesn't.  */
15930           if (targ != NULL_TREE && same_type_p (targ, arg))
15931             return unify_success (explain_p);
15932           else if (targ)
15933             return unify_inconsistency (explain_p, parm, targ, arg);
15934
15935           /* Make sure that ARG is not a variable-sized array.  (Note
15936              that were talking about variable-sized arrays (like
15937              `int[n]'), rather than arrays of unknown size (like
15938              `int[]').)  We'll get very confused by such a type since
15939              the bound of the array is not constant, and therefore
15940              not mangleable.  Besides, such types are not allowed in
15941              ISO C++, so we can do as we please here.  We do allow
15942              them for 'auto' deduction, since that isn't ABI-exposed.  */
15943           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
15944             return unify_vla_arg (explain_p, arg);
15945
15946           /* Strip typedefs as in convert_template_argument.  */
15947           arg = canonicalize_type_argument (arg, tf_none);
15948         }
15949
15950       /* If ARG is a parameter pack or an expansion, we cannot unify
15951          against it unless PARM is also a parameter pack.  */
15952       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15953           && !template_parameter_pack_p (parm))
15954         return unify_parameter_pack_mismatch (explain_p, parm, arg);
15955
15956       /* If the argument deduction results is a METHOD_TYPE,
15957          then there is a problem.
15958          METHOD_TYPE doesn't map to any real C++ type the result of
15959          the deduction can not be of that type.  */
15960       if (TREE_CODE (arg) == METHOD_TYPE)
15961         return unify_method_type_error (explain_p, arg);
15962
15963       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15964       return unify_success (explain_p);
15965
15966     case TEMPLATE_PARM_INDEX:
15967       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15968       if (tparm == error_mark_node)
15969         return unify_invalid (explain_p);
15970
15971       if (TEMPLATE_PARM_LEVEL (parm)
15972           != template_decl_level (tparm))
15973         {
15974           /* The PARM is not one we're trying to unify.  Just check
15975              to see if it matches ARG.  */
15976           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
15977                          && cp_tree_equal (parm, arg));
15978           if (result)
15979             unify_expression_unequal (explain_p, parm, arg);
15980           return result;
15981         }
15982
15983       idx = TEMPLATE_PARM_IDX (parm);
15984       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15985
15986       if (targ)
15987         {
15988           int x = !cp_tree_equal (targ, arg);
15989           if (x)
15990             unify_inconsistency (explain_p, parm, targ, arg);
15991           return x;
15992         }
15993
15994       /* [temp.deduct.type] If, in the declaration of a function template
15995          with a non-type template-parameter, the non-type
15996          template-parameter is used in an expression in the function
15997          parameter-list and, if the corresponding template-argument is
15998          deduced, the template-argument type shall match the type of the
15999          template-parameter exactly, except that a template-argument
16000          deduced from an array bound may be of any integral type.
16001          The non-type parameter might use already deduced type parameters.  */
16002       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16003       if (!TREE_TYPE (arg))
16004         /* Template-parameter dependent expression.  Just accept it for now.
16005            It will later be processed in convert_template_argument.  */
16006         ;
16007       else if (same_type_p (TREE_TYPE (arg), tparm))
16008         /* OK */;
16009       else if ((strict & UNIFY_ALLOW_INTEGER)
16010                && (TREE_CODE (tparm) == INTEGER_TYPE
16011                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16012         /* Convert the ARG to the type of PARM; the deduced non-type
16013            template argument must exactly match the types of the
16014            corresponding parameter.  */
16015         arg = fold (build_nop (tparm, arg));
16016       else if (uses_template_parms (tparm))
16017         /* We haven't deduced the type of this parameter yet.  Try again
16018            later.  */
16019         return unify_success (explain_p);
16020       else
16021         return unify_type_mismatch (explain_p, tparm, arg);
16022
16023       /* If ARG is a parameter pack or an expansion, we cannot unify
16024          against it unless PARM is also a parameter pack.  */
16025       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16026           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16027         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16028
16029       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16030       return unify_success (explain_p);
16031
16032     case PTRMEM_CST:
16033      {
16034         /* A pointer-to-member constant can be unified only with
16035          another constant.  */
16036       if (TREE_CODE (arg) != PTRMEM_CST)
16037         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16038
16039       /* Just unify the class member. It would be useless (and possibly
16040          wrong, depending on the strict flags) to unify also
16041          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16042          arg refer to the same variable, even if through different
16043          classes. For instance:
16044
16045          struct A { int x; };
16046          struct B : A { };
16047
16048          Unification of &A::x and &B::x must succeed.  */
16049       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16050                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16051      }
16052
16053     case POINTER_TYPE:
16054       {
16055         if (TREE_CODE (arg) != POINTER_TYPE)
16056           return unify_type_mismatch (explain_p, parm, arg);
16057
16058         /* [temp.deduct.call]
16059
16060            A can be another pointer or pointer to member type that can
16061            be converted to the deduced A via a qualification
16062            conversion (_conv.qual_).
16063
16064            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16065            This will allow for additional cv-qualification of the
16066            pointed-to types if appropriate.  */
16067
16068         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16069           /* The derived-to-base conversion only persists through one
16070              level of pointers.  */
16071           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16072
16073         return unify (tparms, targs, TREE_TYPE (parm),
16074                       TREE_TYPE (arg), strict, explain_p);
16075       }
16076
16077     case REFERENCE_TYPE:
16078       if (TREE_CODE (arg) != REFERENCE_TYPE)
16079         return unify_type_mismatch (explain_p, parm, arg);
16080       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16081                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16082
16083     case ARRAY_TYPE:
16084       if (TREE_CODE (arg) != ARRAY_TYPE)
16085         return unify_type_mismatch (explain_p, parm, arg);
16086       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16087           != (TYPE_DOMAIN (arg) == NULL_TREE))
16088         return unify_type_mismatch (explain_p, parm, arg);
16089       if (TYPE_DOMAIN (parm) != NULL_TREE)
16090         {
16091           tree parm_max;
16092           tree arg_max;
16093           bool parm_cst;
16094           bool arg_cst;
16095
16096           /* Our representation of array types uses "N - 1" as the
16097              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16098              not an integer constant.  We cannot unify arbitrarily
16099              complex expressions, so we eliminate the MINUS_EXPRs
16100              here.  */
16101           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16102           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16103           if (!parm_cst)
16104             {
16105               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16106               parm_max = TREE_OPERAND (parm_max, 0);
16107             }
16108           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16109           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16110           if (!arg_cst)
16111             {
16112               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16113                  trying to unify the type of a variable with the type
16114                  of a template parameter.  For example:
16115
16116                    template <unsigned int N>
16117                    void f (char (&) [N]);
16118                    int g(); 
16119                    void h(int i) {
16120                      char a[g(i)];
16121                      f(a); 
16122                    }
16123
16124                 Here, the type of the ARG will be "int [g(i)]", and
16125                 may be a SAVE_EXPR, etc.  */
16126               if (TREE_CODE (arg_max) != MINUS_EXPR)
16127                 return unify_vla_arg (explain_p, arg);
16128               arg_max = TREE_OPERAND (arg_max, 0);
16129             }
16130
16131           /* If only one of the bounds used a MINUS_EXPR, compensate
16132              by adding one to the other bound.  */
16133           if (parm_cst && !arg_cst)
16134             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16135                                     integer_type_node,
16136                                     parm_max,
16137                                     integer_one_node);
16138           else if (arg_cst && !parm_cst)
16139             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16140                                    integer_type_node,
16141                                    arg_max,
16142                                    integer_one_node);
16143
16144           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16145                                    UNIFY_ALLOW_INTEGER, explain_p);
16146         }
16147       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16148                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16149
16150     case REAL_TYPE:
16151     case COMPLEX_TYPE:
16152     case VECTOR_TYPE:
16153     case INTEGER_TYPE:
16154     case BOOLEAN_TYPE:
16155     case ENUMERAL_TYPE:
16156     case VOID_TYPE:
16157       if (TREE_CODE (arg) != TREE_CODE (parm))
16158         return unify_type_mismatch (explain_p, parm, arg);
16159
16160       /* We have already checked cv-qualification at the top of the
16161          function.  */
16162       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16163         return unify_type_mismatch (explain_p, parm, arg);
16164
16165       /* As far as unification is concerned, this wins.  Later checks
16166          will invalidate it if necessary.  */
16167       return unify_success (explain_p);
16168
16169       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16170       /* Type INTEGER_CST can come from ordinary constant template args.  */
16171     case INTEGER_CST:
16172       while (TREE_CODE (arg) == NOP_EXPR)
16173         arg = TREE_OPERAND (arg, 0);
16174
16175       if (TREE_CODE (arg) != INTEGER_CST)
16176         return unify_template_argument_mismatch (explain_p, parm, arg);
16177       return (tree_int_cst_equal (parm, arg)
16178               ? unify_success (explain_p)
16179               : unify_template_argument_mismatch (explain_p, parm, arg));
16180
16181     case TREE_VEC:
16182       {
16183         int i;
16184         if (TREE_CODE (arg) != TREE_VEC)
16185           return unify_template_argument_mismatch (explain_p, parm, arg);
16186         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
16187           return unify_arity (explain_p, TREE_VEC_LENGTH (arg),
16188                               TREE_VEC_LENGTH (parm));
16189         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
16190           RECUR_AND_CHECK_FAILURE (tparms, targs,
16191                                    TREE_VEC_ELT (parm, i),
16192                                    TREE_VEC_ELT (arg, i),
16193                                    UNIFY_ALLOW_NONE, explain_p);
16194         return unify_success (explain_p);
16195       }
16196
16197     case RECORD_TYPE:
16198     case UNION_TYPE:
16199       if (TREE_CODE (arg) != TREE_CODE (parm))
16200         return unify_type_mismatch (explain_p, parm, arg);
16201
16202       if (TYPE_PTRMEMFUNC_P (parm))
16203         {
16204           if (!TYPE_PTRMEMFUNC_P (arg))
16205             return unify_type_mismatch (explain_p, parm, arg);
16206
16207           return unify (tparms, targs,
16208                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
16209                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
16210                         strict, explain_p);
16211         }
16212
16213       if (CLASSTYPE_TEMPLATE_INFO (parm))
16214         {
16215           tree t = NULL_TREE;
16216
16217           if (strict_in & UNIFY_ALLOW_DERIVED)
16218             {
16219               /* First, we try to unify the PARM and ARG directly.  */
16220               t = try_class_unification (tparms, targs,
16221                                          parm, arg, explain_p);
16222
16223               if (!t)
16224                 {
16225                   /* Fallback to the special case allowed in
16226                      [temp.deduct.call]:
16227
16228                        If P is a class, and P has the form
16229                        template-id, then A can be a derived class of
16230                        the deduced A.  Likewise, if P is a pointer to
16231                        a class of the form template-id, A can be a
16232                        pointer to a derived class pointed to by the
16233                        deduced A.  */
16234                   enum template_base_result r;
16235                   r = get_template_base (tparms, targs, parm, arg,
16236                                          explain_p, &t);
16237
16238                   if (!t)
16239                     return unify_no_common_base (explain_p, r, parm, arg);
16240                 }
16241             }
16242           else if (CLASSTYPE_TEMPLATE_INFO (arg)
16243                    && (CLASSTYPE_TI_TEMPLATE (parm)
16244                        == CLASSTYPE_TI_TEMPLATE (arg)))
16245             /* Perhaps PARM is something like S<U> and ARG is S<int>.
16246                Then, we should unify `int' and `U'.  */
16247             t = arg;
16248           else
16249             /* There's no chance of unification succeeding.  */
16250             return unify_type_mismatch (explain_p, parm, arg);
16251
16252           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16253                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16254         }
16255       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16256         return unify_type_mismatch (explain_p, parm, arg);
16257       return unify_success (explain_p);
16258
16259     case METHOD_TYPE:
16260     case FUNCTION_TYPE:
16261       {
16262         unsigned int nargs;
16263         tree *args;
16264         tree a;
16265         unsigned int i;
16266
16267         if (TREE_CODE (arg) != TREE_CODE (parm))
16268           return unify_type_mismatch (explain_p, parm, arg);
16269
16270         /* CV qualifications for methods can never be deduced, they must
16271            match exactly.  We need to check them explicitly here,
16272            because type_unification_real treats them as any other
16273            cv-qualified parameter.  */
16274         if (TREE_CODE (parm) == METHOD_TYPE
16275             && (!check_cv_quals_for_unify
16276                 (UNIFY_ALLOW_NONE,
16277                  class_of_this_parm (arg),
16278                  class_of_this_parm (parm))))
16279           return unify_cv_qual_mismatch (explain_p, parm, arg);
16280
16281         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16282                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16283
16284         nargs = list_length (TYPE_ARG_TYPES (arg));
16285         args = XALLOCAVEC (tree, nargs);
16286         for (a = TYPE_ARG_TYPES (arg), i = 0;
16287              a != NULL_TREE && a != void_list_node;
16288              a = TREE_CHAIN (a), ++i)
16289           args[i] = TREE_VALUE (a);
16290         nargs = i;
16291
16292         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16293                                       args, nargs, 1, DEDUCE_EXACT,
16294                                       LOOKUP_NORMAL, explain_p);
16295       }
16296
16297     case OFFSET_TYPE:
16298       /* Unify a pointer to member with a pointer to member function, which
16299          deduces the type of the member as a function type. */
16300       if (TYPE_PTRMEMFUNC_P (arg))
16301         {
16302           tree method_type;
16303           tree fntype;
16304
16305           /* Check top-level cv qualifiers */
16306           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16307             return unify_cv_qual_mismatch (explain_p, parm, arg);
16308
16309           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16310                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16311                                    UNIFY_ALLOW_NONE, explain_p);
16312
16313           /* Determine the type of the function we are unifying against. */
16314           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16315           fntype =
16316             build_function_type (TREE_TYPE (method_type),
16317                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16318
16319           /* Extract the cv-qualifiers of the member function from the
16320              implicit object parameter and place them on the function
16321              type to be restored later. */
16322           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16323           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16324         }
16325
16326       if (TREE_CODE (arg) != OFFSET_TYPE)
16327         return unify_type_mismatch (explain_p, parm, arg);
16328       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16329                                TYPE_OFFSET_BASETYPE (arg),
16330                                UNIFY_ALLOW_NONE, explain_p);
16331       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16332                     strict, explain_p);
16333
16334     case CONST_DECL:
16335       if (DECL_TEMPLATE_PARM_P (parm))
16336         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16337       if (arg != integral_constant_value (parm))
16338         return unify_template_argument_mismatch (explain_p, parm, arg);
16339       return unify_success (explain_p);
16340
16341     case FIELD_DECL:
16342     case TEMPLATE_DECL:
16343       /* Matched cases are handled by the ARG == PARM test above.  */
16344       return unify_template_argument_mismatch (explain_p, parm, arg);
16345
16346     case VAR_DECL:
16347       /* A non-type template parameter that is a variable should be a
16348          an integral constant, in which case, it whould have been
16349          folded into its (constant) value. So we should not be getting
16350          a variable here.  */
16351       gcc_unreachable ();
16352
16353     case TYPE_ARGUMENT_PACK:
16354     case NONTYPE_ARGUMENT_PACK:
16355       {
16356         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
16357         tree packed_args = ARGUMENT_PACK_ARGS (arg);
16358         int i, len = TREE_VEC_LENGTH (packed_parms);
16359         int argslen = TREE_VEC_LENGTH (packed_args);
16360         int parm_variadic_p = 0;
16361
16362         for (i = 0; i < len; ++i)
16363           {
16364             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
16365               {
16366                 if (i == len - 1)
16367                   /* We can unify against something with a trailing
16368                      parameter pack.  */
16369                   parm_variadic_p = 1;
16370                 else
16371                   /* Since there is something following the pack
16372                      expansion, we cannot unify this template argument
16373                      list.  */
16374                   return unify_success (explain_p);
16375               }
16376           }
16377           
16378
16379         /* If we don't have enough arguments to satisfy the parameters
16380            (not counting the pack expression at the end), or we have
16381            too many arguments for a parameter list that doesn't end in
16382            a pack expression, we can't unify.  */
16383         if (argslen < (len - parm_variadic_p))
16384           return unify_too_few_arguments (explain_p, argslen, len);
16385         if (argslen > len && !parm_variadic_p)
16386           return unify_too_many_arguments (explain_p, argslen, len);
16387
16388         /* Unify all of the parameters that precede the (optional)
16389            pack expression.  */
16390         for (i = 0; i < len - parm_variadic_p; ++i)
16391           {
16392             RECUR_AND_CHECK_FAILURE (tparms, targs,
16393                                      TREE_VEC_ELT (packed_parms, i),
16394                                      TREE_VEC_ELT (packed_args, i),
16395                                      strict, explain_p);
16396           }
16397
16398         if (parm_variadic_p)
16399           return unify_pack_expansion (tparms, targs, 
16400                                        packed_parms, packed_args,
16401                                        strict, /*call_args_p=*/false,
16402                                        /*subr=*/false, explain_p);
16403         return unify_success (explain_p);
16404       }
16405
16406       break;
16407
16408     case TYPEOF_TYPE:
16409     case DECLTYPE_TYPE:
16410     case UNDERLYING_TYPE:
16411       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16412          or UNDERLYING_TYPE nodes.  */
16413       return unify_success (explain_p);
16414
16415     case ERROR_MARK:
16416       /* Unification fails if we hit an error node.  */
16417       return unify_invalid (explain_p);
16418
16419     default:
16420       /* An unresolved overload is a nondeduced context.  */
16421       if (type_unknown_p (parm))
16422         return unify_success (explain_p);
16423       gcc_assert (EXPR_P (parm));
16424
16425       /* We must be looking at an expression.  This can happen with
16426          something like:
16427
16428            template <int I>
16429            void foo(S<I>, S<I + 2>);
16430
16431          This is a "nondeduced context":
16432
16433            [deduct.type]
16434
16435            The nondeduced contexts are:
16436
16437            --A type that is a template-id in which one or more of
16438              the template-arguments is an expression that references
16439              a template-parameter.
16440
16441          In these cases, we assume deduction succeeded, but don't
16442          actually infer any unifications.  */
16443
16444       if (!uses_template_parms (parm)
16445           && !template_args_equal (parm, arg))
16446         return unify_expression_unequal (explain_p, parm, arg);
16447       else
16448         return unify_success (explain_p);
16449     }
16450 }
16451 #undef RECUR_AND_CHECK_FAILURE
16452 \f
16453 /* Note that DECL can be defined in this translation unit, if
16454    required.  */
16455
16456 static void
16457 mark_definable (tree decl)
16458 {
16459   tree clone;
16460   DECL_NOT_REALLY_EXTERN (decl) = 1;
16461   FOR_EACH_CLONE (clone, decl)
16462     DECL_NOT_REALLY_EXTERN (clone) = 1;
16463 }
16464
16465 /* Called if RESULT is explicitly instantiated, or is a member of an
16466    explicitly instantiated class.  */
16467
16468 void
16469 mark_decl_instantiated (tree result, int extern_p)
16470 {
16471   SET_DECL_EXPLICIT_INSTANTIATION (result);
16472
16473   /* If this entity has already been written out, it's too late to
16474      make any modifications.  */
16475   if (TREE_ASM_WRITTEN (result))
16476     return;
16477
16478   if (TREE_CODE (result) != FUNCTION_DECL)
16479     /* The TREE_PUBLIC flag for function declarations will have been
16480        set correctly by tsubst.  */
16481     TREE_PUBLIC (result) = 1;
16482
16483   /* This might have been set by an earlier implicit instantiation.  */
16484   DECL_COMDAT (result) = 0;
16485
16486   if (extern_p)
16487     DECL_NOT_REALLY_EXTERN (result) = 0;
16488   else
16489     {
16490       mark_definable (result);
16491       /* Always make artificials weak.  */
16492       if (DECL_ARTIFICIAL (result) && flag_weak)
16493         comdat_linkage (result);
16494       /* For WIN32 we also want to put explicit instantiations in
16495          linkonce sections.  */
16496       else if (TREE_PUBLIC (result))
16497         maybe_make_one_only (result);
16498     }
16499
16500   /* If EXTERN_P, then this function will not be emitted -- unless
16501      followed by an explicit instantiation, at which point its linkage
16502      will be adjusted.  If !EXTERN_P, then this function will be
16503      emitted here.  In neither circumstance do we want
16504      import_export_decl to adjust the linkage.  */
16505   DECL_INTERFACE_KNOWN (result) = 1;
16506 }
16507
16508 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16509    important template arguments.  If any are missing, we check whether
16510    they're important by using error_mark_node for substituting into any
16511    args that were used for partial ordering (the ones between ARGS and END)
16512    and seeing if it bubbles up.  */
16513
16514 static bool
16515 check_undeduced_parms (tree targs, tree args, tree end)
16516 {
16517   bool found = false;
16518   int i;
16519   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16520     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16521       {
16522         found = true;
16523         TREE_VEC_ELT (targs, i) = error_mark_node;
16524       }
16525   if (found)
16526     {
16527       for (; args != end; args = TREE_CHAIN (args))
16528         {
16529           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16530           if (substed == error_mark_node)
16531             return true;
16532         }
16533     }
16534   return false;
16535 }
16536
16537 /* Given two function templates PAT1 and PAT2, return:
16538
16539    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
16540    -1 if PAT2 is more specialized than PAT1.
16541    0 if neither is more specialized.
16542
16543    LEN indicates the number of parameters we should consider
16544    (defaulted parameters should not be considered).
16545
16546    The 1998 std underspecified function template partial ordering, and
16547    DR214 addresses the issue.  We take pairs of arguments, one from
16548    each of the templates, and deduce them against each other.  One of
16549    the templates will be more specialized if all the *other*
16550    template's arguments deduce against its arguments and at least one
16551    of its arguments *does* *not* deduce against the other template's
16552    corresponding argument.  Deduction is done as for class templates.
16553    The arguments used in deduction have reference and top level cv
16554    qualifiers removed.  Iff both arguments were originally reference
16555    types *and* deduction succeeds in both directions, the template
16556    with the more cv-qualified argument wins for that pairing (if
16557    neither is more cv-qualified, they both are equal).  Unlike regular
16558    deduction, after all the arguments have been deduced in this way,
16559    we do *not* verify the deduced template argument values can be
16560    substituted into non-deduced contexts.
16561
16562    The logic can be a bit confusing here, because we look at deduce1 and
16563    targs1 to see if pat2 is at least as specialized, and vice versa; if we
16564    can find template arguments for pat1 to make arg1 look like arg2, that
16565    means that arg2 is at least as specialized as arg1.  */
16566
16567 int
16568 more_specialized_fn (tree pat1, tree pat2, int len)
16569 {
16570   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
16571   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
16572   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
16573   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
16574   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
16575   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
16576   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
16577   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
16578   tree origs1, origs2;
16579   bool lose1 = false;
16580   bool lose2 = false;
16581
16582   /* Remove the this parameter from non-static member functions.  If
16583      one is a non-static member function and the other is not a static
16584      member function, remove the first parameter from that function
16585      also.  This situation occurs for operator functions where we
16586      locate both a member function (with this pointer) and non-member
16587      operator (with explicit first operand).  */
16588   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
16589     {
16590       len--; /* LEN is the number of significant arguments for DECL1 */
16591       args1 = TREE_CHAIN (args1);
16592       if (!DECL_STATIC_FUNCTION_P (decl2))
16593         args2 = TREE_CHAIN (args2);
16594     }
16595   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
16596     {
16597       args2 = TREE_CHAIN (args2);
16598       if (!DECL_STATIC_FUNCTION_P (decl1))
16599         {
16600           len--;
16601           args1 = TREE_CHAIN (args1);
16602         }
16603     }
16604
16605   /* If only one is a conversion operator, they are unordered.  */
16606   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
16607     return 0;
16608
16609   /* Consider the return type for a conversion function */
16610   if (DECL_CONV_FN_P (decl1))
16611     {
16612       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
16613       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
16614       len++;
16615     }
16616
16617   processing_template_decl++;
16618
16619   origs1 = args1;
16620   origs2 = args2;
16621
16622   while (len--
16623          /* Stop when an ellipsis is seen.  */
16624          && args1 != NULL_TREE && args2 != NULL_TREE)
16625     {
16626       tree arg1 = TREE_VALUE (args1);
16627       tree arg2 = TREE_VALUE (args2);
16628       int deduce1, deduce2;
16629       int quals1 = -1;
16630       int quals2 = -1;
16631
16632       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16633           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16634         {
16635           /* When both arguments are pack expansions, we need only
16636              unify the patterns themselves.  */
16637           arg1 = PACK_EXPANSION_PATTERN (arg1);
16638           arg2 = PACK_EXPANSION_PATTERN (arg2);
16639
16640           /* This is the last comparison we need to do.  */
16641           len = 0;
16642         }
16643
16644       if (TREE_CODE (arg1) == REFERENCE_TYPE)
16645         {
16646           arg1 = TREE_TYPE (arg1);
16647           quals1 = cp_type_quals (arg1);
16648         }
16649
16650       if (TREE_CODE (arg2) == REFERENCE_TYPE)
16651         {
16652           arg2 = TREE_TYPE (arg2);
16653           quals2 = cp_type_quals (arg2);
16654         }
16655
16656       if ((quals1 < 0) != (quals2 < 0))
16657         {
16658           /* Only of the args is a reference, see if we should apply
16659              array/function pointer decay to it.  This is not part of
16660              DR214, but is, IMHO, consistent with the deduction rules
16661              for the function call itself, and with our earlier
16662              implementation of the underspecified partial ordering
16663              rules.  (nathan).  */
16664           if (quals1 >= 0)
16665             {
16666               switch (TREE_CODE (arg1))
16667                 {
16668                 case ARRAY_TYPE:
16669                   arg1 = TREE_TYPE (arg1);
16670                   /* FALLTHROUGH. */
16671                 case FUNCTION_TYPE:
16672                   arg1 = build_pointer_type (arg1);
16673                   break;
16674
16675                 default:
16676                   break;
16677                 }
16678             }
16679           else
16680             {
16681               switch (TREE_CODE (arg2))
16682                 {
16683                 case ARRAY_TYPE:
16684                   arg2 = TREE_TYPE (arg2);
16685                   /* FALLTHROUGH. */
16686                 case FUNCTION_TYPE:
16687                   arg2 = build_pointer_type (arg2);
16688                   break;
16689
16690                 default:
16691                   break;
16692                 }
16693             }
16694         }
16695
16696       arg1 = TYPE_MAIN_VARIANT (arg1);
16697       arg2 = TYPE_MAIN_VARIANT (arg2);
16698
16699       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
16700         {
16701           int i, len2 = list_length (args2);
16702           tree parmvec = make_tree_vec (1);
16703           tree argvec = make_tree_vec (len2);
16704           tree ta = args2;
16705
16706           /* Setup the parameter vector, which contains only ARG1.  */
16707           TREE_VEC_ELT (parmvec, 0) = arg1;
16708
16709           /* Setup the argument vector, which contains the remaining
16710              arguments.  */
16711           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
16712             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16713
16714           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
16715                                            argvec, UNIFY_ALLOW_NONE, 
16716                                            /*call_args_p=*/false, 
16717                                            /*subr=*/0, /*explain_p=*/false)
16718                      == 0);
16719
16720           /* We cannot deduce in the other direction, because ARG1 is
16721              a pack expansion but ARG2 is not.  */
16722           deduce2 = 0;
16723         }
16724       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16725         {
16726           int i, len1 = list_length (args1);
16727           tree parmvec = make_tree_vec (1);
16728           tree argvec = make_tree_vec (len1);
16729           tree ta = args1;
16730
16731           /* Setup the parameter vector, which contains only ARG1.  */
16732           TREE_VEC_ELT (parmvec, 0) = arg2;
16733
16734           /* Setup the argument vector, which contains the remaining
16735              arguments.  */
16736           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
16737             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16738
16739           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
16740                                            argvec, UNIFY_ALLOW_NONE, 
16741                                            /*call_args_p=*/false, 
16742                                            /*subr=*/0, /*explain_p=*/false)
16743                      == 0);
16744
16745           /* We cannot deduce in the other direction, because ARG2 is
16746              a pack expansion but ARG1 is not.*/
16747           deduce1 = 0;
16748         }
16749
16750       else
16751         {
16752           /* The normal case, where neither argument is a pack
16753              expansion.  */
16754           deduce1 = (unify (tparms1, targs1, arg1, arg2,
16755                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
16756                      == 0);
16757           deduce2 = (unify (tparms2, targs2, arg2, arg1,
16758                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
16759                      == 0);
16760         }
16761
16762       /* If we couldn't deduce arguments for tparms1 to make arg1 match
16763          arg2, then arg2 is not as specialized as arg1.  */
16764       if (!deduce1)
16765         lose2 = true;
16766       if (!deduce2)
16767         lose1 = true;
16768
16769       /* "If, for a given type, deduction succeeds in both directions
16770          (i.e., the types are identical after the transformations above)
16771          and if the type from the argument template is more cv-qualified
16772          than the type from the parameter template (as described above)
16773          that type is considered to be more specialized than the other. If
16774          neither type is more cv-qualified than the other then neither type
16775          is more specialized than the other."  */
16776
16777       if (deduce1 && deduce2
16778           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
16779         {
16780           if ((quals1 & quals2) == quals2)
16781             lose2 = true;
16782           if ((quals1 & quals2) == quals1)
16783             lose1 = true;
16784         }
16785
16786       if (lose1 && lose2)
16787         /* We've failed to deduce something in either direction.
16788            These must be unordered.  */
16789         break;
16790
16791       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16792           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16793         /* We have already processed all of the arguments in our
16794            handing of the pack expansion type.  */
16795         len = 0;
16796
16797       args1 = TREE_CHAIN (args1);
16798       args2 = TREE_CHAIN (args2);
16799     }
16800
16801   /* "In most cases, all template parameters must have values in order for
16802      deduction to succeed, but for partial ordering purposes a template
16803      parameter may remain without a value provided it is not used in the
16804      types being used for partial ordering."
16805
16806      Thus, if we are missing any of the targs1 we need to substitute into
16807      origs1, then pat2 is not as specialized as pat1.  This can happen when
16808      there is a nondeduced context.  */
16809   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
16810     lose2 = true;
16811   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
16812     lose1 = true;
16813
16814   processing_template_decl--;
16815
16816   /* All things being equal, if the next argument is a pack expansion
16817      for one function but not for the other, prefer the
16818      non-variadic function.  FIXME this is bogus; see c++/41958.  */
16819   if (lose1 == lose2
16820       && args1 && TREE_VALUE (args1)
16821       && args2 && TREE_VALUE (args2))
16822     {
16823       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
16824       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
16825     }
16826
16827   if (lose1 == lose2)
16828     return 0;
16829   else if (!lose1)
16830     return 1;
16831   else
16832     return -1;
16833 }
16834
16835 /* Determine which of two partial specializations is more specialized.
16836
16837    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
16838    to the first partial specialization.  The TREE_VALUE is the
16839    innermost set of template parameters for the partial
16840    specialization.  PAT2 is similar, but for the second template.
16841
16842    Return 1 if the first partial specialization is more specialized;
16843    -1 if the second is more specialized; 0 if neither is more
16844    specialized.
16845
16846    See [temp.class.order] for information about determining which of
16847    two templates is more specialized.  */
16848
16849 static int
16850 more_specialized_class (tree pat1, tree pat2)
16851 {
16852   tree targs;
16853   tree tmpl1, tmpl2;
16854   int winner = 0;
16855   bool any_deductions = false;
16856
16857   tmpl1 = TREE_TYPE (pat1);
16858   tmpl2 = TREE_TYPE (pat2);
16859
16860   /* Just like what happens for functions, if we are ordering between
16861      different class template specializations, we may encounter dependent
16862      types in the arguments, and we need our dependency check functions
16863      to behave correctly.  */
16864   ++processing_template_decl;
16865   targs = get_class_bindings (TREE_VALUE (pat1),
16866                               CLASSTYPE_TI_ARGS (tmpl1),
16867                               CLASSTYPE_TI_ARGS (tmpl2));
16868   if (targs)
16869     {
16870       --winner;
16871       any_deductions = true;
16872     }
16873
16874   targs = get_class_bindings (TREE_VALUE (pat2),
16875                               CLASSTYPE_TI_ARGS (tmpl2),
16876                               CLASSTYPE_TI_ARGS (tmpl1));
16877   if (targs)
16878     {
16879       ++winner;
16880       any_deductions = true;
16881     }
16882   --processing_template_decl;
16883
16884   /* In the case of a tie where at least one of the class templates
16885      has a parameter pack at the end, the template with the most
16886      non-packed parameters wins.  */
16887   if (winner == 0
16888       && any_deductions
16889       && (template_args_variadic_p (TREE_PURPOSE (pat1))
16890           || template_args_variadic_p (TREE_PURPOSE (pat2))))
16891     {
16892       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
16893       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
16894       int len1 = TREE_VEC_LENGTH (args1);
16895       int len2 = TREE_VEC_LENGTH (args2);
16896
16897       /* We don't count the pack expansion at the end.  */
16898       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
16899         --len1;
16900       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
16901         --len2;
16902
16903       if (len1 > len2)
16904         return 1;
16905       else if (len1 < len2)
16906         return -1;
16907     }
16908
16909   return winner;
16910 }
16911
16912 /* Return the template arguments that will produce the function signature
16913    DECL from the function template FN, with the explicit template
16914    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
16915    also match.  Return NULL_TREE if no satisfactory arguments could be
16916    found.  */
16917
16918 static tree
16919 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
16920 {
16921   int ntparms = DECL_NTPARMS (fn);
16922   tree targs = make_tree_vec (ntparms);
16923   tree decl_type;
16924   tree decl_arg_types;
16925   tree *args;
16926   unsigned int nargs, ix;
16927   tree arg;
16928
16929   /* Substitute the explicit template arguments into the type of DECL.
16930      The call to fn_type_unification will handle substitution into the
16931      FN.  */
16932   decl_type = TREE_TYPE (decl);
16933   if (explicit_args && uses_template_parms (decl_type))
16934     {
16935       tree tmpl;
16936       tree converted_args;
16937
16938       if (DECL_TEMPLATE_INFO (decl))
16939         tmpl = DECL_TI_TEMPLATE (decl);
16940       else
16941         /* We can get here for some invalid specializations.  */
16942         return NULL_TREE;
16943
16944       converted_args
16945         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16946                                  explicit_args, NULL_TREE,
16947                                  tf_none,
16948                                  /*require_all_args=*/false,
16949                                  /*use_default_args=*/false);
16950       if (converted_args == error_mark_node)
16951         return NULL_TREE;
16952
16953       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
16954       if (decl_type == error_mark_node)
16955         return NULL_TREE;
16956     }
16957
16958   /* Never do unification on the 'this' parameter.  */
16959   decl_arg_types = skip_artificial_parms_for (decl, 
16960                                               TYPE_ARG_TYPES (decl_type));
16961
16962   nargs = list_length (decl_arg_types);
16963   args = XALLOCAVEC (tree, nargs);
16964   for (arg = decl_arg_types, ix = 0;
16965        arg != NULL_TREE && arg != void_list_node;
16966        arg = TREE_CHAIN (arg), ++ix)
16967     args[ix] = TREE_VALUE (arg);
16968
16969   if (fn_type_unification (fn, explicit_args, targs,
16970                            args, ix,
16971                            (check_rettype || DECL_CONV_FN_P (fn)
16972                             ? TREE_TYPE (decl_type) : NULL_TREE),
16973                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
16974     return NULL_TREE;
16975
16976   return targs;
16977 }
16978
16979 /* Return the innermost template arguments that, when applied to a
16980    template specialization whose innermost template parameters are
16981    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
16982    ARGS.
16983
16984    For example, suppose we have:
16985
16986      template <class T, class U> struct S {};
16987      template <class T> struct S<T*, int> {};
16988
16989    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
16990    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
16991    int}.  The resulting vector will be {double}, indicating that `T'
16992    is bound to `double'.  */
16993
16994 static tree
16995 get_class_bindings (tree tparms, tree spec_args, tree args)
16996 {
16997   int i, ntparms = TREE_VEC_LENGTH (tparms);
16998   tree deduced_args;
16999   tree innermost_deduced_args;
17000
17001   innermost_deduced_args = make_tree_vec (ntparms);
17002   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17003     {
17004       deduced_args = copy_node (args);
17005       SET_TMPL_ARGS_LEVEL (deduced_args,
17006                            TMPL_ARGS_DEPTH (deduced_args),
17007                            innermost_deduced_args);
17008     }
17009   else
17010     deduced_args = innermost_deduced_args;
17011
17012   if (unify (tparms, deduced_args,
17013              INNERMOST_TEMPLATE_ARGS (spec_args),
17014              INNERMOST_TEMPLATE_ARGS (args),
17015              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17016     return NULL_TREE;
17017
17018   for (i =  0; i < ntparms; ++i)
17019     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17020       return NULL_TREE;
17021
17022   /* Verify that nondeduced template arguments agree with the type
17023      obtained from argument deduction.
17024
17025      For example:
17026
17027        struct A { typedef int X; };
17028        template <class T, class U> struct C {};
17029        template <class T> struct C<T, typename T::X> {};
17030
17031      Then with the instantiation `C<A, int>', we can deduce that
17032      `T' is `A' but unify () does not check whether `typename T::X'
17033      is `int'.  */
17034   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17035   if (spec_args == error_mark_node
17036       /* We only need to check the innermost arguments; the other
17037          arguments will always agree.  */
17038       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17039                               INNERMOST_TEMPLATE_ARGS (args)))
17040     return NULL_TREE;
17041
17042   /* Now that we have bindings for all of the template arguments,
17043      ensure that the arguments deduced for the template template
17044      parameters have compatible template parameter lists.  See the use
17045      of template_template_parm_bindings_ok_p in fn_type_unification
17046      for more information.  */
17047   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17048     return NULL_TREE;
17049
17050   return deduced_args;
17051 }
17052
17053 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17054    Return the TREE_LIST node with the most specialized template, if
17055    any.  If there is no most specialized template, the error_mark_node
17056    is returned.
17057
17058    Note that this function does not look at, or modify, the
17059    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17060    returned is one of the elements of INSTANTIATIONS, callers may
17061    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17062    and retrieve it from the value returned.  */
17063
17064 tree
17065 most_specialized_instantiation (tree templates)
17066 {
17067   tree fn, champ;
17068
17069   ++processing_template_decl;
17070
17071   champ = templates;
17072   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17073     {
17074       int fate = 0;
17075
17076       if (get_bindings (TREE_VALUE (champ),
17077                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17078                         NULL_TREE, /*check_ret=*/true))
17079         fate--;
17080
17081       if (get_bindings (TREE_VALUE (fn),
17082                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17083                         NULL_TREE, /*check_ret=*/true))
17084         fate++;
17085
17086       if (fate == -1)
17087         champ = fn;
17088       else if (!fate)
17089         {
17090           /* Equally specialized, move to next function.  If there
17091              is no next function, nothing's most specialized.  */
17092           fn = TREE_CHAIN (fn);
17093           champ = fn;
17094           if (!fn)
17095             break;
17096         }
17097     }
17098
17099   if (champ)
17100     /* Now verify that champ is better than everything earlier in the
17101        instantiation list.  */
17102     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17103       if (get_bindings (TREE_VALUE (champ),
17104                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17105                         NULL_TREE, /*check_ret=*/true)
17106           || !get_bindings (TREE_VALUE (fn),
17107                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17108                             NULL_TREE, /*check_ret=*/true))
17109         {
17110           champ = NULL_TREE;
17111           break;
17112         }
17113
17114   processing_template_decl--;
17115
17116   if (!champ)
17117     return error_mark_node;
17118
17119   return champ;
17120 }
17121
17122 /* If DECL is a specialization of some template, return the most
17123    general such template.  Otherwise, returns NULL_TREE.
17124
17125    For example, given:
17126
17127      template <class T> struct S { template <class U> void f(U); };
17128
17129    if TMPL is `template <class U> void S<int>::f(U)' this will return
17130    the full template.  This function will not trace past partial
17131    specializations, however.  For example, given in addition:
17132
17133      template <class T> struct S<T*> { template <class U> void f(U); };
17134
17135    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17136    `template <class T> template <class U> S<T*>::f(U)'.  */
17137
17138 tree
17139 most_general_template (tree decl)
17140 {
17141   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17142      an immediate specialization.  */
17143   if (TREE_CODE (decl) == FUNCTION_DECL)
17144     {
17145       if (DECL_TEMPLATE_INFO (decl)) {
17146         decl = DECL_TI_TEMPLATE (decl);
17147
17148         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17149            template friend.  */
17150         if (TREE_CODE (decl) != TEMPLATE_DECL)
17151           return NULL_TREE;
17152       } else
17153         return NULL_TREE;
17154     }
17155
17156   /* Look for more and more general templates.  */
17157   while (DECL_TEMPLATE_INFO (decl))
17158     {
17159       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17160          (See cp-tree.h for details.)  */
17161       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17162         break;
17163
17164       if (CLASS_TYPE_P (TREE_TYPE (decl))
17165           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17166         break;
17167
17168       /* Stop if we run into an explicitly specialized class template.  */
17169       if (!DECL_NAMESPACE_SCOPE_P (decl)
17170           && DECL_CONTEXT (decl)
17171           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17172         break;
17173
17174       decl = DECL_TI_TEMPLATE (decl);
17175     }
17176
17177   return decl;
17178 }
17179
17180 /* Return the most specialized of the class template partial
17181    specializations of TMPL which can produce TYPE, a specialization of
17182    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17183    a _TYPE node corresponding to the partial specialization, while the
17184    TREE_PURPOSE is the set of template arguments that must be
17185    substituted into the TREE_TYPE in order to generate TYPE.
17186
17187    If the choice of partial specialization is ambiguous, a diagnostic
17188    is issued, and the error_mark_node is returned.  If there are no
17189    partial specializations of TMPL matching TYPE, then NULL_TREE is
17190    returned.  */
17191
17192 static tree
17193 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17194 {
17195   tree list = NULL_TREE;
17196   tree t;
17197   tree champ;
17198   int fate;
17199   bool ambiguous_p;
17200   tree args;
17201   tree outer_args = NULL_TREE;
17202
17203   tmpl = most_general_template (tmpl);
17204   args = CLASSTYPE_TI_ARGS (type);
17205
17206   /* For determining which partial specialization to use, only the
17207      innermost args are interesting.  */
17208   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17209     {
17210       outer_args = strip_innermost_template_args (args, 1);
17211       args = INNERMOST_TEMPLATE_ARGS (args);
17212     }
17213
17214   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17215     {
17216       tree partial_spec_args;
17217       tree spec_args;
17218       tree parms = TREE_VALUE (t);
17219
17220       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17221
17222       ++processing_template_decl;
17223
17224       if (outer_args)
17225         {
17226           int i;
17227
17228           /* Discard the outer levels of args, and then substitute in the
17229              template args from the enclosing class.  */
17230           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17231           partial_spec_args = tsubst_template_args
17232             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17233
17234           /* PARMS already refers to just the innermost parms, but the
17235              template parms in partial_spec_args had their levels lowered
17236              by tsubst, so we need to do the same for the parm list.  We
17237              can't just tsubst the TREE_VEC itself, as tsubst wants to
17238              treat a TREE_VEC as an argument vector.  */
17239           parms = copy_node (parms);
17240           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17241             TREE_VEC_ELT (parms, i) =
17242               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17243
17244         }
17245
17246       partial_spec_args =
17247           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17248                                  add_to_template_args (outer_args,
17249                                                        partial_spec_args),
17250                                  tmpl, tf_none,
17251                                  /*require_all_args=*/true,
17252                                  /*use_default_args=*/true);
17253
17254       --processing_template_decl;
17255
17256       if (partial_spec_args == error_mark_node)
17257         return error_mark_node;
17258
17259       spec_args = get_class_bindings (parms,
17260                                       partial_spec_args,
17261                                       args);
17262       if (spec_args)
17263         {
17264           if (outer_args)
17265             spec_args = add_to_template_args (outer_args, spec_args);
17266           list = tree_cons (spec_args, TREE_VALUE (t), list);
17267           TREE_TYPE (list) = TREE_TYPE (t);
17268         }
17269     }
17270
17271   if (! list)
17272     return NULL_TREE;
17273
17274   ambiguous_p = false;
17275   t = list;
17276   champ = t;
17277   t = TREE_CHAIN (t);
17278   for (; t; t = TREE_CHAIN (t))
17279     {
17280       fate = more_specialized_class (champ, t);
17281       if (fate == 1)
17282         ;
17283       else
17284         {
17285           if (fate == 0)
17286             {
17287               t = TREE_CHAIN (t);
17288               if (! t)
17289                 {
17290                   ambiguous_p = true;
17291                   break;
17292                 }
17293             }
17294           champ = t;
17295         }
17296     }
17297
17298   if (!ambiguous_p)
17299     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17300       {
17301         fate = more_specialized_class (champ, t);
17302         if (fate != 1)
17303           {
17304             ambiguous_p = true;
17305             break;
17306           }
17307       }
17308
17309   if (ambiguous_p)
17310     {
17311       const char *str;
17312       char *spaces = NULL;
17313       if (!(complain & tf_error))
17314         return error_mark_node;
17315       error ("ambiguous class template instantiation for %q#T", type);
17316       str = ngettext ("candidate is:", "candidates are:", list_length (list));
17317       for (t = list; t; t = TREE_CHAIN (t))
17318         {
17319           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17320           spaces = spaces ? spaces : get_spaces (str);
17321         }
17322       free (spaces);
17323       return error_mark_node;
17324     }
17325
17326   return champ;
17327 }
17328
17329 /* Explicitly instantiate DECL.  */
17330
17331 void
17332 do_decl_instantiation (tree decl, tree storage)
17333 {
17334   tree result = NULL_TREE;
17335   int extern_p = 0;
17336
17337   if (!decl || decl == error_mark_node)
17338     /* An error occurred, for which grokdeclarator has already issued
17339        an appropriate message.  */
17340     return;
17341   else if (! DECL_LANG_SPECIFIC (decl))
17342     {
17343       error ("explicit instantiation of non-template %q#D", decl);
17344       return;
17345     }
17346   else if (TREE_CODE (decl) == VAR_DECL)
17347     {
17348       /* There is an asymmetry here in the way VAR_DECLs and
17349          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17350          the latter, the DECL we get back will be marked as a
17351          template instantiation, and the appropriate
17352          DECL_TEMPLATE_INFO will be set up.  This does not happen for
17353          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17354          should handle VAR_DECLs as it currently handles
17355          FUNCTION_DECLs.  */
17356       if (!DECL_CLASS_SCOPE_P (decl))
17357         {
17358           error ("%qD is not a static data member of a class template", decl);
17359           return;
17360         }
17361       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17362       if (!result || TREE_CODE (result) != VAR_DECL)
17363         {
17364           error ("no matching template for %qD found", decl);
17365           return;
17366         }
17367       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17368         {
17369           error ("type %qT for explicit instantiation %qD does not match "
17370                  "declared type %qT", TREE_TYPE (result), decl,
17371                  TREE_TYPE (decl));
17372           return;
17373         }
17374     }
17375   else if (TREE_CODE (decl) != FUNCTION_DECL)
17376     {
17377       error ("explicit instantiation of %q#D", decl);
17378       return;
17379     }
17380   else
17381     result = decl;
17382
17383   /* Check for various error cases.  Note that if the explicit
17384      instantiation is valid the RESULT will currently be marked as an
17385      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17386      until we get here.  */
17387
17388   if (DECL_TEMPLATE_SPECIALIZATION (result))
17389     {
17390       /* DR 259 [temp.spec].
17391
17392          Both an explicit instantiation and a declaration of an explicit
17393          specialization shall not appear in a program unless the explicit
17394          instantiation follows a declaration of the explicit specialization.
17395
17396          For a given set of template parameters, if an explicit
17397          instantiation of a template appears after a declaration of an
17398          explicit specialization for that template, the explicit
17399          instantiation has no effect.  */
17400       return;
17401     }
17402   else if (DECL_EXPLICIT_INSTANTIATION (result))
17403     {
17404       /* [temp.spec]
17405
17406          No program shall explicitly instantiate any template more
17407          than once.
17408
17409          We check DECL_NOT_REALLY_EXTERN so as not to complain when
17410          the first instantiation was `extern' and the second is not,
17411          and EXTERN_P for the opposite case.  */
17412       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17413         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17414       /* If an "extern" explicit instantiation follows an ordinary
17415          explicit instantiation, the template is instantiated.  */
17416       if (extern_p)
17417         return;
17418     }
17419   else if (!DECL_IMPLICIT_INSTANTIATION (result))
17420     {
17421       error ("no matching template for %qD found", result);
17422       return;
17423     }
17424   else if (!DECL_TEMPLATE_INFO (result))
17425     {
17426       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17427       return;
17428     }
17429
17430   if (storage == NULL_TREE)
17431     ;
17432   else if (storage == ridpointers[(int) RID_EXTERN])
17433     {
17434       if (!in_system_header && (cxx_dialect == cxx98))
17435         pedwarn (input_location, OPT_pedantic, 
17436                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17437                  "instantiations");
17438       extern_p = 1;
17439     }
17440   else
17441     error ("storage class %qD applied to template instantiation", storage);
17442
17443   check_explicit_instantiation_namespace (result);
17444   mark_decl_instantiated (result, extern_p);
17445   if (! extern_p)
17446     instantiate_decl (result, /*defer_ok=*/1,
17447                       /*expl_inst_class_mem_p=*/false);
17448 }
17449
17450 static void
17451 mark_class_instantiated (tree t, int extern_p)
17452 {
17453   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17454   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17455   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17456   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17457   if (! extern_p)
17458     {
17459       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17460       rest_of_type_compilation (t, 1);
17461     }
17462 }
17463
17464 /* Called from do_type_instantiation through binding_table_foreach to
17465    do recursive instantiation for the type bound in ENTRY.  */
17466 static void
17467 bt_instantiate_type_proc (binding_entry entry, void *data)
17468 {
17469   tree storage = *(tree *) data;
17470
17471   if (MAYBE_CLASS_TYPE_P (entry->type)
17472       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17473     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17474 }
17475
17476 /* Called from do_type_instantiation to instantiate a member
17477    (a member function or a static member variable) of an
17478    explicitly instantiated class template.  */
17479 static void
17480 instantiate_class_member (tree decl, int extern_p)
17481 {
17482   mark_decl_instantiated (decl, extern_p);
17483   if (! extern_p)
17484     instantiate_decl (decl, /*defer_ok=*/1,
17485                       /*expl_inst_class_mem_p=*/true);
17486 }
17487
17488 /* Perform an explicit instantiation of template class T.  STORAGE, if
17489    non-null, is the RID for extern, inline or static.  COMPLAIN is
17490    nonzero if this is called from the parser, zero if called recursively,
17491    since the standard is unclear (as detailed below).  */
17492
17493 void
17494 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17495 {
17496   int extern_p = 0;
17497   int nomem_p = 0;
17498   int static_p = 0;
17499   int previous_instantiation_extern_p = 0;
17500
17501   if (TREE_CODE (t) == TYPE_DECL)
17502     t = TREE_TYPE (t);
17503
17504   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17505     {
17506       error ("explicit instantiation of non-template type %qT", t);
17507       return;
17508     }
17509
17510   complete_type (t);
17511
17512   if (!COMPLETE_TYPE_P (t))
17513     {
17514       if (complain & tf_error)
17515         error ("explicit instantiation of %q#T before definition of template",
17516                t);
17517       return;
17518     }
17519
17520   if (storage != NULL_TREE)
17521     {
17522       if (!in_system_header)
17523         {
17524           if (storage == ridpointers[(int) RID_EXTERN])
17525             {
17526               if (cxx_dialect == cxx98)
17527                 pedwarn (input_location, OPT_pedantic, 
17528                          "ISO C++ 1998 forbids the use of %<extern%> on "
17529                          "explicit instantiations");
17530             }
17531           else
17532             pedwarn (input_location, OPT_pedantic, 
17533                      "ISO C++ forbids the use of %qE"
17534                      " on explicit instantiations", storage);
17535         }
17536
17537       if (storage == ridpointers[(int) RID_INLINE])
17538         nomem_p = 1;
17539       else if (storage == ridpointers[(int) RID_EXTERN])
17540         extern_p = 1;
17541       else if (storage == ridpointers[(int) RID_STATIC])
17542         static_p = 1;
17543       else
17544         {
17545           error ("storage class %qD applied to template instantiation",
17546                  storage);
17547           extern_p = 0;
17548         }
17549     }
17550
17551   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
17552     {
17553       /* DR 259 [temp.spec].
17554
17555          Both an explicit instantiation and a declaration of an explicit
17556          specialization shall not appear in a program unless the explicit
17557          instantiation follows a declaration of the explicit specialization.
17558
17559          For a given set of template parameters, if an explicit
17560          instantiation of a template appears after a declaration of an
17561          explicit specialization for that template, the explicit
17562          instantiation has no effect.  */
17563       return;
17564     }
17565   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
17566     {
17567       /* [temp.spec]
17568
17569          No program shall explicitly instantiate any template more
17570          than once.
17571
17572          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
17573          instantiation was `extern'.  If EXTERN_P then the second is.
17574          These cases are OK.  */
17575       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
17576
17577       if (!previous_instantiation_extern_p && !extern_p
17578           && (complain & tf_error))
17579         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
17580
17581       /* If we've already instantiated the template, just return now.  */
17582       if (!CLASSTYPE_INTERFACE_ONLY (t))
17583         return;
17584     }
17585
17586   check_explicit_instantiation_namespace (TYPE_NAME (t));
17587   mark_class_instantiated (t, extern_p);
17588
17589   if (nomem_p)
17590     return;
17591
17592   {
17593     tree tmp;
17594
17595     /* In contrast to implicit instantiation, where only the
17596        declarations, and not the definitions, of members are
17597        instantiated, we have here:
17598
17599          [temp.explicit]
17600
17601          The explicit instantiation of a class template specialization
17602          implies the instantiation of all of its members not
17603          previously explicitly specialized in the translation unit
17604          containing the explicit instantiation.
17605
17606        Of course, we can't instantiate member template classes, since
17607        we don't have any arguments for them.  Note that the standard
17608        is unclear on whether the instantiation of the members are
17609        *explicit* instantiations or not.  However, the most natural
17610        interpretation is that it should be an explicit instantiation.  */
17611
17612     if (! static_p)
17613       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
17614         if (TREE_CODE (tmp) == FUNCTION_DECL
17615             && DECL_TEMPLATE_INSTANTIATION (tmp))
17616           instantiate_class_member (tmp, extern_p);
17617
17618     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
17619       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
17620         instantiate_class_member (tmp, extern_p);
17621
17622     if (CLASSTYPE_NESTED_UTDS (t))
17623       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
17624                              bt_instantiate_type_proc, &storage);
17625   }
17626 }
17627
17628 /* Given a function DECL, which is a specialization of TMPL, modify
17629    DECL to be a re-instantiation of TMPL with the same template
17630    arguments.  TMPL should be the template into which tsubst'ing
17631    should occur for DECL, not the most general template.
17632
17633    One reason for doing this is a scenario like this:
17634
17635      template <class T>
17636      void f(const T&, int i);
17637
17638      void g() { f(3, 7); }
17639
17640      template <class T>
17641      void f(const T& t, const int i) { }
17642
17643    Note that when the template is first instantiated, with
17644    instantiate_template, the resulting DECL will have no name for the
17645    first parameter, and the wrong type for the second.  So, when we go
17646    to instantiate the DECL, we regenerate it.  */
17647
17648 static void
17649 regenerate_decl_from_template (tree decl, tree tmpl)
17650 {
17651   /* The arguments used to instantiate DECL, from the most general
17652      template.  */
17653   tree args;
17654   tree code_pattern;
17655
17656   args = DECL_TI_ARGS (decl);
17657   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
17658
17659   /* Make sure that we can see identifiers, and compute access
17660      correctly.  */
17661   push_access_scope (decl);
17662
17663   if (TREE_CODE (decl) == FUNCTION_DECL)
17664     {
17665       tree decl_parm;
17666       tree pattern_parm;
17667       tree specs;
17668       int args_depth;
17669       int parms_depth;
17670
17671       args_depth = TMPL_ARGS_DEPTH (args);
17672       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
17673       if (args_depth > parms_depth)
17674         args = get_innermost_template_args (args, parms_depth);
17675
17676       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
17677                                               args, tf_error, NULL_TREE,
17678                                               /*defer_ok*/false);
17679       if (specs)
17680         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
17681                                                     specs);
17682
17683       /* Merge parameter declarations.  */
17684       decl_parm = skip_artificial_parms_for (decl,
17685                                              DECL_ARGUMENTS (decl));
17686       pattern_parm
17687         = skip_artificial_parms_for (code_pattern,
17688                                      DECL_ARGUMENTS (code_pattern));
17689       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
17690         {
17691           tree parm_type;
17692           tree attributes;
17693           
17694           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17695             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
17696           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
17697                               NULL_TREE);
17698           parm_type = type_decays_to (parm_type);
17699           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17700             TREE_TYPE (decl_parm) = parm_type;
17701           attributes = DECL_ATTRIBUTES (pattern_parm);
17702           if (DECL_ATTRIBUTES (decl_parm) != attributes)
17703             {
17704               DECL_ATTRIBUTES (decl_parm) = attributes;
17705               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17706             }
17707           decl_parm = DECL_CHAIN (decl_parm);
17708           pattern_parm = DECL_CHAIN (pattern_parm);
17709         }
17710       /* Merge any parameters that match with the function parameter
17711          pack.  */
17712       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
17713         {
17714           int i, len;
17715           tree expanded_types;
17716           /* Expand the TYPE_PACK_EXPANSION that provides the types for
17717              the parameters in this function parameter pack.  */
17718           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
17719                                                  args, tf_error, NULL_TREE);
17720           len = TREE_VEC_LENGTH (expanded_types);
17721           for (i = 0; i < len; i++)
17722             {
17723               tree parm_type;
17724               tree attributes;
17725           
17726               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17727                 /* Rename the parameter to include the index.  */
17728                 DECL_NAME (decl_parm) = 
17729                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
17730               parm_type = TREE_VEC_ELT (expanded_types, i);
17731               parm_type = type_decays_to (parm_type);
17732               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17733                 TREE_TYPE (decl_parm) = parm_type;
17734               attributes = DECL_ATTRIBUTES (pattern_parm);
17735               if (DECL_ATTRIBUTES (decl_parm) != attributes)
17736                 {
17737                   DECL_ATTRIBUTES (decl_parm) = attributes;
17738                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17739                 }
17740               decl_parm = DECL_CHAIN (decl_parm);
17741             }
17742         }
17743       /* Merge additional specifiers from the CODE_PATTERN.  */
17744       if (DECL_DECLARED_INLINE_P (code_pattern)
17745           && !DECL_DECLARED_INLINE_P (decl))
17746         DECL_DECLARED_INLINE_P (decl) = 1;
17747     }
17748   else if (TREE_CODE (decl) == VAR_DECL)
17749     {
17750       DECL_INITIAL (decl) =
17751         tsubst_expr (DECL_INITIAL (code_pattern), args,
17752                      tf_error, DECL_TI_TEMPLATE (decl),
17753                      /*integral_constant_expression_p=*/false);
17754       if (VAR_HAD_UNKNOWN_BOUND (decl))
17755         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
17756                                    tf_error, DECL_TI_TEMPLATE (decl));
17757     }
17758   else
17759     gcc_unreachable ();
17760
17761   pop_access_scope (decl);
17762 }
17763
17764 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
17765    substituted to get DECL.  */
17766
17767 tree
17768 template_for_substitution (tree decl)
17769 {
17770   tree tmpl = DECL_TI_TEMPLATE (decl);
17771
17772   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
17773      for the instantiation.  This is not always the most general
17774      template.  Consider, for example:
17775
17776         template <class T>
17777         struct S { template <class U> void f();
17778                    template <> void f<int>(); };
17779
17780      and an instantiation of S<double>::f<int>.  We want TD to be the
17781      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
17782   while (/* An instantiation cannot have a definition, so we need a
17783             more general template.  */
17784          DECL_TEMPLATE_INSTANTIATION (tmpl)
17785            /* We must also deal with friend templates.  Given:
17786
17787                 template <class T> struct S {
17788                   template <class U> friend void f() {};
17789                 };
17790
17791               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
17792               so far as the language is concerned, but that's still
17793               where we get the pattern for the instantiation from.  On
17794               other hand, if the definition comes outside the class, say:
17795
17796                 template <class T> struct S {
17797                   template <class U> friend void f();
17798                 };
17799                 template <class U> friend void f() {}
17800
17801               we don't need to look any further.  That's what the check for
17802               DECL_INITIAL is for.  */
17803           || (TREE_CODE (decl) == FUNCTION_DECL
17804               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
17805               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
17806     {
17807       /* The present template, TD, should not be a definition.  If it
17808          were a definition, we should be using it!  Note that we
17809          cannot restructure the loop to just keep going until we find
17810          a template with a definition, since that might go too far if
17811          a specialization was declared, but not defined.  */
17812       gcc_assert (TREE_CODE (decl) != VAR_DECL
17813                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
17814
17815       /* Fetch the more general template.  */
17816       tmpl = DECL_TI_TEMPLATE (tmpl);
17817     }
17818
17819   return tmpl;
17820 }
17821
17822 /* Returns true if we need to instantiate this template instance even if we
17823    know we aren't going to emit it..  */
17824
17825 bool
17826 always_instantiate_p (tree decl)
17827 {
17828   /* We always instantiate inline functions so that we can inline them.  An
17829      explicit instantiation declaration prohibits implicit instantiation of
17830      non-inline functions.  With high levels of optimization, we would
17831      normally inline non-inline functions -- but we're not allowed to do
17832      that for "extern template" functions.  Therefore, we check
17833      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
17834   return ((TREE_CODE (decl) == FUNCTION_DECL
17835            && DECL_DECLARED_INLINE_P (decl))
17836           /* And we need to instantiate static data members so that
17837              their initializers are available in integral constant
17838              expressions.  */
17839           || (TREE_CODE (decl) == VAR_DECL
17840               && decl_maybe_constant_var_p (decl)));
17841 }
17842
17843 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
17844    instantiate it now, modifying TREE_TYPE (fn).  */
17845
17846 void
17847 maybe_instantiate_noexcept (tree fn)
17848 {
17849   tree fntype, spec, noex, clone;
17850
17851   if (DECL_CLONED_FUNCTION_P (fn))
17852     fn = DECL_CLONED_FUNCTION (fn);
17853   fntype = TREE_TYPE (fn);
17854   spec = TYPE_RAISES_EXCEPTIONS (fntype);
17855
17856   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
17857     return;
17858
17859   noex = TREE_PURPOSE (spec);
17860
17861   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
17862     {
17863       push_tinst_level (fn);
17864       push_access_scope (fn);
17865       input_location = DECL_SOURCE_LOCATION (fn);
17866       noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
17867                                     DEFERRED_NOEXCEPT_ARGS (noex),
17868                                     tf_warning_or_error, fn, /*function_p=*/false,
17869                                     /*integral_constant_expression_p=*/true);
17870       pop_access_scope (fn);
17871       pop_tinst_level ();
17872       spec = build_noexcept_spec (noex, tf_warning_or_error);
17873       if (spec == error_mark_node)
17874         spec = noexcept_false_spec;
17875     }
17876   else
17877     {
17878       /* This is an implicitly declared function, so NOEX is a list of
17879          other functions to evaluate and merge.  */
17880       tree elt;
17881       spec = noexcept_true_spec;
17882       for (elt = noex; elt; elt = OVL_NEXT (elt))
17883         {
17884           tree fn = OVL_CURRENT (elt);
17885           tree subspec;
17886           maybe_instantiate_noexcept (fn);
17887           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
17888           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
17889         }
17890     }
17891
17892   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
17893
17894   FOR_EACH_CLONE (clone, fn)
17895     {
17896       if (TREE_TYPE (clone) == fntype)
17897         TREE_TYPE (clone) = TREE_TYPE (fn);
17898       else
17899         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
17900     }
17901 }
17902
17903 /* Produce the definition of D, a _DECL generated from a template.  If
17904    DEFER_OK is nonzero, then we don't have to actually do the
17905    instantiation now; we just have to do it sometime.  Normally it is
17906    an error if this is an explicit instantiation but D is undefined.
17907    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
17908    explicitly instantiated class template.  */
17909
17910 tree
17911 instantiate_decl (tree d, int defer_ok,
17912                   bool expl_inst_class_mem_p)
17913 {
17914   tree tmpl = DECL_TI_TEMPLATE (d);
17915   tree gen_args;
17916   tree args;
17917   tree td;
17918   tree code_pattern;
17919   tree spec;
17920   tree gen_tmpl;
17921   bool pattern_defined;
17922   int need_push;
17923   location_t saved_loc = input_location;
17924   bool external_p;
17925
17926   /* This function should only be used to instantiate templates for
17927      functions and static member variables.  */
17928   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
17929               || TREE_CODE (d) == VAR_DECL);
17930
17931   /* Variables are never deferred; if instantiation is required, they
17932      are instantiated right away.  That allows for better code in the
17933      case that an expression refers to the value of the variable --
17934      if the variable has a constant value the referring expression can
17935      take advantage of that fact.  */
17936   if (TREE_CODE (d) == VAR_DECL
17937       || DECL_DECLARED_CONSTEXPR_P (d))
17938     defer_ok = 0;
17939
17940   /* Don't instantiate cloned functions.  Instead, instantiate the
17941      functions they cloned.  */
17942   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
17943     d = DECL_CLONED_FUNCTION (d);
17944
17945   if (DECL_TEMPLATE_INSTANTIATED (d)
17946       || DECL_TEMPLATE_SPECIALIZATION (d))
17947     /* D has already been instantiated or explicitly specialized, so
17948        there's nothing for us to do here.
17949
17950        It might seem reasonable to check whether or not D is an explicit
17951        instantiation, and, if so, stop here.  But when an explicit
17952        instantiation is deferred until the end of the compilation,
17953        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
17954        the instantiation.  */
17955     return d;
17956
17957   /* Check to see whether we know that this template will be
17958      instantiated in some other file, as with "extern template"
17959      extension.  */
17960   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
17961
17962   /* In general, we do not instantiate such templates.  */
17963   if (external_p && !always_instantiate_p (d))
17964     return d;
17965
17966   gen_tmpl = most_general_template (tmpl);
17967   gen_args = DECL_TI_ARGS (d);
17968
17969   if (tmpl != gen_tmpl)
17970     /* We should already have the extra args.  */
17971     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
17972                 == TMPL_ARGS_DEPTH (gen_args));
17973   /* And what's in the hash table should match D.  */
17974   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
17975               || spec == NULL_TREE);
17976
17977   /* This needs to happen before any tsubsting.  */
17978   if (! push_tinst_level (d))
17979     return d;
17980
17981   timevar_push (TV_TEMPLATE_INST);
17982
17983   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
17984      for the instantiation.  */
17985   td = template_for_substitution (d);
17986   code_pattern = DECL_TEMPLATE_RESULT (td);
17987
17988   /* We should never be trying to instantiate a member of a class
17989      template or partial specialization.  */
17990   gcc_assert (d != code_pattern);
17991
17992   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
17993       || DECL_TEMPLATE_SPECIALIZATION (td))
17994     /* In the case of a friend template whose definition is provided
17995        outside the class, we may have too many arguments.  Drop the
17996        ones we don't need.  The same is true for specializations.  */
17997     args = get_innermost_template_args
17998       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
17999   else
18000     args = gen_args;
18001
18002   if (TREE_CODE (d) == FUNCTION_DECL)
18003     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18004                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18005   else
18006     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18007
18008   /* We may be in the middle of deferred access check.  Disable it now.  */
18009   push_deferring_access_checks (dk_no_deferred);
18010
18011   /* Unless an explicit instantiation directive has already determined
18012      the linkage of D, remember that a definition is available for
18013      this entity.  */
18014   if (pattern_defined
18015       && !DECL_INTERFACE_KNOWN (d)
18016       && !DECL_NOT_REALLY_EXTERN (d))
18017     mark_definable (d);
18018
18019   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18020   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18021   input_location = DECL_SOURCE_LOCATION (d);
18022
18023   /* If D is a member of an explicitly instantiated class template,
18024      and no definition is available, treat it like an implicit
18025      instantiation.  */
18026   if (!pattern_defined && expl_inst_class_mem_p
18027       && DECL_EXPLICIT_INSTANTIATION (d))
18028     {
18029       /* Leave linkage flags alone on instantiations with anonymous
18030          visibility.  */
18031       if (TREE_PUBLIC (d))
18032         {
18033           DECL_NOT_REALLY_EXTERN (d) = 0;
18034           DECL_INTERFACE_KNOWN (d) = 0;
18035         }
18036       SET_DECL_IMPLICIT_INSTANTIATION (d);
18037     }
18038
18039   if (TREE_CODE (d) == FUNCTION_DECL)
18040     maybe_instantiate_noexcept (d);
18041
18042   /* Recheck the substitutions to obtain any warning messages
18043      about ignoring cv qualifiers.  Don't do this for artificial decls,
18044      as it breaks the context-sensitive substitution for lambda op(). */
18045   if (!defer_ok && !DECL_ARTIFICIAL (d))
18046     {
18047       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18048       tree type = TREE_TYPE (gen);
18049
18050       /* Make sure that we can see identifiers, and compute access
18051          correctly.  D is already the target FUNCTION_DECL with the
18052          right context.  */
18053       push_access_scope (d);
18054
18055       if (TREE_CODE (gen) == FUNCTION_DECL)
18056         {
18057           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18058           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18059                                           d, /*defer_ok*/true);
18060           /* Don't simply tsubst the function type, as that will give
18061              duplicate warnings about poor parameter qualifications.
18062              The function arguments are the same as the decl_arguments
18063              without the top level cv qualifiers.  */
18064           type = TREE_TYPE (type);
18065         }
18066       tsubst (type, gen_args, tf_warning_or_error, d);
18067
18068       pop_access_scope (d);
18069     }
18070
18071   /* Defer all other templates, unless we have been explicitly
18072      forbidden from doing so.  */
18073   if (/* If there is no definition, we cannot instantiate the
18074          template.  */
18075       ! pattern_defined
18076       /* If it's OK to postpone instantiation, do so.  */
18077       || defer_ok
18078       /* If this is a static data member that will be defined
18079          elsewhere, we don't want to instantiate the entire data
18080          member, but we do want to instantiate the initializer so that
18081          we can substitute that elsewhere.  */
18082       || (external_p && TREE_CODE (d) == VAR_DECL))
18083     {
18084       /* The definition of the static data member is now required so
18085          we must substitute the initializer.  */
18086       if (TREE_CODE (d) == VAR_DECL
18087           && !DECL_INITIAL (d)
18088           && DECL_INITIAL (code_pattern))
18089         {
18090           tree ns;
18091           tree init;
18092           bool const_init = false;
18093
18094           ns = decl_namespace_context (d);
18095           push_nested_namespace (ns);
18096           push_nested_class (DECL_CONTEXT (d));
18097           init = tsubst_expr (DECL_INITIAL (code_pattern),
18098                               args,
18099                               tf_warning_or_error, NULL_TREE,
18100                               /*integral_constant_expression_p=*/false);
18101           /* Make sure the initializer is still constant, in case of
18102              circular dependency (template/instantiate6.C). */
18103           const_init
18104             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18105           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18106                           /*asmspec_tree=*/NULL_TREE,
18107                           LOOKUP_ONLYCONVERTING);
18108           pop_nested_class ();
18109           pop_nested_namespace (ns);
18110         }
18111
18112       /* We restore the source position here because it's used by
18113          add_pending_template.  */
18114       input_location = saved_loc;
18115
18116       if (at_eof && !pattern_defined
18117           && DECL_EXPLICIT_INSTANTIATION (d)
18118           && DECL_NOT_REALLY_EXTERN (d))
18119         /* [temp.explicit]
18120
18121            The definition of a non-exported function template, a
18122            non-exported member function template, or a non-exported
18123            member function or static data member of a class template
18124            shall be present in every translation unit in which it is
18125            explicitly instantiated.  */
18126         permerror (input_location,  "explicit instantiation of %qD "
18127                    "but no definition available", d);
18128
18129       /* If we're in unevaluated context, we just wanted to get the
18130          constant value; this isn't an odr use, so don't queue
18131          a full instantiation.  */
18132       if (cp_unevaluated_operand != 0)
18133         goto out;
18134       /* ??? Historically, we have instantiated inline functions, even
18135          when marked as "extern template".  */
18136       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18137         add_pending_template (d);
18138       goto out;
18139     }
18140   /* Tell the repository that D is available in this translation unit
18141      -- and see if it is supposed to be instantiated here.  */
18142   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18143     {
18144       /* In a PCH file, despite the fact that the repository hasn't
18145          requested instantiation in the PCH it is still possible that
18146          an instantiation will be required in a file that includes the
18147          PCH.  */
18148       if (pch_file)
18149         add_pending_template (d);
18150       /* Instantiate inline functions so that the inliner can do its
18151          job, even though we'll not be emitting a copy of this
18152          function.  */
18153       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18154         goto out;
18155     }
18156
18157   need_push = !cfun || !global_bindings_p ();
18158   if (need_push)
18159     push_to_top_level ();
18160
18161   /* Mark D as instantiated so that recursive calls to
18162      instantiate_decl do not try to instantiate it again.  */
18163   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18164
18165   /* Regenerate the declaration in case the template has been modified
18166      by a subsequent redeclaration.  */
18167   regenerate_decl_from_template (d, td);
18168
18169   /* We already set the file and line above.  Reset them now in case
18170      they changed as a result of calling regenerate_decl_from_template.  */
18171   input_location = DECL_SOURCE_LOCATION (d);
18172
18173   if (TREE_CODE (d) == VAR_DECL)
18174     {
18175       tree init;
18176       bool const_init = false;
18177
18178       /* Clear out DECL_RTL; whatever was there before may not be right
18179          since we've reset the type of the declaration.  */
18180       SET_DECL_RTL (d, NULL);
18181       DECL_IN_AGGR_P (d) = 0;
18182
18183       /* The initializer is placed in DECL_INITIAL by
18184          regenerate_decl_from_template so we don't need to
18185          push/pop_access_scope again here.  Pull it out so that
18186          cp_finish_decl can process it.  */
18187       init = DECL_INITIAL (d);
18188       DECL_INITIAL (d) = NULL_TREE;
18189       DECL_INITIALIZED_P (d) = 0;
18190
18191       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18192          initializer.  That function will defer actual emission until
18193          we have a chance to determine linkage.  */
18194       DECL_EXTERNAL (d) = 0;
18195
18196       /* Enter the scope of D so that access-checking works correctly.  */
18197       push_nested_class (DECL_CONTEXT (d));
18198       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18199       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18200       pop_nested_class ();
18201     }
18202   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18203     synthesize_method (d);
18204   else if (TREE_CODE (d) == FUNCTION_DECL)
18205     {
18206       htab_t saved_local_specializations;
18207       tree subst_decl;
18208       tree tmpl_parm;
18209       tree spec_parm;
18210
18211       /* Save away the current list, in case we are instantiating one
18212          template from within the body of another.  */
18213       saved_local_specializations = local_specializations;
18214
18215       /* Set up the list of local specializations.  */
18216       local_specializations = htab_create (37,
18217                                            hash_local_specialization,
18218                                            eq_local_specializations,
18219                                            NULL);
18220
18221       /* Set up context.  */
18222       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18223
18224       /* Create substitution entries for the parameters.  */
18225       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18226       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18227       spec_parm = DECL_ARGUMENTS (d);
18228       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18229         {
18230           register_local_specialization (spec_parm, tmpl_parm);
18231           spec_parm = skip_artificial_parms_for (d, spec_parm);
18232           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18233         }
18234       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18235         {
18236           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18237             {
18238               register_local_specialization (spec_parm, tmpl_parm);
18239               spec_parm = DECL_CHAIN (spec_parm);
18240             }
18241           else
18242             {
18243               /* Register the (value) argument pack as a specialization of
18244                  TMPL_PARM, then move on.  */
18245               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18246               register_local_specialization (argpack, tmpl_parm);
18247             }
18248         }
18249       gcc_assert (!spec_parm);
18250
18251       /* Substitute into the body of the function.  */
18252       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18253                    tf_warning_or_error, tmpl,
18254                    /*integral_constant_expression_p=*/false);
18255
18256       /* Set the current input_location to the end of the function
18257          so that finish_function knows where we are.  */
18258       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18259
18260       /* We don't need the local specializations any more.  */
18261       htab_delete (local_specializations);
18262       local_specializations = saved_local_specializations;
18263
18264       /* Finish the function.  */
18265       d = finish_function (0);
18266       expand_or_defer_fn (d);
18267     }
18268
18269   /* We're not deferring instantiation any more.  */
18270   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18271
18272   if (need_push)
18273     pop_from_top_level ();
18274
18275 out:
18276   input_location = saved_loc;
18277   pop_deferring_access_checks ();
18278   pop_tinst_level ();
18279
18280   timevar_pop (TV_TEMPLATE_INST);
18281
18282   return d;
18283 }
18284
18285 /* Run through the list of templates that we wish we could
18286    instantiate, and instantiate any we can.  RETRIES is the
18287    number of times we retry pending template instantiation.  */
18288
18289 void
18290 instantiate_pending_templates (int retries)
18291 {
18292   int reconsider;
18293   location_t saved_loc = input_location;
18294
18295   /* Instantiating templates may trigger vtable generation.  This in turn
18296      may require further template instantiations.  We place a limit here
18297      to avoid infinite loop.  */
18298   if (pending_templates && retries >= max_tinst_depth)
18299     {
18300       tree decl = pending_templates->tinst->decl;
18301
18302       error ("template instantiation depth exceeds maximum of %d"
18303              " instantiating %q+D, possibly from virtual table generation"
18304              " (use -ftemplate-depth= to increase the maximum)",
18305              max_tinst_depth, decl);
18306       if (TREE_CODE (decl) == FUNCTION_DECL)
18307         /* Pretend that we defined it.  */
18308         DECL_INITIAL (decl) = error_mark_node;
18309       return;
18310     }
18311
18312   do
18313     {
18314       struct pending_template **t = &pending_templates;
18315       struct pending_template *last = NULL;
18316       reconsider = 0;
18317       while (*t)
18318         {
18319           tree instantiation = reopen_tinst_level ((*t)->tinst);
18320           bool complete = false;
18321
18322           if (TYPE_P (instantiation))
18323             {
18324               tree fn;
18325
18326               if (!COMPLETE_TYPE_P (instantiation))
18327                 {
18328                   instantiate_class_template (instantiation);
18329                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18330                     for (fn = TYPE_METHODS (instantiation);
18331                          fn;
18332                          fn = TREE_CHAIN (fn))
18333                       if (! DECL_ARTIFICIAL (fn))
18334                         instantiate_decl (fn,
18335                                           /*defer_ok=*/0,
18336                                           /*expl_inst_class_mem_p=*/false);
18337                   if (COMPLETE_TYPE_P (instantiation))
18338                     reconsider = 1;
18339                 }
18340
18341               complete = COMPLETE_TYPE_P (instantiation);
18342             }
18343           else
18344             {
18345               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18346                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18347                 {
18348                   instantiation
18349                     = instantiate_decl (instantiation,
18350                                         /*defer_ok=*/0,
18351                                         /*expl_inst_class_mem_p=*/false);
18352                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18353                     reconsider = 1;
18354                 }
18355
18356               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18357                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
18358             }
18359
18360           if (complete)
18361             /* If INSTANTIATION has been instantiated, then we don't
18362                need to consider it again in the future.  */
18363             *t = (*t)->next;
18364           else
18365             {
18366               last = *t;
18367               t = &(*t)->next;
18368             }
18369           tinst_depth = 0;
18370           current_tinst_level = NULL;
18371         }
18372       last_pending_template = last;
18373     }
18374   while (reconsider);
18375
18376   input_location = saved_loc;
18377 }
18378
18379 /* Substitute ARGVEC into T, which is a list of initializers for
18380    either base class or a non-static data member.  The TREE_PURPOSEs
18381    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18382    instantiate_decl.  */
18383
18384 static tree
18385 tsubst_initializer_list (tree t, tree argvec)
18386 {
18387   tree inits = NULL_TREE;
18388
18389   for (; t; t = TREE_CHAIN (t))
18390     {
18391       tree decl;
18392       tree init;
18393       tree expanded_bases = NULL_TREE;
18394       tree expanded_arguments = NULL_TREE;
18395       int i, len = 1;
18396
18397       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18398         {
18399           tree expr;
18400           tree arg;
18401
18402           /* Expand the base class expansion type into separate base
18403              classes.  */
18404           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18405                                                  tf_warning_or_error,
18406                                                  NULL_TREE);
18407           if (expanded_bases == error_mark_node)
18408             continue;
18409           
18410           /* We'll be building separate TREE_LISTs of arguments for
18411              each base.  */
18412           len = TREE_VEC_LENGTH (expanded_bases);
18413           expanded_arguments = make_tree_vec (len);
18414           for (i = 0; i < len; i++)
18415             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18416
18417           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18418              expand each argument in the TREE_VALUE of t.  */
18419           expr = make_node (EXPR_PACK_EXPANSION);
18420           PACK_EXPANSION_PARAMETER_PACKS (expr) =
18421             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18422
18423           if (TREE_VALUE (t) == void_type_node)
18424             /* VOID_TYPE_NODE is used to indicate
18425                value-initialization.  */
18426             {
18427               for (i = 0; i < len; i++)
18428                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18429             }
18430           else
18431             {
18432               /* Substitute parameter packs into each argument in the
18433                  TREE_LIST.  */
18434               in_base_initializer = 1;
18435               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18436                 {
18437                   tree expanded_exprs;
18438
18439                   /* Expand the argument.  */
18440                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18441                   expanded_exprs 
18442                     = tsubst_pack_expansion (expr, argvec,
18443                                              tf_warning_or_error,
18444                                              NULL_TREE);
18445                   if (expanded_exprs == error_mark_node)
18446                     continue;
18447
18448                   /* Prepend each of the expanded expressions to the
18449                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18450                   for (i = 0; i < len; i++)
18451                     {
18452                       TREE_VEC_ELT (expanded_arguments, i) = 
18453                         tree_cons (NULL_TREE, 
18454                                    TREE_VEC_ELT (expanded_exprs, i),
18455                                    TREE_VEC_ELT (expanded_arguments, i));
18456                     }
18457                 }
18458               in_base_initializer = 0;
18459
18460               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18461                  since we built them backwards.  */
18462               for (i = 0; i < len; i++)
18463                 {
18464                   TREE_VEC_ELT (expanded_arguments, i) = 
18465                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
18466                 }
18467             }
18468         }
18469
18470       for (i = 0; i < len; ++i)
18471         {
18472           if (expanded_bases)
18473             {
18474               decl = TREE_VEC_ELT (expanded_bases, i);
18475               decl = expand_member_init (decl);
18476               init = TREE_VEC_ELT (expanded_arguments, i);
18477             }
18478           else
18479             {
18480               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
18481                                   tf_warning_or_error, NULL_TREE);
18482
18483               decl = expand_member_init (decl);
18484               if (decl && !DECL_P (decl))
18485                 in_base_initializer = 1;
18486
18487               init = TREE_VALUE (t);
18488               if (init != void_type_node)
18489                 init = tsubst_expr (init, argvec,
18490                                     tf_warning_or_error, NULL_TREE,
18491                                     /*integral_constant_expression_p=*/false);
18492               in_base_initializer = 0;
18493             }
18494
18495           if (decl)
18496             {
18497               init = build_tree_list (decl, init);
18498               TREE_CHAIN (init) = inits;
18499               inits = init;
18500             }
18501         }
18502     }
18503   return inits;
18504 }
18505
18506 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
18507
18508 static void
18509 set_current_access_from_decl (tree decl)
18510 {
18511   if (TREE_PRIVATE (decl))
18512     current_access_specifier = access_private_node;
18513   else if (TREE_PROTECTED (decl))
18514     current_access_specifier = access_protected_node;
18515   else
18516     current_access_specifier = access_public_node;
18517 }
18518
18519 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
18520    is the instantiation (which should have been created with
18521    start_enum) and ARGS are the template arguments to use.  */
18522
18523 static void
18524 tsubst_enum (tree tag, tree newtag, tree args)
18525 {
18526   tree e;
18527
18528   if (SCOPED_ENUM_P (newtag))
18529     begin_scope (sk_scoped_enum, newtag);
18530
18531   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
18532     {
18533       tree value;
18534       tree decl;
18535
18536       decl = TREE_VALUE (e);
18537       /* Note that in a template enum, the TREE_VALUE is the
18538          CONST_DECL, not the corresponding INTEGER_CST.  */
18539       value = tsubst_expr (DECL_INITIAL (decl),
18540                            args, tf_warning_or_error, NULL_TREE,
18541                            /*integral_constant_expression_p=*/true);
18542
18543       /* Give this enumeration constant the correct access.  */
18544       set_current_access_from_decl (decl);
18545
18546       /* Actually build the enumerator itself.  */
18547       build_enumerator
18548         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
18549     }
18550
18551   if (SCOPED_ENUM_P (newtag))
18552     finish_scope ();
18553
18554   finish_enum_value_list (newtag);
18555   finish_enum (newtag);
18556
18557   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
18558     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
18559 }
18560
18561 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
18562    its type -- but without substituting the innermost set of template
18563    arguments.  So, innermost set of template parameters will appear in
18564    the type.  */
18565
18566 tree
18567 get_mostly_instantiated_function_type (tree decl)
18568 {
18569   tree fn_type;
18570   tree tmpl;
18571   tree targs;
18572   tree tparms;
18573   int parm_depth;
18574
18575   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
18576   targs = DECL_TI_ARGS (decl);
18577   tparms = DECL_TEMPLATE_PARMS (tmpl);
18578   parm_depth = TMPL_PARMS_DEPTH (tparms);
18579
18580   /* There should be as many levels of arguments as there are levels
18581      of parameters.  */
18582   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
18583
18584   fn_type = TREE_TYPE (tmpl);
18585
18586   if (parm_depth == 1)
18587     /* No substitution is necessary.  */
18588     ;
18589   else
18590     {
18591       int i;
18592       tree partial_args;
18593
18594       /* Replace the innermost level of the TARGS with NULL_TREEs to
18595          let tsubst know not to substitute for those parameters.  */
18596       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
18597       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
18598         SET_TMPL_ARGS_LEVEL (partial_args, i,
18599                              TMPL_ARGS_LEVEL (targs, i));
18600       SET_TMPL_ARGS_LEVEL (partial_args,
18601                            TMPL_ARGS_DEPTH (targs),
18602                            make_tree_vec (DECL_NTPARMS (tmpl)));
18603
18604       /* Make sure that we can see identifiers, and compute access
18605          correctly.  */
18606       push_access_scope (decl);
18607
18608       ++processing_template_decl;
18609       /* Now, do the (partial) substitution to figure out the
18610          appropriate function type.  */
18611       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
18612       --processing_template_decl;
18613
18614       /* Substitute into the template parameters to obtain the real
18615          innermost set of parameters.  This step is important if the
18616          innermost set of template parameters contains value
18617          parameters whose types depend on outer template parameters.  */
18618       TREE_VEC_LENGTH (partial_args)--;
18619       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
18620
18621       pop_access_scope (decl);
18622     }
18623
18624   return fn_type;
18625 }
18626
18627 /* Return truthvalue if we're processing a template different from
18628    the last one involved in diagnostics.  */
18629 int
18630 problematic_instantiation_changed (void)
18631 {
18632   return current_tinst_level != last_error_tinst_level;
18633 }
18634
18635 /* Remember current template involved in diagnostics.  */
18636 void
18637 record_last_problematic_instantiation (void)
18638 {
18639   last_error_tinst_level = current_tinst_level;
18640 }
18641
18642 struct tinst_level *
18643 current_instantiation (void)
18644 {
18645   return current_tinst_level;
18646 }
18647
18648 /* [temp.param] Check that template non-type parm TYPE is of an allowable
18649    type. Return zero for ok, nonzero for disallowed. Issue error and
18650    warning messages under control of COMPLAIN.  */
18651
18652 static int
18653 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
18654 {
18655   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
18656     return 0;
18657   else if (POINTER_TYPE_P (type))
18658     return 0;
18659   else if (TYPE_PTR_TO_MEMBER_P (type))
18660     return 0;
18661   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
18662     return 0;
18663   else if (TREE_CODE (type) == TYPENAME_TYPE)
18664     return 0;
18665   else if (TREE_CODE (type) == DECLTYPE_TYPE)
18666     return 0;
18667
18668   if (complain & tf_error)
18669     error ("%q#T is not a valid type for a template constant parameter", type);
18670   return 1;
18671 }
18672
18673 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
18674    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
18675
18676 static bool
18677 dependent_type_p_r (tree type)
18678 {
18679   tree scope;
18680
18681   /* [temp.dep.type]
18682
18683      A type is dependent if it is:
18684
18685      -- a template parameter. Template template parameters are types
18686         for us (since TYPE_P holds true for them) so we handle
18687         them here.  */
18688   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18689       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
18690     return true;
18691   /* -- a qualified-id with a nested-name-specifier which contains a
18692         class-name that names a dependent type or whose unqualified-id
18693         names a dependent type.  */
18694   if (TREE_CODE (type) == TYPENAME_TYPE)
18695     return true;
18696   /* -- a cv-qualified type where the cv-unqualified type is
18697         dependent.  */
18698   type = TYPE_MAIN_VARIANT (type);
18699   /* -- a compound type constructed from any dependent type.  */
18700   if (TYPE_PTR_TO_MEMBER_P (type))
18701     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
18702             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
18703                                            (type)));
18704   else if (TREE_CODE (type) == POINTER_TYPE
18705            || TREE_CODE (type) == REFERENCE_TYPE)
18706     return dependent_type_p (TREE_TYPE (type));
18707   else if (TREE_CODE (type) == FUNCTION_TYPE
18708            || TREE_CODE (type) == METHOD_TYPE)
18709     {
18710       tree arg_type;
18711
18712       if (dependent_type_p (TREE_TYPE (type)))
18713         return true;
18714       for (arg_type = TYPE_ARG_TYPES (type);
18715            arg_type;
18716            arg_type = TREE_CHAIN (arg_type))
18717         if (dependent_type_p (TREE_VALUE (arg_type)))
18718           return true;
18719       return false;
18720     }
18721   /* -- an array type constructed from any dependent type or whose
18722         size is specified by a constant expression that is
18723         value-dependent.
18724
18725         We checked for type- and value-dependence of the bounds in
18726         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
18727   if (TREE_CODE (type) == ARRAY_TYPE)
18728     {
18729       if (TYPE_DOMAIN (type)
18730           && dependent_type_p (TYPE_DOMAIN (type)))
18731         return true;
18732       return dependent_type_p (TREE_TYPE (type));
18733     }
18734
18735   /* -- a template-id in which either the template name is a template
18736      parameter ...  */
18737   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
18738     return true;
18739   /* ... or any of the template arguments is a dependent type or
18740         an expression that is type-dependent or value-dependent.  */
18741   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
18742            && (any_dependent_template_arguments_p
18743                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
18744     return true;
18745
18746   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
18747      dependent; if the argument of the `typeof' expression is not
18748      type-dependent, then it should already been have resolved.  */
18749   if (TREE_CODE (type) == TYPEOF_TYPE
18750       || TREE_CODE (type) == DECLTYPE_TYPE
18751       || TREE_CODE (type) == UNDERLYING_TYPE)
18752     return true;
18753
18754   /* A template argument pack is dependent if any of its packed
18755      arguments are.  */
18756   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
18757     {
18758       tree args = ARGUMENT_PACK_ARGS (type);
18759       int i, len = TREE_VEC_LENGTH (args);
18760       for (i = 0; i < len; ++i)
18761         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18762           return true;
18763     }
18764
18765   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
18766      be template parameters.  */
18767   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
18768     return true;
18769
18770   /* The standard does not specifically mention types that are local
18771      to template functions or local classes, but they should be
18772      considered dependent too.  For example:
18773
18774        template <int I> void f() {
18775          enum E { a = I };
18776          S<sizeof (E)> s;
18777        }
18778
18779      The size of `E' cannot be known until the value of `I' has been
18780      determined.  Therefore, `E' must be considered dependent.  */
18781   scope = TYPE_CONTEXT (type);
18782   if (scope && TYPE_P (scope))
18783     return dependent_type_p (scope);
18784   /* Don't use type_dependent_expression_p here, as it can lead
18785      to infinite recursion trying to determine whether a lambda
18786      nested in a lambda is dependent (c++/47687).  */
18787   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
18788            && DECL_LANG_SPECIFIC (scope)
18789            && DECL_TEMPLATE_INFO (scope)
18790            && (any_dependent_template_arguments_p
18791                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
18792     return true;
18793
18794   /* Other types are non-dependent.  */
18795   return false;
18796 }
18797
18798 /* Returns TRUE if TYPE is dependent, in the sense of
18799    [temp.dep.type].  Note that a NULL type is considered dependent.  */
18800
18801 bool
18802 dependent_type_p (tree type)
18803 {
18804   /* If there are no template parameters in scope, then there can't be
18805      any dependent types.  */
18806   if (!processing_template_decl)
18807     {
18808       /* If we are not processing a template, then nobody should be
18809          providing us with a dependent type.  */
18810       gcc_assert (type);
18811       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
18812       return false;
18813     }
18814
18815   /* If the type is NULL, we have not computed a type for the entity
18816      in question; in that case, the type is dependent.  */
18817   if (!type)
18818     return true;
18819
18820   /* Erroneous types can be considered non-dependent.  */
18821   if (type == error_mark_node)
18822     return false;
18823
18824   /* If we have not already computed the appropriate value for TYPE,
18825      do so now.  */
18826   if (!TYPE_DEPENDENT_P_VALID (type))
18827     {
18828       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
18829       TYPE_DEPENDENT_P_VALID (type) = 1;
18830     }
18831
18832   return TYPE_DEPENDENT_P (type);
18833 }
18834
18835 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
18836    lookup.  In other words, a dependent type that is not the current
18837    instantiation.  */
18838
18839 bool
18840 dependent_scope_p (tree scope)
18841 {
18842   return (scope && TYPE_P (scope) && dependent_type_p (scope)
18843           && !currently_open_class (scope));
18844 }
18845
18846 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
18847    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
18848    expression.  */
18849
18850 /* Note that this predicate is not appropriate for general expressions;
18851    only constant expressions (that satisfy potential_constant_expression)
18852    can be tested for value dependence.
18853
18854    We should really also have a predicate for "instantiation-dependent".
18855
18856    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
18857      (what about instantiation-dependent constant-expressions?)
18858    is_late_template_attribute: defer if instantiation-dependent.
18859    compute_array_index_type: proceed if constant and not t- or v-dependent
18860      if instantiation-dependent, need to remember full expression
18861    uses_template_parms: FIXME - need to audit callers
18862    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
18863    dependent_type_p [array_type]: dependent if index type is dependent
18864      (or non-constant?)
18865    static_assert - instantiation-dependent */
18866
18867 bool
18868 value_dependent_expression_p (tree expression)
18869 {
18870   if (!processing_template_decl)
18871     return false;
18872
18873   /* A name declared with a dependent type.  */
18874   if (DECL_P (expression) && type_dependent_expression_p (expression))
18875     return true;
18876
18877   switch (TREE_CODE (expression))
18878     {
18879     case IDENTIFIER_NODE:
18880       /* A name that has not been looked up -- must be dependent.  */
18881       return true;
18882
18883     case TEMPLATE_PARM_INDEX:
18884       /* A non-type template parm.  */
18885       return true;
18886
18887     case CONST_DECL:
18888       /* A non-type template parm.  */
18889       if (DECL_TEMPLATE_PARM_P (expression))
18890         return true;
18891       return value_dependent_expression_p (DECL_INITIAL (expression));
18892
18893     case VAR_DECL:
18894        /* A constant with literal type and is initialized
18895           with an expression that is value-dependent.  */
18896       if (DECL_INITIAL (expression)
18897           && decl_constant_var_p (expression)
18898           && value_dependent_expression_p (DECL_INITIAL (expression)))
18899         return true;
18900       return false;
18901
18902     case DYNAMIC_CAST_EXPR:
18903     case STATIC_CAST_EXPR:
18904     case CONST_CAST_EXPR:
18905     case REINTERPRET_CAST_EXPR:
18906     case CAST_EXPR:
18907       /* These expressions are value-dependent if the type to which
18908          the cast occurs is dependent or the expression being casted
18909          is value-dependent.  */
18910       {
18911         tree type = TREE_TYPE (expression);
18912
18913         if (dependent_type_p (type))
18914           return true;
18915
18916         /* A functional cast has a list of operands.  */
18917         expression = TREE_OPERAND (expression, 0);
18918         if (!expression)
18919           {
18920             /* If there are no operands, it must be an expression such
18921                as "int()". This should not happen for aggregate types
18922                because it would form non-constant expressions.  */
18923             gcc_assert (cxx_dialect >= cxx0x
18924                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
18925
18926             return false;
18927           }
18928
18929         if (TREE_CODE (expression) == TREE_LIST)
18930           return any_value_dependent_elements_p (expression);
18931
18932         return value_dependent_expression_p (expression);
18933       }
18934
18935     case SIZEOF_EXPR:
18936     case ALIGNOF_EXPR:
18937     case TYPEID_EXPR:
18938       /* A `sizeof' expression is value-dependent if the operand is
18939          type-dependent or is a pack expansion.  */
18940       expression = TREE_OPERAND (expression, 0);
18941       if (PACK_EXPANSION_P (expression))
18942         return true;
18943       else if (TYPE_P (expression))
18944         return dependent_type_p (expression);
18945       return type_dependent_expression_p (expression);
18946
18947     case AT_ENCODE_EXPR:
18948       /* An 'encode' expression is value-dependent if the operand is
18949          type-dependent.  */
18950       expression = TREE_OPERAND (expression, 0);
18951       return dependent_type_p (expression);
18952
18953     case NOEXCEPT_EXPR:
18954       expression = TREE_OPERAND (expression, 0);
18955       return type_dependent_expression_p (expression);
18956
18957     case SCOPE_REF:
18958       {
18959         tree name = TREE_OPERAND (expression, 1);
18960         return value_dependent_expression_p (name);
18961       }
18962
18963     case COMPONENT_REF:
18964       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
18965               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
18966
18967     case NONTYPE_ARGUMENT_PACK:
18968       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
18969          is value-dependent.  */
18970       {
18971         tree values = ARGUMENT_PACK_ARGS (expression);
18972         int i, len = TREE_VEC_LENGTH (values);
18973         
18974         for (i = 0; i < len; ++i)
18975           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
18976             return true;
18977         
18978         return false;
18979       }
18980
18981     case TRAIT_EXPR:
18982       {
18983         tree type2 = TRAIT_EXPR_TYPE2 (expression);
18984         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
18985                 || (type2 ? dependent_type_p (type2) : false));
18986       }
18987
18988     case MODOP_EXPR:
18989       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18990               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
18991
18992     case ARRAY_REF:
18993       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18994               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
18995
18996     case ADDR_EXPR:
18997       {
18998         tree op = TREE_OPERAND (expression, 0);
18999         return (value_dependent_expression_p (op)
19000                 || has_value_dependent_address (op));
19001       }
19002
19003     case CALL_EXPR:
19004       {
19005         tree fn = get_callee_fndecl (expression);
19006         int i, nargs;
19007         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19008           return true;
19009         nargs = call_expr_nargs (expression);
19010         for (i = 0; i < nargs; ++i)
19011           {
19012             tree op = CALL_EXPR_ARG (expression, i);
19013             /* In a call to a constexpr member function, look through the
19014                implicit ADDR_EXPR on the object argument so that it doesn't
19015                cause the call to be considered value-dependent.  We also
19016                look through it in potential_constant_expression.  */
19017             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19018                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19019                 && TREE_CODE (op) == ADDR_EXPR)
19020               op = TREE_OPERAND (op, 0);
19021             if (value_dependent_expression_p (op))
19022               return true;
19023           }
19024         return false;
19025       }
19026
19027     case TEMPLATE_ID_EXPR:
19028       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19029          type-dependent.  */
19030       return type_dependent_expression_p (expression);
19031
19032     case CONSTRUCTOR:
19033       {
19034         unsigned ix;
19035         tree val;
19036         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19037           if (value_dependent_expression_p (val))
19038             return true;
19039         return false;
19040       }
19041
19042     default:
19043       /* A constant expression is value-dependent if any subexpression is
19044          value-dependent.  */
19045       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19046         {
19047         case tcc_reference:
19048         case tcc_unary:
19049         case tcc_comparison:
19050         case tcc_binary:
19051         case tcc_expression:
19052         case tcc_vl_exp:
19053           {
19054             int i, len = cp_tree_operand_length (expression);
19055
19056             for (i = 0; i < len; i++)
19057               {
19058                 tree t = TREE_OPERAND (expression, i);
19059
19060                 /* In some cases, some of the operands may be missing.l
19061                    (For example, in the case of PREDECREMENT_EXPR, the
19062                    amount to increment by may be missing.)  That doesn't
19063                    make the expression dependent.  */
19064                 if (t && value_dependent_expression_p (t))
19065                   return true;
19066               }
19067           }
19068           break;
19069         default:
19070           break;
19071         }
19072       break;
19073     }
19074
19075   /* The expression is not value-dependent.  */
19076   return false;
19077 }
19078
19079 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19080    [temp.dep.expr].  Note that an expression with no type is
19081    considered dependent.  Other parts of the compiler arrange for an
19082    expression with type-dependent subexpressions to have no type, so
19083    this function doesn't have to be fully recursive.  */
19084
19085 bool
19086 type_dependent_expression_p (tree expression)
19087 {
19088   if (!processing_template_decl)
19089     return false;
19090
19091   if (expression == error_mark_node)
19092     return false;
19093
19094   /* An unresolved name is always dependent.  */
19095   if (TREE_CODE (expression) == IDENTIFIER_NODE
19096       || TREE_CODE (expression) == USING_DECL)
19097     return true;
19098
19099   /* Some expression forms are never type-dependent.  */
19100   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19101       || TREE_CODE (expression) == SIZEOF_EXPR
19102       || TREE_CODE (expression) == ALIGNOF_EXPR
19103       || TREE_CODE (expression) == AT_ENCODE_EXPR
19104       || TREE_CODE (expression) == NOEXCEPT_EXPR
19105       || TREE_CODE (expression) == TRAIT_EXPR
19106       || TREE_CODE (expression) == TYPEID_EXPR
19107       || TREE_CODE (expression) == DELETE_EXPR
19108       || TREE_CODE (expression) == VEC_DELETE_EXPR
19109       || TREE_CODE (expression) == THROW_EXPR)
19110     return false;
19111
19112   /* The types of these expressions depends only on the type to which
19113      the cast occurs.  */
19114   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19115       || TREE_CODE (expression) == STATIC_CAST_EXPR
19116       || TREE_CODE (expression) == CONST_CAST_EXPR
19117       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19118       || TREE_CODE (expression) == CAST_EXPR)
19119     return dependent_type_p (TREE_TYPE (expression));
19120
19121   /* The types of these expressions depends only on the type created
19122      by the expression.  */
19123   if (TREE_CODE (expression) == NEW_EXPR
19124       || TREE_CODE (expression) == VEC_NEW_EXPR)
19125     {
19126       /* For NEW_EXPR tree nodes created inside a template, either
19127          the object type itself or a TREE_LIST may appear as the
19128          operand 1.  */
19129       tree type = TREE_OPERAND (expression, 1);
19130       if (TREE_CODE (type) == TREE_LIST)
19131         /* This is an array type.  We need to check array dimensions
19132            as well.  */
19133         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19134                || value_dependent_expression_p
19135                     (TREE_OPERAND (TREE_VALUE (type), 1));
19136       else
19137         return dependent_type_p (type);
19138     }
19139
19140   if (TREE_CODE (expression) == SCOPE_REF)
19141     {
19142       tree scope = TREE_OPERAND (expression, 0);
19143       tree name = TREE_OPERAND (expression, 1);
19144
19145       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19146          contains an identifier associated by name lookup with one or more
19147          declarations declared with a dependent type, or...a
19148          nested-name-specifier or qualified-id that names a member of an
19149          unknown specialization.  */
19150       return (type_dependent_expression_p (name)
19151               || dependent_scope_p (scope));
19152     }
19153
19154   if (TREE_CODE (expression) == FUNCTION_DECL
19155       && DECL_LANG_SPECIFIC (expression)
19156       && DECL_TEMPLATE_INFO (expression)
19157       && (any_dependent_template_arguments_p
19158           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19159     return true;
19160
19161   if (TREE_CODE (expression) == TEMPLATE_DECL
19162       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19163     return false;
19164
19165   if (TREE_CODE (expression) == STMT_EXPR)
19166     expression = stmt_expr_value_expr (expression);
19167
19168   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19169     {
19170       tree elt;
19171       unsigned i;
19172
19173       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19174         {
19175           if (type_dependent_expression_p (elt))
19176             return true;
19177         }
19178       return false;
19179     }
19180
19181   /* A static data member of the current instantiation with incomplete
19182      array type is type-dependent, as the definition and specializations
19183      can have different bounds.  */
19184   if (TREE_CODE (expression) == VAR_DECL
19185       && DECL_CLASS_SCOPE_P (expression)
19186       && dependent_type_p (DECL_CONTEXT (expression))
19187       && VAR_HAD_UNKNOWN_BOUND (expression))
19188     return true;
19189
19190   if (TREE_TYPE (expression) == unknown_type_node)
19191     {
19192       if (TREE_CODE (expression) == ADDR_EXPR)
19193         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19194       if (TREE_CODE (expression) == COMPONENT_REF
19195           || TREE_CODE (expression) == OFFSET_REF)
19196         {
19197           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19198             return true;
19199           expression = TREE_OPERAND (expression, 1);
19200           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19201             return false;
19202         }
19203       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19204       if (TREE_CODE (expression) == SCOPE_REF)
19205         return false;
19206
19207       if (TREE_CODE (expression) == BASELINK)
19208         expression = BASELINK_FUNCTIONS (expression);
19209
19210       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19211         {
19212           if (any_dependent_template_arguments_p
19213               (TREE_OPERAND (expression, 1)))
19214             return true;
19215           expression = TREE_OPERAND (expression, 0);
19216         }
19217       gcc_assert (TREE_CODE (expression) == OVERLOAD
19218                   || TREE_CODE (expression) == FUNCTION_DECL);
19219
19220       while (expression)
19221         {
19222           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19223             return true;
19224           expression = OVL_NEXT (expression);
19225         }
19226       return false;
19227     }
19228
19229   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19230
19231   return (dependent_type_p (TREE_TYPE (expression)));
19232 }
19233
19234 /* Like type_dependent_expression_p, but it also works while not processing
19235    a template definition, i.e. during substitution or mangling.  */
19236
19237 bool
19238 type_dependent_expression_p_push (tree expr)
19239 {
19240   bool b;
19241   ++processing_template_decl;
19242   b = type_dependent_expression_p (expr);
19243   --processing_template_decl;
19244   return b;
19245 }
19246
19247 /* Returns TRUE if ARGS contains a type-dependent expression.  */
19248
19249 bool
19250 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19251 {
19252   unsigned int i;
19253   tree arg;
19254
19255   FOR_EACH_VEC_ELT (tree, args, i, arg)
19256     {
19257       if (type_dependent_expression_p (arg))
19258         return true;
19259     }
19260   return false;
19261 }
19262
19263 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19264    expressions) contains any type-dependent expressions.  */
19265
19266 bool
19267 any_type_dependent_elements_p (const_tree list)
19268 {
19269   for (; list; list = TREE_CHAIN (list))
19270     if (value_dependent_expression_p (TREE_VALUE (list)))
19271       return true;
19272
19273   return false;
19274 }
19275
19276 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19277    expressions) contains any value-dependent expressions.  */
19278
19279 bool
19280 any_value_dependent_elements_p (const_tree list)
19281 {
19282   for (; list; list = TREE_CHAIN (list))
19283     if (value_dependent_expression_p (TREE_VALUE (list)))
19284       return true;
19285
19286   return false;
19287 }
19288
19289 /* Returns TRUE if the ARG (a template argument) is dependent.  */
19290
19291 bool
19292 dependent_template_arg_p (tree arg)
19293 {
19294   if (!processing_template_decl)
19295     return false;
19296
19297   /* Assume a template argument that was wrongly written by the user
19298      is dependent. This is consistent with what
19299      any_dependent_template_arguments_p [that calls this function]
19300      does.  */
19301   if (!arg || arg == error_mark_node)
19302     return true;
19303
19304   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19305     arg = ARGUMENT_PACK_SELECT_ARG (arg);
19306
19307   if (TREE_CODE (arg) == TEMPLATE_DECL
19308       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19309     return dependent_template_p (arg);
19310   else if (ARGUMENT_PACK_P (arg))
19311     {
19312       tree args = ARGUMENT_PACK_ARGS (arg);
19313       int i, len = TREE_VEC_LENGTH (args);
19314       for (i = 0; i < len; ++i)
19315         {
19316           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19317             return true;
19318         }
19319
19320       return false;
19321     }
19322   else if (TYPE_P (arg))
19323     return dependent_type_p (arg);
19324   else
19325     return (type_dependent_expression_p (arg)
19326             || value_dependent_expression_p (arg));
19327 }
19328
19329 /* Returns true if ARGS (a collection of template arguments) contains
19330    any types that require structural equality testing.  */
19331
19332 bool
19333 any_template_arguments_need_structural_equality_p (tree args)
19334 {
19335   int i;
19336   int j;
19337
19338   if (!args)
19339     return false;
19340   if (args == error_mark_node)
19341     return true;
19342
19343   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19344     {
19345       tree level = TMPL_ARGS_LEVEL (args, i + 1);
19346       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19347         {
19348           tree arg = TREE_VEC_ELT (level, j);
19349           tree packed_args = NULL_TREE;
19350           int k, len = 1;
19351
19352           if (ARGUMENT_PACK_P (arg))
19353             {
19354               /* Look inside the argument pack.  */
19355               packed_args = ARGUMENT_PACK_ARGS (arg);
19356               len = TREE_VEC_LENGTH (packed_args);
19357             }
19358
19359           for (k = 0; k < len; ++k)
19360             {
19361               if (packed_args)
19362                 arg = TREE_VEC_ELT (packed_args, k);
19363
19364               if (error_operand_p (arg))
19365                 return true;
19366               else if (TREE_CODE (arg) == TEMPLATE_DECL
19367                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19368                 continue;
19369               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19370                 return true;
19371               else if (!TYPE_P (arg) && TREE_TYPE (arg)
19372                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19373                 return true;
19374             }
19375         }
19376     }
19377
19378   return false;
19379 }
19380
19381 /* Returns true if ARGS (a collection of template arguments) contains
19382    any dependent arguments.  */
19383
19384 bool
19385 any_dependent_template_arguments_p (const_tree args)
19386 {
19387   int i;
19388   int j;
19389
19390   if (!args)
19391     return false;
19392   if (args == error_mark_node)
19393     return true;
19394
19395   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19396     {
19397       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19398       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19399         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19400           return true;
19401     }
19402
19403   return false;
19404 }
19405
19406 /* Returns TRUE if the template TMPL is dependent.  */
19407
19408 bool
19409 dependent_template_p (tree tmpl)
19410 {
19411   if (TREE_CODE (tmpl) == OVERLOAD)
19412     {
19413       while (tmpl)
19414         {
19415           if (dependent_template_p (OVL_CURRENT (tmpl)))
19416             return true;
19417           tmpl = OVL_NEXT (tmpl);
19418         }
19419       return false;
19420     }
19421
19422   /* Template template parameters are dependent.  */
19423   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19424       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19425     return true;
19426   /* So are names that have not been looked up.  */
19427   if (TREE_CODE (tmpl) == SCOPE_REF
19428       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19429     return true;
19430   /* So are member templates of dependent classes.  */
19431   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19432     return dependent_type_p (DECL_CONTEXT (tmpl));
19433   return false;
19434 }
19435
19436 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19437
19438 bool
19439 dependent_template_id_p (tree tmpl, tree args)
19440 {
19441   return (dependent_template_p (tmpl)
19442           || any_dependent_template_arguments_p (args));
19443 }
19444
19445 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19446    is dependent.  */
19447
19448 bool
19449 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19450 {
19451   int i;
19452
19453   if (!processing_template_decl)
19454     return false;
19455
19456   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19457     {
19458       tree decl = TREE_VEC_ELT (declv, i);
19459       tree init = TREE_VEC_ELT (initv, i);
19460       tree cond = TREE_VEC_ELT (condv, i);
19461       tree incr = TREE_VEC_ELT (incrv, i);
19462
19463       if (type_dependent_expression_p (decl))
19464         return true;
19465
19466       if (init && type_dependent_expression_p (init))
19467         return true;
19468
19469       if (type_dependent_expression_p (cond))
19470         return true;
19471
19472       if (COMPARISON_CLASS_P (cond)
19473           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19474               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19475         return true;
19476
19477       if (TREE_CODE (incr) == MODOP_EXPR)
19478         {
19479           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19480               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19481             return true;
19482         }
19483       else if (type_dependent_expression_p (incr))
19484         return true;
19485       else if (TREE_CODE (incr) == MODIFY_EXPR)
19486         {
19487           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
19488             return true;
19489           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
19490             {
19491               tree t = TREE_OPERAND (incr, 1);
19492               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19493                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19494                 return true;
19495             }
19496         }
19497     }
19498
19499   return false;
19500 }
19501
19502 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
19503    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
19504    no such TYPE can be found.  Note that this function peers inside
19505    uninstantiated templates and therefore should be used only in
19506    extremely limited situations.  ONLY_CURRENT_P restricts this
19507    peering to the currently open classes hierarchy (which is required
19508    when comparing types).  */
19509
19510 tree
19511 resolve_typename_type (tree type, bool only_current_p)
19512 {
19513   tree scope;
19514   tree name;
19515   tree decl;
19516   int quals;
19517   tree pushed_scope;
19518   tree result;
19519
19520   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
19521
19522   scope = TYPE_CONTEXT (type);
19523   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
19524      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
19525      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
19526      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
19527      identifier  of the TYPENAME_TYPE anymore.
19528      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
19529      TYPENAME_TYPE instead, we avoid messing up with a possible
19530      typedef variant case.  */
19531   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
19532
19533   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
19534      it first before we can figure out what NAME refers to.  */
19535   if (TREE_CODE (scope) == TYPENAME_TYPE)
19536     scope = resolve_typename_type (scope, only_current_p);
19537   /* If we don't know what SCOPE refers to, then we cannot resolve the
19538      TYPENAME_TYPE.  */
19539   if (TREE_CODE (scope) == TYPENAME_TYPE)
19540     return type;
19541   /* If the SCOPE is a template type parameter, we have no way of
19542      resolving the name.  */
19543   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
19544     return type;
19545   /* If the SCOPE is not the current instantiation, there's no reason
19546      to look inside it.  */
19547   if (only_current_p && !currently_open_class (scope))
19548     return type;
19549   /* If this is a typedef, we don't want to look inside (c++/11987).  */
19550   if (typedef_variant_p (type))
19551     return type;
19552   /* If SCOPE isn't the template itself, it will not have a valid
19553      TYPE_FIELDS list.  */
19554   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
19555     /* scope is either the template itself or a compatible instantiation
19556        like X<T>, so look up the name in the original template.  */
19557     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
19558   else
19559     /* scope is a partial instantiation, so we can't do the lookup or we
19560        will lose the template arguments.  */
19561     return type;
19562   /* Enter the SCOPE so that name lookup will be resolved as if we
19563      were in the class definition.  In particular, SCOPE will no
19564      longer be considered a dependent type.  */
19565   pushed_scope = push_scope (scope);
19566   /* Look up the declaration.  */
19567   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
19568
19569   result = NULL_TREE;
19570   
19571   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
19572      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
19573   if (!decl)
19574     /*nop*/;
19575   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
19576            && TREE_CODE (decl) == TYPE_DECL)
19577     {
19578       result = TREE_TYPE (decl);
19579       if (result == error_mark_node)
19580         result = NULL_TREE;
19581     }
19582   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
19583            && DECL_CLASS_TEMPLATE_P (decl))
19584     {
19585       tree tmpl;
19586       tree args;
19587       /* Obtain the template and the arguments.  */
19588       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
19589       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
19590       /* Instantiate the template.  */
19591       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
19592                                       /*entering_scope=*/0,
19593                                       tf_error | tf_user);
19594       if (result == error_mark_node)
19595         result = NULL_TREE;
19596     }
19597   
19598   /* Leave the SCOPE.  */
19599   if (pushed_scope)
19600     pop_scope (pushed_scope);
19601
19602   /* If we failed to resolve it, return the original typename.  */
19603   if (!result)
19604     return type;
19605   
19606   /* If lookup found a typename type, resolve that too.  */
19607   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
19608     {
19609       /* Ill-formed programs can cause infinite recursion here, so we
19610          must catch that.  */
19611       TYPENAME_IS_RESOLVING_P (type) = 1;
19612       result = resolve_typename_type (result, only_current_p);
19613       TYPENAME_IS_RESOLVING_P (type) = 0;
19614     }
19615   
19616   /* Qualify the resulting type.  */
19617   quals = cp_type_quals (type);
19618   if (quals)
19619     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
19620
19621   return result;
19622 }
19623
19624 /* EXPR is an expression which is not type-dependent.  Return a proxy
19625    for EXPR that can be used to compute the types of larger
19626    expressions containing EXPR.  */
19627
19628 tree
19629 build_non_dependent_expr (tree expr)
19630 {
19631   tree inner_expr;
19632
19633 #ifdef ENABLE_CHECKING
19634   /* Try to get a constant value for all non-type-dependent expressions in
19635       order to expose bugs in *_dependent_expression_p and constexpr.  */
19636   if (cxx_dialect >= cxx0x)
19637     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
19638 #endif
19639
19640   /* Preserve OVERLOADs; the functions must be available to resolve
19641      types.  */
19642   inner_expr = expr;
19643   if (TREE_CODE (inner_expr) == STMT_EXPR)
19644     inner_expr = stmt_expr_value_expr (inner_expr);
19645   if (TREE_CODE (inner_expr) == ADDR_EXPR)
19646     inner_expr = TREE_OPERAND (inner_expr, 0);
19647   if (TREE_CODE (inner_expr) == COMPONENT_REF)
19648     inner_expr = TREE_OPERAND (inner_expr, 1);
19649   if (is_overloaded_fn (inner_expr)
19650       || TREE_CODE (inner_expr) == OFFSET_REF)
19651     return expr;
19652   /* There is no need to return a proxy for a variable.  */
19653   if (TREE_CODE (expr) == VAR_DECL)
19654     return expr;
19655   /* Preserve string constants; conversions from string constants to
19656      "char *" are allowed, even though normally a "const char *"
19657      cannot be used to initialize a "char *".  */
19658   if (TREE_CODE (expr) == STRING_CST)
19659     return expr;
19660   /* Preserve arithmetic constants, as an optimization -- there is no
19661      reason to create a new node.  */
19662   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
19663     return expr;
19664   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
19665      There is at least one place where we want to know that a
19666      particular expression is a throw-expression: when checking a ?:
19667      expression, there are special rules if the second or third
19668      argument is a throw-expression.  */
19669   if (TREE_CODE (expr) == THROW_EXPR)
19670     return expr;
19671
19672   if (TREE_CODE (expr) == COND_EXPR)
19673     return build3 (COND_EXPR,
19674                    TREE_TYPE (expr),
19675                    TREE_OPERAND (expr, 0),
19676                    (TREE_OPERAND (expr, 1)
19677                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
19678                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
19679                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
19680   if (TREE_CODE (expr) == COMPOUND_EXPR
19681       && !COMPOUND_EXPR_OVERLOADED (expr))
19682     return build2 (COMPOUND_EXPR,
19683                    TREE_TYPE (expr),
19684                    TREE_OPERAND (expr, 0),
19685                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
19686
19687   /* If the type is unknown, it can't really be non-dependent */
19688   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
19689
19690   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
19691   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
19692 }
19693
19694 /* ARGS is a vector of expressions as arguments to a function call.
19695    Replace the arguments with equivalent non-dependent expressions.
19696    This modifies ARGS in place.  */
19697
19698 void
19699 make_args_non_dependent (VEC(tree,gc) *args)
19700 {
19701   unsigned int ix;
19702   tree arg;
19703
19704   FOR_EACH_VEC_ELT (tree, args, ix, arg)
19705     {
19706       tree newarg = build_non_dependent_expr (arg);
19707       if (newarg != arg)
19708         VEC_replace (tree, args, ix, newarg);
19709     }
19710 }
19711
19712 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
19713    with a level one deeper than the actual template parms.  */
19714
19715 tree
19716 make_auto (void)
19717 {
19718   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
19719   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
19720                                TYPE_DECL, get_identifier ("auto"), au);
19721   TYPE_STUB_DECL (au) = TYPE_NAME (au);
19722   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
19723     (0, processing_template_decl + 1, processing_template_decl + 1,
19724      0, TYPE_NAME (au), NULL_TREE);
19725   TYPE_CANONICAL (au) = canonical_type_parameter (au);
19726   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
19727   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
19728
19729   return au;
19730 }
19731
19732 /* Given type ARG, return std::initializer_list<ARG>.  */
19733
19734 static tree
19735 listify (tree arg)
19736 {
19737   tree std_init_list = namespace_binding
19738     (get_identifier ("initializer_list"), std_node);
19739   tree argvec;
19740   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
19741     {    
19742       error ("deducing from brace-enclosed initializer list requires "
19743              "#include <initializer_list>");
19744       return error_mark_node;
19745     }
19746   argvec = make_tree_vec (1);
19747   TREE_VEC_ELT (argvec, 0) = arg;
19748   return lookup_template_class (std_init_list, argvec, NULL_TREE,
19749                                 NULL_TREE, 0, tf_warning_or_error);
19750 }
19751
19752 /* Replace auto in TYPE with std::initializer_list<auto>.  */
19753
19754 static tree
19755 listify_autos (tree type, tree auto_node)
19756 {
19757   tree init_auto = listify (auto_node);
19758   tree argvec = make_tree_vec (1);
19759   TREE_VEC_ELT (argvec, 0) = init_auto;
19760   if (processing_template_decl)
19761     argvec = add_to_template_args (current_template_args (), argvec);
19762   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19763 }
19764
19765 /* walk_tree helper for do_auto_deduction.  */
19766
19767 static tree
19768 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
19769                  void *type)
19770 {
19771   /* Is this a variable with the type we're looking for?  */
19772   if (DECL_P (*tp)
19773       && TREE_TYPE (*tp) == type)
19774     return *tp;
19775   else
19776     return NULL_TREE;
19777 }
19778
19779 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
19780    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
19781
19782 tree
19783 do_auto_deduction (tree type, tree init, tree auto_node)
19784 {
19785   tree parms, tparms, targs;
19786   tree args[1];
19787   tree decl;
19788   int val;
19789
19790   if (processing_template_decl
19791       && (TREE_TYPE (init) == NULL_TREE
19792           || BRACE_ENCLOSED_INITIALIZER_P (init)))
19793     /* Not enough information to try this yet.  */
19794     return type;
19795
19796   /* The name of the object being declared shall not appear in the
19797      initializer expression.  */
19798   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
19799   if (decl)
19800     {
19801       error ("variable %q#D with %<auto%> type used in its own "
19802              "initializer", decl);
19803       return error_mark_node;
19804     }
19805
19806   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
19807      with either a new invented type template parameter U or, if the
19808      initializer is a braced-init-list (8.5.4), with
19809      std::initializer_list<U>.  */
19810   if (BRACE_ENCLOSED_INITIALIZER_P (init))
19811     type = listify_autos (type, auto_node);
19812
19813   init = resolve_nondeduced_context (init);
19814
19815   parms = build_tree_list (NULL_TREE, type);
19816   args[0] = init;
19817   tparms = make_tree_vec (1);
19818   targs = make_tree_vec (1);
19819   TREE_VEC_ELT (tparms, 0)
19820     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
19821   val = type_unification_real (tparms, targs, parms, args, 1, 0,
19822                                DEDUCE_CALL, LOOKUP_NORMAL,
19823                                /*explain_p=*/false);
19824   if (val > 0)
19825     {
19826       if (processing_template_decl)
19827         /* Try again at instantiation time.  */
19828         return type;
19829       if (type && type != error_mark_node)
19830         /* If type is error_mark_node a diagnostic must have been
19831            emitted by now.  Also, having a mention to '<type error>'
19832            in the diagnostic is not really useful to the user.  */
19833         error ("unable to deduce %qT from %qE", type, init);
19834       return error_mark_node;
19835     }
19836
19837   /* If the list of declarators contains more than one declarator, the type
19838      of each declared variable is determined as described above. If the
19839      type deduced for the template parameter U is not the same in each
19840      deduction, the program is ill-formed.  */
19841   if (TREE_TYPE (auto_node)
19842       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
19843     {
19844       error ("inconsistent deduction for %qT: %qT and then %qT",
19845              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
19846       return error_mark_node;
19847     }
19848   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
19849
19850   if (processing_template_decl)
19851     targs = add_to_template_args (current_template_args (), targs);
19852   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
19853 }
19854
19855 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
19856    result.  */
19857
19858 tree
19859 splice_late_return_type (tree type, tree late_return_type)
19860 {
19861   tree argvec;
19862
19863   if (late_return_type == NULL_TREE)
19864     return type;
19865   argvec = make_tree_vec (1);
19866   TREE_VEC_ELT (argvec, 0) = late_return_type;
19867   if (processing_template_parmlist)
19868     /* For a late-specified return type in a template type-parameter, we
19869        need to add a dummy argument level for its parmlist.  */
19870     argvec = add_to_template_args
19871       (make_tree_vec (processing_template_parmlist), argvec);
19872   if (current_template_parms)
19873     argvec = add_to_template_args (current_template_args (), argvec);
19874   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19875 }
19876
19877 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
19878
19879 bool
19880 is_auto (const_tree type)
19881 {
19882   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19883       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
19884     return true;
19885   else
19886     return false;
19887 }
19888
19889 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
19890    appear as a type-specifier for the declaration in question, we don't
19891    have to look through the whole type.  */
19892
19893 tree
19894 type_uses_auto (tree type)
19895 {
19896   enum tree_code code;
19897   if (is_auto (type))
19898     return type;
19899
19900   code = TREE_CODE (type);
19901
19902   if (code == POINTER_TYPE || code == REFERENCE_TYPE
19903       || code == OFFSET_TYPE || code == FUNCTION_TYPE
19904       || code == METHOD_TYPE || code == ARRAY_TYPE)
19905     return type_uses_auto (TREE_TYPE (type));
19906
19907   if (TYPE_PTRMEMFUNC_P (type))
19908     return type_uses_auto (TREE_TYPE (TREE_TYPE
19909                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
19910
19911   return NULL_TREE;
19912 }
19913
19914 /* For a given template T, return the vector of typedefs referenced
19915    in T for which access check is needed at T instantiation time.
19916    T is either  a FUNCTION_DECL or a RECORD_TYPE.
19917    Those typedefs were added to T by the function
19918    append_type_to_template_for_access_check.  */
19919
19920 VEC(qualified_typedef_usage_t,gc)*
19921 get_types_needing_access_check (tree t)
19922 {
19923   tree ti;
19924   VEC(qualified_typedef_usage_t,gc) *result = NULL;
19925
19926   if (!t || t == error_mark_node)
19927     return NULL;
19928
19929   if (!(ti = get_template_info (t)))
19930     return NULL;
19931
19932   if (CLASS_TYPE_P (t)
19933       || TREE_CODE (t) == FUNCTION_DECL)
19934     {
19935       if (!TI_TEMPLATE (ti))
19936         return NULL;
19937
19938       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
19939     }
19940
19941   return result;
19942 }
19943
19944 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
19945    tied to T. That list of typedefs will be access checked at
19946    T instantiation time.
19947    T is either a FUNCTION_DECL or a RECORD_TYPE.
19948    TYPE_DECL is a TYPE_DECL node representing a typedef.
19949    SCOPE is the scope through which TYPE_DECL is accessed.
19950    LOCATION is the location of the usage point of TYPE_DECL.
19951
19952    This function is a subroutine of
19953    append_type_to_template_for_access_check.  */
19954
19955 static void
19956 append_type_to_template_for_access_check_1 (tree t,
19957                                             tree type_decl,
19958                                             tree scope,
19959                                             location_t location)
19960 {
19961   qualified_typedef_usage_t typedef_usage;
19962   tree ti;
19963
19964   if (!t || t == error_mark_node)
19965     return;
19966
19967   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
19968                || CLASS_TYPE_P (t))
19969               && type_decl
19970               && TREE_CODE (type_decl) == TYPE_DECL
19971               && scope);
19972
19973   if (!(ti = get_template_info (t)))
19974     return;
19975
19976   gcc_assert (TI_TEMPLATE (ti));
19977
19978   typedef_usage.typedef_decl = type_decl;
19979   typedef_usage.context = scope;
19980   typedef_usage.locus = location;
19981
19982   VEC_safe_push (qualified_typedef_usage_t, gc,
19983                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
19984                  &typedef_usage);
19985 }
19986
19987 /* Append TYPE_DECL to the template TEMPL.
19988    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
19989    At TEMPL instanciation time, TYPE_DECL will be checked to see
19990    if it can be accessed through SCOPE.
19991    LOCATION is the location of the usage point of TYPE_DECL.
19992
19993    e.g. consider the following code snippet:
19994
19995      class C
19996      {
19997        typedef int myint;
19998      };
19999
20000      template<class U> struct S
20001      {
20002        C::myint mi; // <-- usage point of the typedef C::myint
20003      };
20004
20005      S<char> s;
20006
20007    At S<char> instantiation time, we need to check the access of C::myint
20008    In other words, we need to check the access of the myint typedef through
20009    the C scope. For that purpose, this function will add the myint typedef
20010    and the scope C through which its being accessed to a list of typedefs
20011    tied to the template S. That list will be walked at template instantiation
20012    time and access check performed on each typedefs it contains.
20013    Note that this particular code snippet should yield an error because
20014    myint is private to C.  */
20015
20016 void
20017 append_type_to_template_for_access_check (tree templ,
20018                                           tree type_decl,
20019                                           tree scope,
20020                                           location_t location)
20021 {
20022   qualified_typedef_usage_t *iter;
20023   int i;
20024
20025   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20026
20027   /* Make sure we don't append the type to the template twice.  */
20028   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20029                     get_types_needing_access_check (templ),
20030                     i, iter)
20031     if (iter->typedef_decl == type_decl && scope == iter->context)
20032       return;
20033
20034   append_type_to_template_for_access_check_1 (templ, type_decl,
20035                                               scope, location);
20036 }
20037
20038 /* Set up the hash tables for template instantiations.  */
20039
20040 void
20041 init_template_processing (void)
20042 {
20043   decl_specializations = htab_create_ggc (37,
20044                                           hash_specialization,
20045                                           eq_specializations,
20046                                           ggc_free);
20047   type_specializations = htab_create_ggc (37,
20048                                           hash_specialization,
20049                                           eq_specializations,
20050                                           ggc_free);
20051 }
20052
20053 /* Print stats about the template hash tables for -fstats.  */
20054
20055 void
20056 print_template_statistics (void)
20057 {
20058   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20059            "%f collisions\n", (long) htab_size (decl_specializations),
20060            (long) htab_elements (decl_specializations),
20061            htab_collisions (decl_specializations));
20062   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20063            "%f collisions\n", (long) htab_size (type_specializations),
20064            (long) htab_elements (type_specializations),
20065            htab_collisions (type_specializations));
20066 }
20067
20068 #include "gt-cp-pt.h"