OSDN Git Service

PR c++/6057
[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, unification_kind_t, bool, bool);
169 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
171 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
172 static void regenerate_decl_from_template (tree, tree);
173 static tree most_specialized_class (tree, tree, tsubst_flags_t);
174 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
175 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
176 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
177 static bool check_specialization_scope (void);
178 static tree process_partial_specialization (tree);
179 static void set_current_access_from_decl (tree);
180 static enum template_base_result get_template_base (tree, tree, tree, tree,
181                                                     bool , tree *);
182 static tree try_class_unification (tree, tree, tree, tree, bool);
183 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
184                                            tree, tree);
185 static bool template_template_parm_bindings_ok_p (tree, tree);
186 static int template_args_equal (tree, tree);
187 static void tsubst_default_arguments (tree);
188 static tree for_each_template_parm_r (tree *, int *, void *);
189 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
190 static void copy_default_args_to_explicit_spec (tree);
191 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
192 static int eq_local_specializations (const void *, const void *);
193 static bool dependent_template_arg_p (tree);
194 static bool any_template_arguments_need_structural_equality_p (tree);
195 static bool dependent_type_p_r (tree);
196 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
197 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
198 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
199 static tree tsubst_decl (tree, tree, tsubst_flags_t);
200 static void perform_typedefs_access_check (tree tmpl, tree targs);
201 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
202                                                         location_t);
203 static tree listify (tree);
204 static tree listify_autos (tree, tree);
205 static tree template_parm_to_arg (tree t);
206 static bool arg_from_parm_pack_p (tree, tree);
207 static tree current_template_args (void);
208 static tree fixup_template_type_parm_type (tree, int);
209 static tree fixup_template_parm_index (tree, tree, int);
210 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
211
212 /* Make the current scope suitable for access checking when we are
213    processing T.  T can be FUNCTION_DECL for instantiated function
214    template, or VAR_DECL for static member variable (need by
215    instantiate_decl).  */
216
217 static void
218 push_access_scope (tree t)
219 {
220   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
221               || TREE_CODE (t) == VAR_DECL);
222
223   if (DECL_FRIEND_CONTEXT (t))
224     push_nested_class (DECL_FRIEND_CONTEXT (t));
225   else if (DECL_CLASS_SCOPE_P (t))
226     push_nested_class (DECL_CONTEXT (t));
227   else
228     push_to_top_level ();
229
230   if (TREE_CODE (t) == FUNCTION_DECL)
231     {
232       saved_access_scope = tree_cons
233         (NULL_TREE, current_function_decl, saved_access_scope);
234       current_function_decl = t;
235     }
236 }
237
238 /* Restore the scope set up by push_access_scope.  T is the node we
239    are processing.  */
240
241 static void
242 pop_access_scope (tree t)
243 {
244   if (TREE_CODE (t) == FUNCTION_DECL)
245     {
246       current_function_decl = TREE_VALUE (saved_access_scope);
247       saved_access_scope = TREE_CHAIN (saved_access_scope);
248     }
249
250   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
251     pop_nested_class ();
252   else
253     pop_from_top_level ();
254 }
255
256 /* Do any processing required when DECL (a member template
257    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
258    to DECL, unless it is a specialization, in which case the DECL
259    itself is returned.  */
260
261 tree
262 finish_member_template_decl (tree decl)
263 {
264   if (decl == error_mark_node)
265     return error_mark_node;
266
267   gcc_assert (DECL_P (decl));
268
269   if (TREE_CODE (decl) == TYPE_DECL)
270     {
271       tree type;
272
273       type = TREE_TYPE (decl);
274       if (type == error_mark_node)
275         return error_mark_node;
276       if (MAYBE_CLASS_TYPE_P (type)
277           && CLASSTYPE_TEMPLATE_INFO (type)
278           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
279         {
280           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
281           check_member_template (tmpl);
282           return tmpl;
283         }
284       return NULL_TREE;
285     }
286   else if (TREE_CODE (decl) == FIELD_DECL)
287     error ("data member %qD cannot be a member template", decl);
288   else if (DECL_TEMPLATE_INFO (decl))
289     {
290       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
291         {
292           check_member_template (DECL_TI_TEMPLATE (decl));
293           return DECL_TI_TEMPLATE (decl);
294         }
295       else
296         return decl;
297     }
298   else
299     error ("invalid member template declaration %qD", decl);
300
301   return error_mark_node;
302 }
303
304 /* Create a template info node.  */
305
306 tree
307 build_template_info (tree template_decl, tree template_args)
308 {
309   tree result = make_node (TEMPLATE_INFO);
310   TI_TEMPLATE (result) = template_decl;
311   TI_ARGS (result) = template_args;
312   return result;
313 }
314
315 /* Return the template info node corresponding to T, whatever T is.  */
316
317 tree
318 get_template_info (const_tree t)
319 {
320   tree tinfo = NULL_TREE;
321
322   if (!t || t == error_mark_node)
323     return NULL;
324
325   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
326     tinfo = DECL_TEMPLATE_INFO (t);
327
328   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
329     t = TREE_TYPE (t);
330
331   if (TAGGED_TYPE_P (t))
332     tinfo = TYPE_TEMPLATE_INFO (t);
333   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
334     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
335
336   return tinfo;
337 }
338
339 /* Returns the template nesting level of the indicated class TYPE.
340
341    For example, in:
342      template <class T>
343      struct A
344      {
345        template <class U>
346        struct B {};
347      };
348
349    A<T>::B<U> has depth two, while A<T> has depth one.
350    Both A<T>::B<int> and A<int>::B<U> have depth one, if
351    they are instantiations, not specializations.
352
353    This function is guaranteed to return 0 if passed NULL_TREE so
354    that, for example, `template_class_depth (current_class_type)' is
355    always safe.  */
356
357 int
358 template_class_depth (tree type)
359 {
360   int depth;
361
362   for (depth = 0;
363        type && TREE_CODE (type) != NAMESPACE_DECL;
364        type = (TREE_CODE (type) == FUNCTION_DECL)
365          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
366     {
367       tree tinfo = get_template_info (type);
368
369       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
370           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
371         ++depth;
372     }
373
374   return depth;
375 }
376
377 /* Subroutine of maybe_begin_member_template_processing.
378    Returns true if processing DECL needs us to push template parms.  */
379
380 static bool
381 inline_needs_template_parms (tree decl)
382 {
383   if (! DECL_TEMPLATE_INFO (decl))
384     return false;
385
386   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
387           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
388 }
389
390 /* Subroutine of maybe_begin_member_template_processing.
391    Push the template parms in PARMS, starting from LEVELS steps into the
392    chain, and ending at the beginning, since template parms are listed
393    innermost first.  */
394
395 static void
396 push_inline_template_parms_recursive (tree parmlist, int levels)
397 {
398   tree parms = TREE_VALUE (parmlist);
399   int i;
400
401   if (levels > 1)
402     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
403
404   ++processing_template_decl;
405   current_template_parms
406     = tree_cons (size_int (processing_template_decl),
407                  parms, current_template_parms);
408   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
409
410   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
411                NULL);
412   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
413     {
414       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
415
416       if (parm == error_mark_node)
417         continue;
418
419       gcc_assert (DECL_P (parm));
420
421       switch (TREE_CODE (parm))
422         {
423         case TYPE_DECL:
424         case TEMPLATE_DECL:
425           pushdecl (parm);
426           break;
427
428         case PARM_DECL:
429           {
430             /* Make a CONST_DECL as is done in process_template_parm.
431                It is ugly that we recreate this here; the original
432                version built in process_template_parm is no longer
433                available.  */
434             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
435                                     CONST_DECL, DECL_NAME (parm),
436                                     TREE_TYPE (parm));
437             DECL_ARTIFICIAL (decl) = 1;
438             TREE_CONSTANT (decl) = 1;
439             TREE_READONLY (decl) = 1;
440             DECL_INITIAL (decl) = DECL_INITIAL (parm);
441             SET_DECL_TEMPLATE_PARM_P (decl);
442             pushdecl (decl);
443           }
444           break;
445
446         default:
447           gcc_unreachable ();
448         }
449     }
450 }
451
452 /* Restore the template parameter context for a member template or
453    a friend template defined in a class definition.  */
454
455 void
456 maybe_begin_member_template_processing (tree decl)
457 {
458   tree parms;
459   int levels = 0;
460
461   if (inline_needs_template_parms (decl))
462     {
463       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
464       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
465
466       if (DECL_TEMPLATE_SPECIALIZATION (decl))
467         {
468           --levels;
469           parms = TREE_CHAIN (parms);
470         }
471
472       push_inline_template_parms_recursive (parms, levels);
473     }
474
475   /* Remember how many levels of template parameters we pushed so that
476      we can pop them later.  */
477   VEC_safe_push (int, heap, inline_parm_levels, levels);
478 }
479
480 /* Undo the effects of maybe_begin_member_template_processing.  */
481
482 void
483 maybe_end_member_template_processing (void)
484 {
485   int i;
486   int last;
487
488   if (VEC_length (int, inline_parm_levels) == 0)
489     return;
490
491   last = VEC_pop (int, inline_parm_levels);
492   for (i = 0; i < last; ++i)
493     {
494       --processing_template_decl;
495       current_template_parms = TREE_CHAIN (current_template_parms);
496       poplevel (0, 0, 0);
497     }
498 }
499
500 /* Return a new template argument vector which contains all of ARGS,
501    but has as its innermost set of arguments the EXTRA_ARGS.  */
502
503 static tree
504 add_to_template_args (tree args, tree extra_args)
505 {
506   tree new_args;
507   int extra_depth;
508   int i;
509   int j;
510
511   if (args == NULL_TREE || extra_args == error_mark_node)
512     return extra_args;
513
514   extra_depth = TMPL_ARGS_DEPTH (extra_args);
515   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
516
517   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
518     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
519
520   for (j = 1; j <= extra_depth; ++j, ++i)
521     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
522
523   return new_args;
524 }
525
526 /* Like add_to_template_args, but only the outermost ARGS are added to
527    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
528    (EXTRA_ARGS) levels are added.  This function is used to combine
529    the template arguments from a partial instantiation with the
530    template arguments used to attain the full instantiation from the
531    partial instantiation.  */
532
533 static tree
534 add_outermost_template_args (tree args, tree extra_args)
535 {
536   tree new_args;
537
538   /* If there are more levels of EXTRA_ARGS than there are ARGS,
539      something very fishy is going on.  */
540   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
541
542   /* If *all* the new arguments will be the EXTRA_ARGS, just return
543      them.  */
544   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
545     return extra_args;
546
547   /* For the moment, we make ARGS look like it contains fewer levels.  */
548   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
549
550   new_args = add_to_template_args (args, extra_args);
551
552   /* Now, we restore ARGS to its full dimensions.  */
553   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
554
555   return new_args;
556 }
557
558 /* Return the N levels of innermost template arguments from the ARGS.  */
559
560 tree
561 get_innermost_template_args (tree args, int n)
562 {
563   tree new_args;
564   int extra_levels;
565   int i;
566
567   gcc_assert (n >= 0);
568
569   /* If N is 1, just return the innermost set of template arguments.  */
570   if (n == 1)
571     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
572
573   /* If we're not removing anything, just return the arguments we were
574      given.  */
575   extra_levels = TMPL_ARGS_DEPTH (args) - n;
576   gcc_assert (extra_levels >= 0);
577   if (extra_levels == 0)
578     return args;
579
580   /* Make a new set of arguments, not containing the outer arguments.  */
581   new_args = make_tree_vec (n);
582   for (i = 1; i <= n; ++i)
583     SET_TMPL_ARGS_LEVEL (new_args, i,
584                          TMPL_ARGS_LEVEL (args, i + extra_levels));
585
586   return new_args;
587 }
588
589 /* The inverse of get_innermost_template_args: Return all but the innermost
590    EXTRA_LEVELS levels of template arguments from the ARGS.  */
591
592 static tree
593 strip_innermost_template_args (tree args, int extra_levels)
594 {
595   tree new_args;
596   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
597   int i;
598
599   gcc_assert (n >= 0);
600
601   /* If N is 1, just return the outermost set of template arguments.  */
602   if (n == 1)
603     return TMPL_ARGS_LEVEL (args, 1);
604
605   /* If we're not removing anything, just return the arguments we were
606      given.  */
607   gcc_assert (extra_levels >= 0);
608   if (extra_levels == 0)
609     return args;
610
611   /* Make a new set of arguments, not containing the inner arguments.  */
612   new_args = make_tree_vec (n);
613   for (i = 1; i <= n; ++i)
614     SET_TMPL_ARGS_LEVEL (new_args, i,
615                          TMPL_ARGS_LEVEL (args, i));
616
617   return new_args;
618 }
619
620 /* We've got a template header coming up; push to a new level for storing
621    the parms.  */
622
623 void
624 begin_template_parm_list (void)
625 {
626   /* We use a non-tag-transparent scope here, which causes pushtag to
627      put tags in this scope, rather than in the enclosing class or
628      namespace scope.  This is the right thing, since we want
629      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
630      global template class, push_template_decl handles putting the
631      TEMPLATE_DECL into top-level scope.  For a nested template class,
632      e.g.:
633
634        template <class T> struct S1 {
635          template <class T> struct S2 {};
636        };
637
638      pushtag contains special code to call pushdecl_with_scope on the
639      TEMPLATE_DECL for S2.  */
640   begin_scope (sk_template_parms, NULL);
641   ++processing_template_decl;
642   ++processing_template_parmlist;
643   note_template_header (0);
644 }
645
646 /* This routine is called when a specialization is declared.  If it is
647    invalid to declare a specialization here, an error is reported and
648    false is returned, otherwise this routine will return true.  */
649
650 static bool
651 check_specialization_scope (void)
652 {
653   tree scope = current_scope ();
654
655   /* [temp.expl.spec]
656
657      An explicit specialization shall be declared in the namespace of
658      which the template is a member, or, for member templates, in the
659      namespace of which the enclosing class or enclosing class
660      template is a member.  An explicit specialization of a member
661      function, member class or static data member of a class template
662      shall be declared in the namespace of which the class template
663      is a member.  */
664   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
665     {
666       error ("explicit specialization in non-namespace scope %qD", scope);
667       return false;
668     }
669
670   /* [temp.expl.spec]
671
672      In an explicit specialization declaration for a member of a class
673      template or a member template that appears in namespace scope,
674      the member template and some of its enclosing class templates may
675      remain unspecialized, except that the declaration shall not
676      explicitly specialize a class member template if its enclosing
677      class templates are not explicitly specialized as well.  */
678   if (current_template_parms)
679     {
680       error ("enclosing class templates are not explicitly specialized");
681       return false;
682     }
683
684   return true;
685 }
686
687 /* We've just seen template <>.  */
688
689 bool
690 begin_specialization (void)
691 {
692   begin_scope (sk_template_spec, NULL);
693   note_template_header (1);
694   return check_specialization_scope ();
695 }
696
697 /* Called at then end of processing a declaration preceded by
698    template<>.  */
699
700 void
701 end_specialization (void)
702 {
703   finish_scope ();
704   reset_specialization ();
705 }
706
707 /* Any template <>'s that we have seen thus far are not referring to a
708    function specialization.  */
709
710 void
711 reset_specialization (void)
712 {
713   processing_specialization = 0;
714   template_header_count = 0;
715 }
716
717 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
718    it was of the form template <>.  */
719
720 static void
721 note_template_header (int specialization)
722 {
723   processing_specialization = specialization;
724   template_header_count++;
725 }
726
727 /* We're beginning an explicit instantiation.  */
728
729 void
730 begin_explicit_instantiation (void)
731 {
732   gcc_assert (!processing_explicit_instantiation);
733   processing_explicit_instantiation = true;
734 }
735
736
737 void
738 end_explicit_instantiation (void)
739 {
740   gcc_assert (processing_explicit_instantiation);
741   processing_explicit_instantiation = false;
742 }
743
744 /* An explicit specialization or partial specialization TMPL is being
745    declared.  Check that the namespace in which the specialization is
746    occurring is permissible.  Returns false iff it is invalid to
747    specialize TMPL in the current namespace.  */
748
749 static bool
750 check_specialization_namespace (tree tmpl)
751 {
752   tree tpl_ns = decl_namespace_context (tmpl);
753
754   /* [tmpl.expl.spec]
755
756      An explicit specialization shall be declared in the namespace of
757      which the template is a member, or, for member templates, in the
758      namespace of which the enclosing class or enclosing class
759      template is a member.  An explicit specialization of a member
760      function, member class or static data member of a class template
761      shall be declared in the namespace of which the class template is
762      a member.  */
763   if (current_scope() != DECL_CONTEXT (tmpl)
764       && !at_namespace_scope_p ())
765     {
766       error ("specialization of %qD must appear at namespace scope", tmpl);
767       return false;
768     }
769   if (is_associated_namespace (current_namespace, tpl_ns))
770     /* Same or super-using namespace.  */
771     return true;
772   else
773     {
774       permerror (input_location, "specialization of %qD in different namespace", tmpl);
775       permerror (input_location, "  from definition of %q+#D", tmpl);
776       return false;
777     }
778 }
779
780 /* SPEC is an explicit instantiation.  Check that it is valid to
781    perform this explicit instantiation in the current namespace.  */
782
783 static void
784 check_explicit_instantiation_namespace (tree spec)
785 {
786   tree ns;
787
788   /* DR 275: An explicit instantiation shall appear in an enclosing
789      namespace of its template.  */
790   ns = decl_namespace_context (spec);
791   if (!is_ancestor (current_namespace, ns))
792     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
793                "(which does not enclose namespace %qD)",
794                spec, current_namespace, ns);
795 }
796
797 /* The TYPE is being declared.  If it is a template type, that means it
798    is a partial specialization.  Do appropriate error-checking.  */
799
800 tree
801 maybe_process_partial_specialization (tree type)
802 {
803   tree context;
804
805   if (type == error_mark_node)
806     return error_mark_node;
807
808   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
809     {
810       error ("name of class shadows template template parameter %qD",
811              TYPE_NAME (type));
812       return error_mark_node;
813     }
814
815   context = TYPE_CONTEXT (type);
816
817   if ((CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
818       /* Consider non-class instantiations of alias templates as
819          well.  */
820       || (TYPE_P (type)
821           && TYPE_TEMPLATE_INFO (type)
822           && DECL_LANG_SPECIFIC (TYPE_NAME (type))
823           && DECL_USE_TEMPLATE (TYPE_NAME (type))))
824     {
825       /* This is for ordinary explicit specialization and partial
826          specialization of a template class such as:
827
828            template <> class C<int>;
829
830          or:
831
832            template <class T> class C<T*>;
833
834          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
835
836       if (CLASS_TYPE_P (type)
837           && CLASSTYPE_IMPLICIT_INSTANTIATION (type)
838           && !COMPLETE_TYPE_P (type))
839         {
840           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
841           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
842           if (processing_template_decl)
843             {
844               if (push_template_decl (TYPE_MAIN_DECL (type))
845                   == error_mark_node)
846                 return error_mark_node;
847             }
848         }
849       else if (CLASS_TYPE_P (type)
850                && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
851         error ("specialization of %qT after instantiation", type);
852
853       if (DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
854         {
855           error ("partial specialization of alias template %qD",
856                  TYPE_TI_TEMPLATE (type));
857           return error_mark_node;
858         }
859     }
860   else if (CLASS_TYPE_P (type)
861            && !CLASSTYPE_USE_TEMPLATE (type)
862            && CLASSTYPE_TEMPLATE_INFO (type)
863            && context && CLASS_TYPE_P (context)
864            && CLASSTYPE_TEMPLATE_INFO (context))
865     {
866       /* This is for an explicit specialization of member class
867          template according to [temp.expl.spec/18]:
868
869            template <> template <class U> class C<int>::D;
870
871          The context `C<int>' must be an implicit instantiation.
872          Otherwise this is just a member class template declared
873          earlier like:
874
875            template <> class C<int> { template <class U> class D; };
876            template <> template <class U> class C<int>::D;
877
878          In the first case, `C<int>::D' is a specialization of `C<T>::D'
879          while in the second case, `C<int>::D' is a primary template
880          and `C<T>::D' may not exist.  */
881
882       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
883           && !COMPLETE_TYPE_P (type))
884         {
885           tree t;
886           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
887
888           if (current_namespace
889               != decl_namespace_context (tmpl))
890             {
891               permerror (input_location, "specializing %q#T in different namespace", type);
892               permerror (input_location, "  from definition of %q+#D", tmpl);
893             }
894
895           /* Check for invalid specialization after instantiation:
896
897                template <> template <> class C<int>::D<int>;
898                template <> template <class U> class C<int>::D;  */
899
900           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
901                t; t = TREE_CHAIN (t))
902             {
903               tree inst = TREE_VALUE (t);
904               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
905                 {
906                   /* We already have a full specialization of this partial
907                      instantiation.  Reassign it to the new member
908                      specialization template.  */
909                   spec_entry elt;
910                   spec_entry *entry;
911                   void **slot;
912
913                   elt.tmpl = most_general_template (tmpl);
914                   elt.args = CLASSTYPE_TI_ARGS (inst);
915                   elt.spec = inst;
916
917                   htab_remove_elt (type_specializations, &elt);
918
919                   elt.tmpl = tmpl;
920                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
921
922                   slot = htab_find_slot (type_specializations, &elt, INSERT);
923                   entry = ggc_alloc_spec_entry ();
924                   *entry = elt;
925                   *slot = entry;
926                 }
927               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
928                 /* But if we've had an implicit instantiation, that's a
929                    problem ([temp.expl.spec]/6).  */
930                 error ("specialization %qT after instantiation %qT",
931                        type, inst);
932             }
933
934           /* Mark TYPE as a specialization.  And as a result, we only
935              have one level of template argument for the innermost
936              class template.  */
937           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
938           CLASSTYPE_TI_ARGS (type)
939             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
940         }
941     }
942   else if (processing_specialization)
943     {
944        /* Someday C++0x may allow for enum template specialization.  */
945       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
946           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
947         pedwarn (input_location, OPT_pedantic, "template specialization "
948                  "of %qD not allowed by ISO C++", type);
949       else
950         {
951           error ("explicit specialization of non-template %qT", type);
952           return error_mark_node;
953         }
954     }
955
956   return type;
957 }
958
959 /* Returns nonzero if we can optimize the retrieval of specializations
960    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
961    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
962
963 static inline bool
964 optimize_specialization_lookup_p (tree tmpl)
965 {
966   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
967           && DECL_CLASS_SCOPE_P (tmpl)
968           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
969              parameter.  */
970           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
971           /* The optimized lookup depends on the fact that the
972              template arguments for the member function template apply
973              purely to the containing class, which is not true if the
974              containing class is an explicit or partial
975              specialization.  */
976           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
977           && !DECL_MEMBER_TEMPLATE_P (tmpl)
978           && !DECL_CONV_FN_P (tmpl)
979           /* It is possible to have a template that is not a member
980              template and is not a member of a template class:
981
982              template <typename T>
983              struct S { friend A::f(); };
984
985              Here, the friend function is a template, but the context does
986              not have template information.  The optimized lookup relies
987              on having ARGS be the template arguments for both the class
988              and the function template.  */
989           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
990 }
991
992 /* Retrieve the specialization (in the sense of [temp.spec] - a
993    specialization is either an instantiation or an explicit
994    specialization) of TMPL for the given template ARGS.  If there is
995    no such specialization, return NULL_TREE.  The ARGS are a vector of
996    arguments, or a vector of vectors of arguments, in the case of
997    templates with more than one level of parameters.
998
999    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1000    then we search for a partial specialization matching ARGS.  This
1001    parameter is ignored if TMPL is not a class template.  */
1002
1003 static tree
1004 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1005 {
1006   if (args == error_mark_node)
1007     return NULL_TREE;
1008
1009   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1010
1011   /* There should be as many levels of arguments as there are
1012      levels of parameters.  */
1013   gcc_assert (TMPL_ARGS_DEPTH (args)
1014               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
1015
1016   if (optimize_specialization_lookup_p (tmpl))
1017     {
1018       tree class_template;
1019       tree class_specialization;
1020       VEC(tree,gc) *methods;
1021       tree fns;
1022       int idx;
1023
1024       /* The template arguments actually apply to the containing
1025          class.  Find the class specialization with those
1026          arguments.  */
1027       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1028       class_specialization
1029         = retrieve_specialization (class_template, args, 0);
1030       if (!class_specialization)
1031         return NULL_TREE;
1032       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1033          for the specialization.  */
1034       idx = class_method_index_for_fn (class_specialization, tmpl);
1035       if (idx == -1)
1036         return NULL_TREE;
1037       /* Iterate through the methods with the indicated name, looking
1038          for the one that has an instance of TMPL.  */
1039       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1040       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1041         {
1042           tree fn = OVL_CURRENT (fns);
1043           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1044               /* using-declarations can add base methods to the method vec,
1045                  and we don't want those here.  */
1046               && DECL_CONTEXT (fn) == class_specialization)
1047             return fn;
1048         }
1049       return NULL_TREE;
1050     }
1051   else
1052     {
1053       spec_entry *found;
1054       spec_entry elt;
1055       htab_t specializations;
1056
1057       elt.tmpl = tmpl;
1058       elt.args = args;
1059       elt.spec = NULL_TREE;
1060
1061       if (DECL_CLASS_TEMPLATE_P (tmpl))
1062         specializations = type_specializations;
1063       else
1064         specializations = decl_specializations;
1065
1066       if (hash == 0)
1067         hash = hash_specialization (&elt);
1068       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1069       if (found)
1070         return found->spec;
1071     }
1072
1073   return NULL_TREE;
1074 }
1075
1076 /* Like retrieve_specialization, but for local declarations.  */
1077
1078 static tree
1079 retrieve_local_specialization (tree tmpl)
1080 {
1081   tree spec;
1082
1083   if (local_specializations == NULL)
1084     return NULL_TREE;
1085
1086   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1087                                      htab_hash_pointer (tmpl));
1088   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1089 }
1090
1091 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1092
1093 int
1094 is_specialization_of (tree decl, tree tmpl)
1095 {
1096   tree t;
1097
1098   if (TREE_CODE (decl) == FUNCTION_DECL)
1099     {
1100       for (t = decl;
1101            t != NULL_TREE;
1102            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1103         if (t == tmpl)
1104           return 1;
1105     }
1106   else
1107     {
1108       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1109
1110       for (t = TREE_TYPE (decl);
1111            t != NULL_TREE;
1112            t = CLASSTYPE_USE_TEMPLATE (t)
1113              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1114         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1115           return 1;
1116     }
1117
1118   return 0;
1119 }
1120
1121 /* Returns nonzero iff DECL is a specialization of friend declaration
1122    FRIEND_DECL according to [temp.friend].  */
1123
1124 bool
1125 is_specialization_of_friend (tree decl, tree friend_decl)
1126 {
1127   bool need_template = true;
1128   int template_depth;
1129
1130   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1131               || TREE_CODE (decl) == TYPE_DECL);
1132
1133   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1134      of a template class, we want to check if DECL is a specialization
1135      if this.  */
1136   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1137       && DECL_TEMPLATE_INFO (friend_decl)
1138       && !DECL_USE_TEMPLATE (friend_decl))
1139     {
1140       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1141       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1142       need_template = false;
1143     }
1144   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1145            && !PRIMARY_TEMPLATE_P (friend_decl))
1146     need_template = false;
1147
1148   /* There is nothing to do if this is not a template friend.  */
1149   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1150     return false;
1151
1152   if (is_specialization_of (decl, friend_decl))
1153     return true;
1154
1155   /* [temp.friend/6]
1156      A member of a class template may be declared to be a friend of a
1157      non-template class.  In this case, the corresponding member of
1158      every specialization of the class template is a friend of the
1159      class granting friendship.
1160
1161      For example, given a template friend declaration
1162
1163        template <class T> friend void A<T>::f();
1164
1165      the member function below is considered a friend
1166
1167        template <> struct A<int> {
1168          void f();
1169        };
1170
1171      For this type of template friend, TEMPLATE_DEPTH below will be
1172      nonzero.  To determine if DECL is a friend of FRIEND, we first
1173      check if the enclosing class is a specialization of another.  */
1174
1175   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1176   if (template_depth
1177       && DECL_CLASS_SCOPE_P (decl)
1178       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1179                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1180     {
1181       /* Next, we check the members themselves.  In order to handle
1182          a few tricky cases, such as when FRIEND_DECL's are
1183
1184            template <class T> friend void A<T>::g(T t);
1185            template <class T> template <T t> friend void A<T>::h();
1186
1187          and DECL's are
1188
1189            void A<int>::g(int);
1190            template <int> void A<int>::h();
1191
1192          we need to figure out ARGS, the template arguments from
1193          the context of DECL.  This is required for template substitution
1194          of `T' in the function parameter of `g' and template parameter
1195          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1196
1197       tree context = DECL_CONTEXT (decl);
1198       tree args = NULL_TREE;
1199       int current_depth = 0;
1200
1201       while (current_depth < template_depth)
1202         {
1203           if (CLASSTYPE_TEMPLATE_INFO (context))
1204             {
1205               if (current_depth == 0)
1206                 args = TYPE_TI_ARGS (context);
1207               else
1208                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1209               current_depth++;
1210             }
1211           context = TYPE_CONTEXT (context);
1212         }
1213
1214       if (TREE_CODE (decl) == FUNCTION_DECL)
1215         {
1216           bool is_template;
1217           tree friend_type;
1218           tree decl_type;
1219           tree friend_args_type;
1220           tree decl_args_type;
1221
1222           /* Make sure that both DECL and FRIEND_DECL are templates or
1223              non-templates.  */
1224           is_template = DECL_TEMPLATE_INFO (decl)
1225                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1226           if (need_template ^ is_template)
1227             return false;
1228           else if (is_template)
1229             {
1230               /* If both are templates, check template parameter list.  */
1231               tree friend_parms
1232                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1233                                          args, tf_none);
1234               if (!comp_template_parms
1235                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1236                       friend_parms))
1237                 return false;
1238
1239               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1240             }
1241           else
1242             decl_type = TREE_TYPE (decl);
1243
1244           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1245                                               tf_none, NULL_TREE);
1246           if (friend_type == error_mark_node)
1247             return false;
1248
1249           /* Check if return types match.  */
1250           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1251             return false;
1252
1253           /* Check if function parameter types match, ignoring the
1254              `this' parameter.  */
1255           friend_args_type = TYPE_ARG_TYPES (friend_type);
1256           decl_args_type = TYPE_ARG_TYPES (decl_type);
1257           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1258             friend_args_type = TREE_CHAIN (friend_args_type);
1259           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1260             decl_args_type = TREE_CHAIN (decl_args_type);
1261
1262           return compparms (decl_args_type, friend_args_type);
1263         }
1264       else
1265         {
1266           /* DECL is a TYPE_DECL */
1267           bool is_template;
1268           tree decl_type = TREE_TYPE (decl);
1269
1270           /* Make sure that both DECL and FRIEND_DECL are templates or
1271              non-templates.  */
1272           is_template
1273             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1274               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1275
1276           if (need_template ^ is_template)
1277             return false;
1278           else if (is_template)
1279             {
1280               tree friend_parms;
1281               /* If both are templates, check the name of the two
1282                  TEMPLATE_DECL's first because is_friend didn't.  */
1283               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1284                   != DECL_NAME (friend_decl))
1285                 return false;
1286
1287               /* Now check template parameter list.  */
1288               friend_parms
1289                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1290                                          args, tf_none);
1291               return comp_template_parms
1292                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1293                  friend_parms);
1294             }
1295           else
1296             return (DECL_NAME (decl)
1297                     == DECL_NAME (friend_decl));
1298         }
1299     }
1300   return false;
1301 }
1302
1303 /* Register the specialization SPEC as a specialization of TMPL with
1304    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1305    is actually just a friend declaration.  Returns SPEC, or an
1306    equivalent prior declaration, if available.  */
1307
1308 static tree
1309 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1310                          hashval_t hash)
1311 {
1312   tree fn;
1313   void **slot = NULL;
1314   spec_entry elt;
1315
1316   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1317
1318   if (TREE_CODE (spec) == FUNCTION_DECL
1319       && uses_template_parms (DECL_TI_ARGS (spec)))
1320     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1321        register it; we want the corresponding TEMPLATE_DECL instead.
1322        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1323        the more obvious `uses_template_parms (spec)' to avoid problems
1324        with default function arguments.  In particular, given
1325        something like this:
1326
1327           template <class T> void f(T t1, T t = T())
1328
1329        the default argument expression is not substituted for in an
1330        instantiation unless and until it is actually needed.  */
1331     return spec;
1332
1333   if (optimize_specialization_lookup_p (tmpl))
1334     /* We don't put these specializations in the hash table, but we might
1335        want to give an error about a mismatch.  */
1336     fn = retrieve_specialization (tmpl, args, 0);
1337   else
1338     {
1339       elt.tmpl = tmpl;
1340       elt.args = args;
1341       elt.spec = spec;
1342
1343       if (hash == 0)
1344         hash = hash_specialization (&elt);
1345
1346       slot =
1347         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1348       if (*slot)
1349         fn = ((spec_entry *) *slot)->spec;
1350       else
1351         fn = NULL_TREE;
1352     }
1353
1354   /* We can sometimes try to re-register a specialization that we've
1355      already got.  In particular, regenerate_decl_from_template calls
1356      duplicate_decls which will update the specialization list.  But,
1357      we'll still get called again here anyhow.  It's more convenient
1358      to simply allow this than to try to prevent it.  */
1359   if (fn == spec)
1360     return spec;
1361   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1362     {
1363       if (DECL_TEMPLATE_INSTANTIATION (fn))
1364         {
1365           if (DECL_ODR_USED (fn)
1366               || DECL_EXPLICIT_INSTANTIATION (fn))
1367             {
1368               error ("specialization of %qD after instantiation",
1369                      fn);
1370               return error_mark_node;
1371             }
1372           else
1373             {
1374               tree clone;
1375               /* This situation should occur only if the first
1376                  specialization is an implicit instantiation, the
1377                  second is an explicit specialization, and the
1378                  implicit instantiation has not yet been used.  That
1379                  situation can occur if we have implicitly
1380                  instantiated a member function and then specialized
1381                  it later.
1382
1383                  We can also wind up here if a friend declaration that
1384                  looked like an instantiation turns out to be a
1385                  specialization:
1386
1387                    template <class T> void foo(T);
1388                    class S { friend void foo<>(int) };
1389                    template <> void foo(int);
1390
1391                  We transform the existing DECL in place so that any
1392                  pointers to it become pointers to the updated
1393                  declaration.
1394
1395                  If there was a definition for the template, but not
1396                  for the specialization, we want this to look as if
1397                  there were no definition, and vice versa.  */
1398               DECL_INITIAL (fn) = NULL_TREE;
1399               duplicate_decls (spec, fn, is_friend);
1400               /* The call to duplicate_decls will have applied
1401                  [temp.expl.spec]:
1402
1403                    An explicit specialization of a function template
1404                    is inline only if it is explicitly declared to be,
1405                    and independently of whether its function template
1406                    is.
1407
1408                 to the primary function; now copy the inline bits to
1409                 the various clones.  */
1410               FOR_EACH_CLONE (clone, fn)
1411                 {
1412                   DECL_DECLARED_INLINE_P (clone)
1413                     = DECL_DECLARED_INLINE_P (fn);
1414                   DECL_SOURCE_LOCATION (clone)
1415                     = DECL_SOURCE_LOCATION (fn);
1416                 }
1417               check_specialization_namespace (fn);
1418
1419               return fn;
1420             }
1421         }
1422       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1423         {
1424           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1425             /* Dup decl failed, but this is a new definition. Set the
1426                line number so any errors match this new
1427                definition.  */
1428             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1429
1430           return fn;
1431         }
1432     }
1433   else if (fn)
1434     return duplicate_decls (spec, fn, is_friend);
1435
1436   /* A specialization must be declared in the same namespace as the
1437      template it is specializing.  */
1438   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1439       && !check_specialization_namespace (tmpl))
1440     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1441
1442   if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1443     {
1444       spec_entry *entry = ggc_alloc_spec_entry ();
1445       gcc_assert (tmpl && args && spec);
1446       *entry = elt;
1447       *slot = entry;
1448       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1449           && PRIMARY_TEMPLATE_P (tmpl)
1450           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1451         /* TMPL is a forward declaration of a template function; keep a list
1452            of all specializations in case we need to reassign them to a friend
1453            template later in tsubst_friend_function.  */
1454         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1455           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1456     }
1457
1458   return spec;
1459 }
1460
1461 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1462    TMPL and ARGS members, ignores SPEC.  */
1463
1464 static int
1465 eq_specializations (const void *p1, const void *p2)
1466 {
1467   const spec_entry *e1 = (const spec_entry *)p1;
1468   const spec_entry *e2 = (const spec_entry *)p2;
1469
1470   return (e1->tmpl == e2->tmpl
1471           && comp_template_args (e1->args, e2->args));
1472 }
1473
1474 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1475
1476 static hashval_t
1477 hash_tmpl_and_args (tree tmpl, tree args)
1478 {
1479   hashval_t val = DECL_UID (tmpl);
1480   return iterative_hash_template_arg (args, val);
1481 }
1482
1483 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1484    ignoring SPEC.  */
1485
1486 static hashval_t
1487 hash_specialization (const void *p)
1488 {
1489   const spec_entry *e = (const spec_entry *)p;
1490   return hash_tmpl_and_args (e->tmpl, e->args);
1491 }
1492
1493 /* Recursively calculate a hash value for a template argument ARG, for use
1494    in the hash tables of template specializations.  */
1495
1496 hashval_t
1497 iterative_hash_template_arg (tree arg, hashval_t val)
1498 {
1499   unsigned HOST_WIDE_INT i;
1500   enum tree_code code;
1501   char tclass;
1502
1503   if (arg == NULL_TREE)
1504     return iterative_hash_object (arg, val);
1505
1506   if (!TYPE_P (arg))
1507     STRIP_NOPS (arg);
1508
1509   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1510     /* We can get one of these when re-hashing a previous entry in the middle
1511        of substituting into a pack expansion.  Just look through it.  */
1512     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1513
1514   code = TREE_CODE (arg);
1515   tclass = TREE_CODE_CLASS (code);
1516
1517   val = iterative_hash_object (code, val);
1518
1519   switch (code)
1520     {
1521     case ERROR_MARK:
1522       return val;
1523
1524     case IDENTIFIER_NODE:
1525       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1526
1527     case TREE_VEC:
1528       {
1529         int i, len = TREE_VEC_LENGTH (arg);
1530         for (i = 0; i < len; ++i)
1531           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1532         return val;
1533       }
1534
1535     case TYPE_PACK_EXPANSION:
1536     case EXPR_PACK_EXPANSION:
1537       val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1538       return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1539
1540     case TYPE_ARGUMENT_PACK:
1541     case NONTYPE_ARGUMENT_PACK:
1542       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1543
1544     case TREE_LIST:
1545       for (; arg; arg = TREE_CHAIN (arg))
1546         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1547       return val;
1548
1549     case OVERLOAD:
1550       for (; arg; arg = OVL_NEXT (arg))
1551         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1552       return val;
1553
1554     case CONSTRUCTOR:
1555       {
1556         tree field, value;
1557         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1558           {
1559             val = iterative_hash_template_arg (field, val);
1560             val = iterative_hash_template_arg (value, val);
1561           }
1562         return val;
1563       }
1564
1565     case PARM_DECL:
1566       if (!DECL_ARTIFICIAL (arg))
1567         {
1568           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1569           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1570         }
1571       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1572
1573     case TARGET_EXPR:
1574       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1575
1576     case PTRMEM_CST:
1577       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1578       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1579
1580     case TEMPLATE_PARM_INDEX:
1581       val = iterative_hash_template_arg
1582         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1583       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1584       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1585
1586     case TRAIT_EXPR:
1587       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1588       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1589       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1590
1591     case BASELINK:
1592       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1593                                          val);
1594       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1595                                           val);
1596
1597     case MODOP_EXPR:
1598       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1599       code = TREE_CODE (TREE_OPERAND (arg, 1));
1600       val = iterative_hash_object (code, val);
1601       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1602
1603     case LAMBDA_EXPR:
1604       /* A lambda can't appear in a template arg, but don't crash on
1605          erroneous input.  */
1606       gcc_assert (seen_error ());
1607       return val;
1608
1609     case CAST_EXPR:
1610     case IMPLICIT_CONV_EXPR:
1611     case STATIC_CAST_EXPR:
1612     case REINTERPRET_CAST_EXPR:
1613     case CONST_CAST_EXPR:
1614     case DYNAMIC_CAST_EXPR:
1615     case NEW_EXPR:
1616       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1617       /* Now hash operands as usual.  */
1618       break;
1619
1620     default:
1621       break;
1622     }
1623
1624   switch (tclass)
1625     {
1626     case tcc_type:
1627       if (TYPE_CANONICAL (arg))
1628         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1629                                       val);
1630       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1631         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1632       /* Otherwise just compare the types during lookup.  */
1633       return val;
1634
1635     case tcc_declaration:
1636     case tcc_constant:
1637       return iterative_hash_expr (arg, val);
1638
1639     default:
1640       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1641       {
1642         unsigned n = cp_tree_operand_length (arg);
1643         for (i = 0; i < n; ++i)
1644           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1645         return val;
1646       }
1647     }
1648   gcc_unreachable ();
1649   return 0;
1650 }
1651
1652 /* Unregister the specialization SPEC as a specialization of TMPL.
1653    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1654    if the SPEC was listed as a specialization of TMPL.
1655
1656    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1657
1658 bool
1659 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1660 {
1661   spec_entry *entry;
1662   spec_entry elt;
1663
1664   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1665   elt.args = TI_ARGS (tinfo);
1666   elt.spec = NULL_TREE;
1667
1668   entry = (spec_entry *) htab_find (decl_specializations, &elt);
1669   if (entry != NULL)
1670     {
1671       gcc_assert (entry->spec == spec || entry->spec == new_spec);
1672       gcc_assert (new_spec != NULL_TREE);
1673       entry->spec = new_spec;
1674       return 1;
1675     }
1676
1677   return 0;
1678 }
1679
1680 /* Compare an entry in the local specializations hash table P1 (which
1681    is really a pointer to a TREE_LIST) with P2 (which is really a
1682    DECL).  */
1683
1684 static int
1685 eq_local_specializations (const void *p1, const void *p2)
1686 {
1687   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1688 }
1689
1690 /* Hash P1, an entry in the local specializations table.  */
1691
1692 static hashval_t
1693 hash_local_specialization (const void* p1)
1694 {
1695   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1696 }
1697
1698 /* Like register_specialization, but for local declarations.  We are
1699    registering SPEC, an instantiation of TMPL.  */
1700
1701 static void
1702 register_local_specialization (tree spec, tree tmpl)
1703 {
1704   void **slot;
1705
1706   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1707                                    htab_hash_pointer (tmpl), INSERT);
1708   *slot = build_tree_list (spec, tmpl);
1709 }
1710
1711 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1712    specialized class.  */
1713
1714 bool
1715 explicit_class_specialization_p (tree type)
1716 {
1717   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1718     return false;
1719   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1720 }
1721
1722 /* Print the list of functions at FNS, going through all the overloads
1723    for each element of the list.  Alternatively, FNS can not be a
1724    TREE_LIST, in which case it will be printed together with all the
1725    overloads.
1726
1727    MORE and *STR should respectively be FALSE and NULL when the function
1728    is called from the outside.  They are used internally on recursive
1729    calls.  print_candidates manages the two parameters and leaves NULL
1730    in *STR when it ends.  */
1731
1732 static void
1733 print_candidates_1 (tree fns, bool more, const char **str)
1734 {
1735   tree fn, fn2;
1736   char *spaces = NULL;
1737
1738   for (fn = fns; fn; fn = OVL_NEXT (fn))
1739     if (TREE_CODE (fn) == TREE_LIST)
1740       {
1741         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1742           print_candidates_1 (TREE_VALUE (fn2),
1743                               TREE_CHAIN (fn2) || more, str);
1744       }
1745     else
1746       {
1747         if (!*str)
1748           {
1749             /* Pick the prefix string.  */
1750             if (!more && !OVL_NEXT (fns))
1751               {
1752                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1753                 continue;
1754               }
1755
1756             *str = _("candidates are:");
1757             spaces = get_spaces (*str);
1758           }
1759         error ("%s %+#D", *str, OVL_CURRENT (fn));
1760         *str = spaces ? spaces : *str;
1761       }
1762
1763   if (!more)
1764     {
1765       free (spaces);
1766       *str = NULL;
1767     }
1768 }
1769
1770 /* Print the list of candidate FNS in an error message.  FNS can also
1771    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1772
1773 void
1774 print_candidates (tree fns)
1775 {
1776   const char *str = NULL;
1777   print_candidates_1 (fns, false, &str);
1778   gcc_assert (str == NULL);
1779 }
1780
1781 /* Returns the template (one of the functions given by TEMPLATE_ID)
1782    which can be specialized to match the indicated DECL with the
1783    explicit template args given in TEMPLATE_ID.  The DECL may be
1784    NULL_TREE if none is available.  In that case, the functions in
1785    TEMPLATE_ID are non-members.
1786
1787    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1788    specialization of a member template.
1789
1790    The TEMPLATE_COUNT is the number of references to qualifying
1791    template classes that appeared in the name of the function. See
1792    check_explicit_specialization for a more accurate description.
1793
1794    TSK indicates what kind of template declaration (if any) is being
1795    declared.  TSK_TEMPLATE indicates that the declaration given by
1796    DECL, though a FUNCTION_DECL, has template parameters, and is
1797    therefore a template function.
1798
1799    The template args (those explicitly specified and those deduced)
1800    are output in a newly created vector *TARGS_OUT.
1801
1802    If it is impossible to determine the result, an error message is
1803    issued.  The error_mark_node is returned to indicate failure.  */
1804
1805 static tree
1806 determine_specialization (tree template_id,
1807                           tree decl,
1808                           tree* targs_out,
1809                           int need_member_template,
1810                           int template_count,
1811                           tmpl_spec_kind tsk)
1812 {
1813   tree fns;
1814   tree targs;
1815   tree explicit_targs;
1816   tree candidates = NULL_TREE;
1817   /* A TREE_LIST of templates of which DECL may be a specialization.
1818      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1819      corresponding TREE_PURPOSE is the set of template arguments that,
1820      when used to instantiate the template, would produce a function
1821      with the signature of DECL.  */
1822   tree templates = NULL_TREE;
1823   int header_count;
1824   cp_binding_level *b;
1825
1826   *targs_out = NULL_TREE;
1827
1828   if (template_id == error_mark_node || decl == error_mark_node)
1829     return error_mark_node;
1830
1831   fns = TREE_OPERAND (template_id, 0);
1832   explicit_targs = TREE_OPERAND (template_id, 1);
1833
1834   if (fns == error_mark_node)
1835     return error_mark_node;
1836
1837   /* Check for baselinks.  */
1838   if (BASELINK_P (fns))
1839     fns = BASELINK_FUNCTIONS (fns);
1840
1841   if (!is_overloaded_fn (fns))
1842     {
1843       error ("%qD is not a function template", fns);
1844       return error_mark_node;
1845     }
1846
1847   /* Count the number of template headers specified for this
1848      specialization.  */
1849   header_count = 0;
1850   for (b = current_binding_level;
1851        b->kind == sk_template_parms;
1852        b = b->level_chain)
1853     ++header_count;
1854
1855   for (; fns; fns = OVL_NEXT (fns))
1856     {
1857       tree fn = OVL_CURRENT (fns);
1858
1859       if (TREE_CODE (fn) == TEMPLATE_DECL)
1860         {
1861           tree decl_arg_types;
1862           tree fn_arg_types;
1863
1864           /* In case of explicit specialization, we need to check if
1865              the number of template headers appearing in the specialization
1866              is correct. This is usually done in check_explicit_specialization,
1867              but the check done there cannot be exhaustive when specializing
1868              member functions. Consider the following code:
1869
1870              template <> void A<int>::f(int);
1871              template <> template <> void A<int>::f(int);
1872
1873              Assuming that A<int> is not itself an explicit specialization
1874              already, the first line specializes "f" which is a non-template
1875              member function, whilst the second line specializes "f" which
1876              is a template member function. So both lines are syntactically
1877              correct, and check_explicit_specialization does not reject
1878              them.
1879
1880              Here, we can do better, as we are matching the specialization
1881              against the declarations. We count the number of template
1882              headers, and we check if they match TEMPLATE_COUNT + 1
1883              (TEMPLATE_COUNT is the number of qualifying template classes,
1884              plus there must be another header for the member template
1885              itself).
1886
1887              Notice that if header_count is zero, this is not a
1888              specialization but rather a template instantiation, so there
1889              is no check we can perform here.  */
1890           if (header_count && header_count != template_count + 1)
1891             continue;
1892
1893           /* Check that the number of template arguments at the
1894              innermost level for DECL is the same as for FN.  */
1895           if (current_binding_level->kind == sk_template_parms
1896               && !current_binding_level->explicit_spec_p
1897               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1898                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1899                                       (current_template_parms))))
1900             continue;
1901
1902           /* DECL might be a specialization of FN.  */
1903           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1904           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1905
1906           /* For a non-static member function, we need to make sure
1907              that the const qualification is the same.  Since
1908              get_bindings does not try to merge the "this" parameter,
1909              we must do the comparison explicitly.  */
1910           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1911               && !same_type_p (TREE_VALUE (fn_arg_types),
1912                                TREE_VALUE (decl_arg_types)))
1913             continue;
1914
1915           /* Skip the "this" parameter and, for constructors of
1916              classes with virtual bases, the VTT parameter.  A
1917              full specialization of a constructor will have a VTT
1918              parameter, but a template never will.  */ 
1919           decl_arg_types 
1920             = skip_artificial_parms_for (decl, decl_arg_types);
1921           fn_arg_types 
1922             = skip_artificial_parms_for (fn, fn_arg_types);
1923
1924           /* Check that the number of function parameters matches.
1925              For example,
1926                template <class T> void f(int i = 0);
1927                template <> void f<int>();
1928              The specialization f<int> is invalid but is not caught
1929              by get_bindings below.  */
1930           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1931             continue;
1932
1933           /* Function templates cannot be specializations; there are
1934              no partial specializations of functions.  Therefore, if
1935              the type of DECL does not match FN, there is no
1936              match.  */
1937           if (tsk == tsk_template)
1938             {
1939               if (compparms (fn_arg_types, decl_arg_types))
1940                 candidates = tree_cons (NULL_TREE, fn, candidates);
1941               continue;
1942             }
1943
1944           /* See whether this function might be a specialization of this
1945              template.  */
1946           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1947
1948           if (!targs)
1949             /* We cannot deduce template arguments that when used to
1950                specialize TMPL will produce DECL.  */
1951             continue;
1952
1953           /* Save this template, and the arguments deduced.  */
1954           templates = tree_cons (targs, fn, templates);
1955         }
1956       else if (need_member_template)
1957         /* FN is an ordinary member function, and we need a
1958            specialization of a member template.  */
1959         ;
1960       else if (TREE_CODE (fn) != FUNCTION_DECL)
1961         /* We can get IDENTIFIER_NODEs here in certain erroneous
1962            cases.  */
1963         ;
1964       else if (!DECL_FUNCTION_MEMBER_P (fn))
1965         /* This is just an ordinary non-member function.  Nothing can
1966            be a specialization of that.  */
1967         ;
1968       else if (DECL_ARTIFICIAL (fn))
1969         /* Cannot specialize functions that are created implicitly.  */
1970         ;
1971       else
1972         {
1973           tree decl_arg_types;
1974
1975           /* This is an ordinary member function.  However, since
1976              we're here, we can assume it's enclosing class is a
1977              template class.  For example,
1978
1979                template <typename T> struct S { void f(); };
1980                template <> void S<int>::f() {}
1981
1982              Here, S<int>::f is a non-template, but S<int> is a
1983              template class.  If FN has the same type as DECL, we
1984              might be in business.  */
1985
1986           if (!DECL_TEMPLATE_INFO (fn))
1987             /* Its enclosing class is an explicit specialization
1988                of a template class.  This is not a candidate.  */
1989             continue;
1990
1991           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1992                             TREE_TYPE (TREE_TYPE (fn))))
1993             /* The return types differ.  */
1994             continue;
1995
1996           /* Adjust the type of DECL in case FN is a static member.  */
1997           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1998           if (DECL_STATIC_FUNCTION_P (fn)
1999               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2000             decl_arg_types = TREE_CHAIN (decl_arg_types);
2001
2002           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2003                          decl_arg_types))
2004             /* They match!  */
2005             candidates = tree_cons (NULL_TREE, fn, candidates);
2006         }
2007     }
2008
2009   if (templates && TREE_CHAIN (templates))
2010     {
2011       /* We have:
2012
2013            [temp.expl.spec]
2014
2015            It is possible for a specialization with a given function
2016            signature to be instantiated from more than one function
2017            template.  In such cases, explicit specification of the
2018            template arguments must be used to uniquely identify the
2019            function template specialization being specialized.
2020
2021          Note that here, there's no suggestion that we're supposed to
2022          determine which of the candidate templates is most
2023          specialized.  However, we, also have:
2024
2025            [temp.func.order]
2026
2027            Partial ordering of overloaded function template
2028            declarations is used in the following contexts to select
2029            the function template to which a function template
2030            specialization refers:
2031
2032            -- when an explicit specialization refers to a function
2033               template.
2034
2035          So, we do use the partial ordering rules, at least for now.
2036          This extension can only serve to make invalid programs valid,
2037          so it's safe.  And, there is strong anecdotal evidence that
2038          the committee intended the partial ordering rules to apply;
2039          the EDG front end has that behavior, and John Spicer claims
2040          that the committee simply forgot to delete the wording in
2041          [temp.expl.spec].  */
2042       tree tmpl = most_specialized_instantiation (templates);
2043       if (tmpl != error_mark_node)
2044         {
2045           templates = tmpl;
2046           TREE_CHAIN (templates) = NULL_TREE;
2047         }
2048     }
2049
2050   if (templates == NULL_TREE && candidates == NULL_TREE)
2051     {
2052       error ("template-id %qD for %q+D does not match any template "
2053              "declaration", template_id, decl);
2054       if (header_count && header_count != template_count + 1)
2055         inform (input_location, "saw %d %<template<>%>, need %d for "
2056                 "specializing a member function template",
2057                 header_count, template_count + 1);
2058       return error_mark_node;
2059     }
2060   else if ((templates && TREE_CHAIN (templates))
2061            || (candidates && TREE_CHAIN (candidates))
2062            || (templates && candidates))
2063     {
2064       error ("ambiguous template specialization %qD for %q+D",
2065              template_id, decl);
2066       candidates = chainon (candidates, templates);
2067       print_candidates (candidates);
2068       return error_mark_node;
2069     }
2070
2071   /* We have one, and exactly one, match.  */
2072   if (candidates)
2073     {
2074       tree fn = TREE_VALUE (candidates);
2075       *targs_out = copy_node (DECL_TI_ARGS (fn));
2076       /* DECL is a re-declaration or partial instantiation of a template
2077          function.  */
2078       if (TREE_CODE (fn) == TEMPLATE_DECL)
2079         return fn;
2080       /* It was a specialization of an ordinary member function in a
2081          template class.  */
2082       return DECL_TI_TEMPLATE (fn);
2083     }
2084
2085   /* It was a specialization of a template.  */
2086   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2087   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2088     {
2089       *targs_out = copy_node (targs);
2090       SET_TMPL_ARGS_LEVEL (*targs_out,
2091                            TMPL_ARGS_DEPTH (*targs_out),
2092                            TREE_PURPOSE (templates));
2093     }
2094   else
2095     *targs_out = TREE_PURPOSE (templates);
2096   return TREE_VALUE (templates);
2097 }
2098
2099 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2100    but with the default argument values filled in from those in the
2101    TMPL_TYPES.  */
2102
2103 static tree
2104 copy_default_args_to_explicit_spec_1 (tree spec_types,
2105                                       tree tmpl_types)
2106 {
2107   tree new_spec_types;
2108
2109   if (!spec_types)
2110     return NULL_TREE;
2111
2112   if (spec_types == void_list_node)
2113     return void_list_node;
2114
2115   /* Substitute into the rest of the list.  */
2116   new_spec_types =
2117     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2118                                           TREE_CHAIN (tmpl_types));
2119
2120   /* Add the default argument for this parameter.  */
2121   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2122                          TREE_VALUE (spec_types),
2123                          new_spec_types);
2124 }
2125
2126 /* DECL is an explicit specialization.  Replicate default arguments
2127    from the template it specializes.  (That way, code like:
2128
2129      template <class T> void f(T = 3);
2130      template <> void f(double);
2131      void g () { f (); }
2132
2133    works, as required.)  An alternative approach would be to look up
2134    the correct default arguments at the call-site, but this approach
2135    is consistent with how implicit instantiations are handled.  */
2136
2137 static void
2138 copy_default_args_to_explicit_spec (tree decl)
2139 {
2140   tree tmpl;
2141   tree spec_types;
2142   tree tmpl_types;
2143   tree new_spec_types;
2144   tree old_type;
2145   tree new_type;
2146   tree t;
2147   tree object_type = NULL_TREE;
2148   tree in_charge = NULL_TREE;
2149   tree vtt = NULL_TREE;
2150
2151   /* See if there's anything we need to do.  */
2152   tmpl = DECL_TI_TEMPLATE (decl);
2153   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2154   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2155     if (TREE_PURPOSE (t))
2156       break;
2157   if (!t)
2158     return;
2159
2160   old_type = TREE_TYPE (decl);
2161   spec_types = TYPE_ARG_TYPES (old_type);
2162
2163   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2164     {
2165       /* Remove the this pointer, but remember the object's type for
2166          CV quals.  */
2167       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2168       spec_types = TREE_CHAIN (spec_types);
2169       tmpl_types = TREE_CHAIN (tmpl_types);
2170
2171       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2172         {
2173           /* DECL may contain more parameters than TMPL due to the extra
2174              in-charge parameter in constructors and destructors.  */
2175           in_charge = spec_types;
2176           spec_types = TREE_CHAIN (spec_types);
2177         }
2178       if (DECL_HAS_VTT_PARM_P (decl))
2179         {
2180           vtt = spec_types;
2181           spec_types = TREE_CHAIN (spec_types);
2182         }
2183     }
2184
2185   /* Compute the merged default arguments.  */
2186   new_spec_types =
2187     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2188
2189   /* Compute the new FUNCTION_TYPE.  */
2190   if (object_type)
2191     {
2192       if (vtt)
2193         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2194                                          TREE_VALUE (vtt),
2195                                          new_spec_types);
2196
2197       if (in_charge)
2198         /* Put the in-charge parameter back.  */
2199         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2200                                          TREE_VALUE (in_charge),
2201                                          new_spec_types);
2202
2203       new_type = build_method_type_directly (object_type,
2204                                              TREE_TYPE (old_type),
2205                                              new_spec_types);
2206     }
2207   else
2208     new_type = build_function_type (TREE_TYPE (old_type),
2209                                     new_spec_types);
2210   new_type = cp_build_type_attribute_variant (new_type,
2211                                               TYPE_ATTRIBUTES (old_type));
2212   new_type = build_exception_variant (new_type,
2213                                       TYPE_RAISES_EXCEPTIONS (old_type));
2214   TREE_TYPE (decl) = new_type;
2215 }
2216
2217 /* Check to see if the function just declared, as indicated in
2218    DECLARATOR, and in DECL, is a specialization of a function
2219    template.  We may also discover that the declaration is an explicit
2220    instantiation at this point.
2221
2222    Returns DECL, or an equivalent declaration that should be used
2223    instead if all goes well.  Issues an error message if something is
2224    amiss.  Returns error_mark_node if the error is not easily
2225    recoverable.
2226
2227    FLAGS is a bitmask consisting of the following flags:
2228
2229    2: The function has a definition.
2230    4: The function is a friend.
2231
2232    The TEMPLATE_COUNT is the number of references to qualifying
2233    template classes that appeared in the name of the function.  For
2234    example, in
2235
2236      template <class T> struct S { void f(); };
2237      void S<int>::f();
2238
2239    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2240    classes are not counted in the TEMPLATE_COUNT, so that in
2241
2242      template <class T> struct S {};
2243      template <> struct S<int> { void f(); }
2244      template <> void S<int>::f();
2245
2246    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2247    invalid; there should be no template <>.)
2248
2249    If the function is a specialization, it is marked as such via
2250    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2251    is set up correctly, and it is added to the list of specializations
2252    for that template.  */
2253
2254 tree
2255 check_explicit_specialization (tree declarator,
2256                                tree decl,
2257                                int template_count,
2258                                int flags)
2259 {
2260   int have_def = flags & 2;
2261   int is_friend = flags & 4;
2262   int specialization = 0;
2263   int explicit_instantiation = 0;
2264   int member_specialization = 0;
2265   tree ctype = DECL_CLASS_CONTEXT (decl);
2266   tree dname = DECL_NAME (decl);
2267   tmpl_spec_kind tsk;
2268
2269   if (is_friend)
2270     {
2271       if (!processing_specialization)
2272         tsk = tsk_none;
2273       else
2274         tsk = tsk_excessive_parms;
2275     }
2276   else
2277     tsk = current_tmpl_spec_kind (template_count);
2278
2279   switch (tsk)
2280     {
2281     case tsk_none:
2282       if (processing_specialization)
2283         {
2284           specialization = 1;
2285           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2286         }
2287       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2288         {
2289           if (is_friend)
2290             /* This could be something like:
2291
2292                template <class T> void f(T);
2293                class S { friend void f<>(int); }  */
2294             specialization = 1;
2295           else
2296             {
2297               /* This case handles bogus declarations like template <>
2298                  template <class T> void f<int>(); */
2299
2300               error ("template-id %qD in declaration of primary template",
2301                      declarator);
2302               return decl;
2303             }
2304         }
2305       break;
2306
2307     case tsk_invalid_member_spec:
2308       /* The error has already been reported in
2309          check_specialization_scope.  */
2310       return error_mark_node;
2311
2312     case tsk_invalid_expl_inst:
2313       error ("template parameter list used in explicit instantiation");
2314
2315       /* Fall through.  */
2316
2317     case tsk_expl_inst:
2318       if (have_def)
2319         error ("definition provided for explicit instantiation");
2320
2321       explicit_instantiation = 1;
2322       break;
2323
2324     case tsk_excessive_parms:
2325     case tsk_insufficient_parms:
2326       if (tsk == tsk_excessive_parms)
2327         error ("too many template parameter lists in declaration of %qD",
2328                decl);
2329       else if (template_header_count)
2330         error("too few template parameter lists in declaration of %qD", decl);
2331       else
2332         error("explicit specialization of %qD must be introduced by "
2333               "%<template <>%>", decl);
2334
2335       /* Fall through.  */
2336     case tsk_expl_spec:
2337       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2338       if (ctype)
2339         member_specialization = 1;
2340       else
2341         specialization = 1;
2342       break;
2343
2344     case tsk_template:
2345       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2346         {
2347           /* This case handles bogus declarations like template <>
2348              template <class T> void f<int>(); */
2349
2350           if (uses_template_parms (declarator))
2351             error ("function template partial specialization %qD "
2352                    "is not allowed", declarator);
2353           else
2354             error ("template-id %qD in declaration of primary template",
2355                    declarator);
2356           return decl;
2357         }
2358
2359       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2360         /* This is a specialization of a member template, without
2361            specialization the containing class.  Something like:
2362
2363              template <class T> struct S {
2364                template <class U> void f (U);
2365              };
2366              template <> template <class U> void S<int>::f(U) {}
2367
2368            That's a specialization -- but of the entire template.  */
2369         specialization = 1;
2370       break;
2371
2372     default:
2373       gcc_unreachable ();
2374     }
2375
2376   if (specialization || member_specialization)
2377     {
2378       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2379       for (; t; t = TREE_CHAIN (t))
2380         if (TREE_PURPOSE (t))
2381           {
2382             permerror (input_location, 
2383                        "default argument specified in explicit specialization");
2384             break;
2385           }
2386     }
2387
2388   if (specialization || member_specialization || explicit_instantiation)
2389     {
2390       tree tmpl = NULL_TREE;
2391       tree targs = NULL_TREE;
2392
2393       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2394       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2395         {
2396           tree fns;
2397
2398           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2399           if (ctype)
2400             fns = dname;
2401           else
2402             {
2403               /* If there is no class context, the explicit instantiation
2404                  must be at namespace scope.  */
2405               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2406
2407               /* Find the namespace binding, using the declaration
2408                  context.  */
2409               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2410                                            false, true);
2411               if (fns == error_mark_node || !is_overloaded_fn (fns))
2412                 {
2413                   error ("%qD is not a template function", dname);
2414                   fns = error_mark_node;
2415                 }
2416               else
2417                 {
2418                   tree fn = OVL_CURRENT (fns);
2419                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2420                                                 CP_DECL_CONTEXT (fn)))
2421                     error ("%qD is not declared in %qD",
2422                            decl, current_namespace);
2423                 }
2424             }
2425
2426           declarator = lookup_template_function (fns, NULL_TREE);
2427         }
2428
2429       if (declarator == error_mark_node)
2430         return error_mark_node;
2431
2432       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2433         {
2434           if (!explicit_instantiation)
2435             /* A specialization in class scope.  This is invalid,
2436                but the error will already have been flagged by
2437                check_specialization_scope.  */
2438             return error_mark_node;
2439           else
2440             {
2441               /* It's not valid to write an explicit instantiation in
2442                  class scope, e.g.:
2443
2444                    class C { template void f(); }
2445
2446                    This case is caught by the parser.  However, on
2447                    something like:
2448
2449                    template class C { void f(); };
2450
2451                    (which is invalid) we can get here.  The error will be
2452                    issued later.  */
2453               ;
2454             }
2455
2456           return decl;
2457         }
2458       else if (ctype != NULL_TREE
2459                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2460                    IDENTIFIER_NODE))
2461         {
2462           /* Find the list of functions in ctype that have the same
2463              name as the declared function.  */
2464           tree name = TREE_OPERAND (declarator, 0);
2465           tree fns = NULL_TREE;
2466           int idx;
2467
2468           if (constructor_name_p (name, ctype))
2469             {
2470               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2471
2472               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2473                   : !CLASSTYPE_DESTRUCTORS (ctype))
2474                 {
2475                   /* From [temp.expl.spec]:
2476
2477                      If such an explicit specialization for the member
2478                      of a class template names an implicitly-declared
2479                      special member function (clause _special_), the
2480                      program is ill-formed.
2481
2482                      Similar language is found in [temp.explicit].  */
2483                   error ("specialization of implicitly-declared special member function");
2484                   return error_mark_node;
2485                 }
2486
2487               name = is_constructor ? ctor_identifier : dtor_identifier;
2488             }
2489
2490           if (!DECL_CONV_FN_P (decl))
2491             {
2492               idx = lookup_fnfields_1 (ctype, name);
2493               if (idx >= 0)
2494                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2495             }
2496           else
2497             {
2498               VEC(tree,gc) *methods;
2499               tree ovl;
2500
2501               /* For a type-conversion operator, we cannot do a
2502                  name-based lookup.  We might be looking for `operator
2503                  int' which will be a specialization of `operator T'.
2504                  So, we find *all* the conversion operators, and then
2505                  select from them.  */
2506               fns = NULL_TREE;
2507
2508               methods = CLASSTYPE_METHOD_VEC (ctype);
2509               if (methods)
2510                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2511                      VEC_iterate (tree, methods, idx, ovl);
2512                      ++idx)
2513                   {
2514                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2515                       /* There are no more conversion functions.  */
2516                       break;
2517
2518                     /* Glue all these conversion functions together
2519                        with those we already have.  */
2520                     for (; ovl; ovl = OVL_NEXT (ovl))
2521                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2522                   }
2523             }
2524
2525           if (fns == NULL_TREE)
2526             {
2527               error ("no member function %qD declared in %qT", name, ctype);
2528               return error_mark_node;
2529             }
2530           else
2531             TREE_OPERAND (declarator, 0) = fns;
2532         }
2533
2534       /* Figure out what exactly is being specialized at this point.
2535          Note that for an explicit instantiation, even one for a
2536          member function, we cannot tell apriori whether the
2537          instantiation is for a member template, or just a member
2538          function of a template class.  Even if a member template is
2539          being instantiated, the member template arguments may be
2540          elided if they can be deduced from the rest of the
2541          declaration.  */
2542       tmpl = determine_specialization (declarator, decl,
2543                                        &targs,
2544                                        member_specialization,
2545                                        template_count,
2546                                        tsk);
2547
2548       if (!tmpl || tmpl == error_mark_node)
2549         /* We couldn't figure out what this declaration was
2550            specializing.  */
2551         return error_mark_node;
2552       else
2553         {
2554           tree gen_tmpl = most_general_template (tmpl);
2555
2556           if (explicit_instantiation)
2557             {
2558               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2559                  is done by do_decl_instantiation later.  */
2560
2561               int arg_depth = TMPL_ARGS_DEPTH (targs);
2562               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2563
2564               if (arg_depth > parm_depth)
2565                 {
2566                   /* If TMPL is not the most general template (for
2567                      example, if TMPL is a friend template that is
2568                      injected into namespace scope), then there will
2569                      be too many levels of TARGS.  Remove some of them
2570                      here.  */
2571                   int i;
2572                   tree new_targs;
2573
2574                   new_targs = make_tree_vec (parm_depth);
2575                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2576                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2577                       = TREE_VEC_ELT (targs, i);
2578                   targs = new_targs;
2579                 }
2580
2581               return instantiate_template (tmpl, targs, tf_error);
2582             }
2583
2584           /* If we thought that the DECL was a member function, but it
2585              turns out to be specializing a static member function,
2586              make DECL a static member function as well.  */
2587           if (DECL_STATIC_FUNCTION_P (tmpl)
2588               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2589             revert_static_member_fn (decl);
2590
2591           /* If this is a specialization of a member template of a
2592              template class, we want to return the TEMPLATE_DECL, not
2593              the specialization of it.  */
2594           if (tsk == tsk_template)
2595             {
2596               tree result = DECL_TEMPLATE_RESULT (tmpl);
2597               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2598               DECL_INITIAL (result) = NULL_TREE;
2599               if (have_def)
2600                 {
2601                   tree parm;
2602                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2603                   DECL_SOURCE_LOCATION (result)
2604                     = DECL_SOURCE_LOCATION (decl);
2605                   /* We want to use the argument list specified in the
2606                      definition, not in the original declaration.  */
2607                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2608                   for (parm = DECL_ARGUMENTS (result); parm;
2609                        parm = DECL_CHAIN (parm))
2610                     DECL_CONTEXT (parm) = result;
2611                 }
2612               return register_specialization (tmpl, gen_tmpl, targs,
2613                                               is_friend, 0);
2614             }
2615
2616           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2617           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2618
2619           /* Inherit default function arguments from the template
2620              DECL is specializing.  */
2621           copy_default_args_to_explicit_spec (decl);
2622
2623           /* This specialization has the same protection as the
2624              template it specializes.  */
2625           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2626           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2627
2628           /* 7.1.1-1 [dcl.stc]
2629
2630              A storage-class-specifier shall not be specified in an
2631              explicit specialization...
2632
2633              The parser rejects these, so unless action is taken here,
2634              explicit function specializations will always appear with
2635              global linkage.
2636
2637              The action recommended by the C++ CWG in response to C++
2638              defect report 605 is to make the storage class and linkage
2639              of the explicit specialization match the templated function:
2640
2641              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2642            */
2643           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2644             {
2645               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2646               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2647
2648               /* This specialization has the same linkage and visibility as
2649                  the function template it specializes.  */
2650               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2651               if (! TREE_PUBLIC (decl))
2652                 {
2653                   DECL_INTERFACE_KNOWN (decl) = 1;
2654                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2655                 }
2656               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2657               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2658                 {
2659                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2660                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2661                 }
2662             }
2663
2664           /* If DECL is a friend declaration, declared using an
2665              unqualified name, the namespace associated with DECL may
2666              have been set incorrectly.  For example, in:
2667
2668                template <typename T> void f(T);
2669                namespace N {
2670                  struct S { friend void f<int>(int); }
2671                }
2672
2673              we will have set the DECL_CONTEXT for the friend
2674              declaration to N, rather than to the global namespace.  */
2675           if (DECL_NAMESPACE_SCOPE_P (decl))
2676             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2677
2678           if (is_friend && !have_def)
2679             /* This is not really a declaration of a specialization.
2680                It's just the name of an instantiation.  But, it's not
2681                a request for an instantiation, either.  */
2682             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2683           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2684             /* This is indeed a specialization.  In case of constructors
2685                and destructors, we need in-charge and not-in-charge
2686                versions in V3 ABI.  */
2687             clone_function_decl (decl, /*update_method_vec_p=*/0);
2688
2689           /* Register this specialization so that we can find it
2690              again.  */
2691           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2692         }
2693     }
2694
2695   return decl;
2696 }
2697
2698 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2699    parameters.  These are represented in the same format used for
2700    DECL_TEMPLATE_PARMS.  */
2701
2702 int
2703 comp_template_parms (const_tree parms1, const_tree parms2)
2704 {
2705   const_tree p1;
2706   const_tree p2;
2707
2708   if (parms1 == parms2)
2709     return 1;
2710
2711   for (p1 = parms1, p2 = parms2;
2712        p1 != NULL_TREE && p2 != NULL_TREE;
2713        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2714     {
2715       tree t1 = TREE_VALUE (p1);
2716       tree t2 = TREE_VALUE (p2);
2717       int i;
2718
2719       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2720       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2721
2722       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2723         return 0;
2724
2725       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2726         {
2727           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2728           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2729
2730           /* If either of the template parameters are invalid, assume
2731              they match for the sake of error recovery. */
2732           if (parm1 == error_mark_node || parm2 == error_mark_node)
2733             return 1;
2734
2735           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2736             return 0;
2737
2738           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2739               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2740                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2741             continue;
2742           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2743             return 0;
2744         }
2745     }
2746
2747   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2748     /* One set of parameters has more parameters lists than the
2749        other.  */
2750     return 0;
2751
2752   return 1;
2753 }
2754
2755 /* Determine whether PARM is a parameter pack.  */
2756
2757 bool 
2758 template_parameter_pack_p (const_tree parm)
2759 {
2760   /* Determine if we have a non-type template parameter pack.  */
2761   if (TREE_CODE (parm) == PARM_DECL)
2762     return (DECL_TEMPLATE_PARM_P (parm) 
2763             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2764   if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2765     return TEMPLATE_PARM_PARAMETER_PACK (parm);
2766
2767   /* If this is a list of template parameters, we could get a
2768      TYPE_DECL or a TEMPLATE_DECL.  */ 
2769   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2770     parm = TREE_TYPE (parm);
2771
2772   /* Otherwise it must be a type template parameter.  */
2773   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2774            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2775           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2776 }
2777
2778 /* Determine if T is a function parameter pack.  */
2779
2780 bool
2781 function_parameter_pack_p (const_tree t)
2782 {
2783   if (t && TREE_CODE (t) == PARM_DECL)
2784     return FUNCTION_PARAMETER_PACK_P (t);
2785   return false;
2786 }
2787
2788 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2789    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2790
2791 tree
2792 get_function_template_decl (const_tree primary_func_tmpl_inst)
2793 {
2794   if (! primary_func_tmpl_inst
2795       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2796       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2797     return NULL;
2798
2799   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2800 }
2801
2802 /* Return true iff the function parameter PARAM_DECL was expanded
2803    from the function parameter pack PACK.  */
2804
2805 bool
2806 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2807 {
2808   if (DECL_ARTIFICIAL (param_decl)
2809       || !function_parameter_pack_p (pack))
2810     return false;
2811
2812   /* The parameter pack and its pack arguments have the same
2813      DECL_PARM_INDEX.  */
2814   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2815 }
2816
2817 /* Determine whether ARGS describes a variadic template args list,
2818    i.e., one that is terminated by a template argument pack.  */
2819
2820 static bool 
2821 template_args_variadic_p (tree args)
2822 {
2823   int nargs;
2824   tree last_parm;
2825
2826   if (args == NULL_TREE)
2827     return false;
2828
2829   args = INNERMOST_TEMPLATE_ARGS (args);
2830   nargs = TREE_VEC_LENGTH (args);
2831
2832   if (nargs == 0)
2833     return false;
2834
2835   last_parm = TREE_VEC_ELT (args, nargs - 1);
2836
2837   return ARGUMENT_PACK_P (last_parm);
2838 }
2839
2840 /* Generate a new name for the parameter pack name NAME (an
2841    IDENTIFIER_NODE) that incorporates its */
2842
2843 static tree
2844 make_ith_pack_parameter_name (tree name, int i)
2845 {
2846   /* Munge the name to include the parameter index.  */
2847 #define NUMBUF_LEN 128
2848   char numbuf[NUMBUF_LEN];
2849   char* newname;
2850   int newname_len;
2851
2852   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2853   newname_len = IDENTIFIER_LENGTH (name)
2854                 + strlen (numbuf) + 2;
2855   newname = (char*)alloca (newname_len);
2856   snprintf (newname, newname_len,
2857             "%s#%i", IDENTIFIER_POINTER (name), i);
2858   return get_identifier (newname);
2859 }
2860
2861 /* Return true if T is a primary function, class or alias template
2862    instantiation.  */
2863
2864 bool
2865 primary_template_instantiation_p (const_tree t)
2866 {
2867   if (!t)
2868     return false;
2869
2870   if (TREE_CODE (t) == FUNCTION_DECL)
2871     return DECL_LANG_SPECIFIC (t)
2872            && DECL_TEMPLATE_INSTANTIATION (t)
2873            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2874   else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2875     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2876            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2877   else if (TYPE_P (t)
2878            && TYPE_TEMPLATE_INFO (t)
2879            && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
2880            && DECL_TEMPLATE_INSTANTIATION (TYPE_NAME (t)))
2881     return true;
2882   return false;
2883 }
2884
2885 /* Return true if PARM is a template template parameter.  */
2886
2887 bool
2888 template_template_parameter_p (const_tree parm)
2889 {
2890   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2891 }
2892
2893 /* Return the template parameters of T if T is a
2894    primary template instantiation, NULL otherwise.  */
2895
2896 tree
2897 get_primary_template_innermost_parameters (const_tree t)
2898 {
2899   tree parms = NULL, template_info = NULL;
2900
2901   if ((template_info = get_template_info (t))
2902       && primary_template_instantiation_p (t))
2903     parms = INNERMOST_TEMPLATE_PARMS
2904         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2905
2906   return parms;
2907 }
2908
2909 /* Return the template parameters of the LEVELth level from the full list
2910    of template parameters PARMS.  */
2911
2912 tree
2913 get_template_parms_at_level (tree parms, int level)
2914 {
2915   tree p;
2916   if (!parms
2917       || TREE_CODE (parms) != TREE_LIST
2918       || level > TMPL_PARMS_DEPTH (parms))
2919     return NULL_TREE;
2920
2921   for (p = parms; p; p = TREE_CHAIN (p))
2922     if (TMPL_PARMS_DEPTH (p) == level)
2923       return p;
2924
2925   return NULL_TREE;
2926 }
2927
2928 /* Returns the template arguments of T if T is a template instantiation,
2929    NULL otherwise.  */
2930
2931 tree
2932 get_template_innermost_arguments (const_tree t)
2933 {
2934   tree args = NULL, template_info = NULL;
2935
2936   if ((template_info = get_template_info (t))
2937       && TI_ARGS (template_info))
2938     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2939
2940   return args;
2941 }
2942
2943 /* Return the argument pack elements of T if T is a template argument pack,
2944    NULL otherwise.  */
2945
2946 tree
2947 get_template_argument_pack_elems (const_tree t)
2948 {
2949   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2950       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2951     return NULL;
2952
2953   return ARGUMENT_PACK_ARGS (t);
2954 }
2955
2956 /* Structure used to track the progress of find_parameter_packs_r.  */
2957 struct find_parameter_pack_data 
2958 {
2959   /* TREE_LIST that will contain all of the parameter packs found by
2960      the traversal.  */
2961   tree* parameter_packs;
2962
2963   /* Set of AST nodes that have been visited by the traversal.  */
2964   struct pointer_set_t *visited;
2965 };
2966
2967 /* Identifies all of the argument packs that occur in a template
2968    argument and appends them to the TREE_LIST inside DATA, which is a
2969    find_parameter_pack_data structure. This is a subroutine of
2970    make_pack_expansion and uses_parameter_packs.  */
2971 static tree
2972 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2973 {
2974   tree t = *tp;
2975   struct find_parameter_pack_data* ppd = 
2976     (struct find_parameter_pack_data*)data;
2977   bool parameter_pack_p = false;
2978
2979   /* Handle type aliases/typedefs.  */
2980   if (TYPE_P (t)
2981       && TYPE_NAME (t)
2982       && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
2983       && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2984     {
2985       if (TYPE_TEMPLATE_INFO (t))
2986         cp_walk_tree (&TYPE_TI_ARGS (t),
2987                       &find_parameter_packs_r,
2988                       ppd, ppd->visited);
2989       *walk_subtrees = 0;
2990       return NULL_TREE;
2991     }
2992
2993   /* Identify whether this is a parameter pack or not.  */
2994   switch (TREE_CODE (t))
2995     {
2996     case TEMPLATE_PARM_INDEX:
2997       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2998         parameter_pack_p = true;
2999       break;
3000
3001     case TEMPLATE_TYPE_PARM:
3002       t = TYPE_MAIN_VARIANT (t);
3003     case TEMPLATE_TEMPLATE_PARM:
3004       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3005         parameter_pack_p = true;
3006       break;
3007
3008     case PARM_DECL:
3009       if (FUNCTION_PARAMETER_PACK_P (t))
3010         {
3011           /* We don't want to walk into the type of a PARM_DECL,
3012              because we don't want to see the type parameter pack.  */
3013           *walk_subtrees = 0;
3014           parameter_pack_p = true;
3015         }
3016       break;
3017
3018     case BASES:
3019       parameter_pack_p = true;
3020       break;
3021     default:
3022       /* Not a parameter pack.  */
3023       break;
3024     }
3025
3026   if (parameter_pack_p)
3027     {
3028       /* Add this parameter pack to the list.  */
3029       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3030     }
3031
3032   if (TYPE_P (t))
3033     cp_walk_tree (&TYPE_CONTEXT (t), 
3034                   &find_parameter_packs_r, ppd, ppd->visited);
3035
3036   /* This switch statement will return immediately if we don't find a
3037      parameter pack.  */
3038   switch (TREE_CODE (t)) 
3039     {
3040     case TEMPLATE_PARM_INDEX:
3041       return NULL_TREE;
3042
3043     case BOUND_TEMPLATE_TEMPLATE_PARM:
3044       /* Check the template itself.  */
3045       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3046                     &find_parameter_packs_r, ppd, ppd->visited);
3047       /* Check the template arguments.  */
3048       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3049                     ppd->visited);
3050       *walk_subtrees = 0;
3051       return NULL_TREE;
3052
3053     case TEMPLATE_TYPE_PARM:
3054     case TEMPLATE_TEMPLATE_PARM:
3055       return NULL_TREE;
3056
3057     case PARM_DECL:
3058       return NULL_TREE;
3059
3060     case RECORD_TYPE:
3061       if (TYPE_PTRMEMFUNC_P (t))
3062         return NULL_TREE;
3063       /* Fall through.  */
3064
3065     case UNION_TYPE:
3066     case ENUMERAL_TYPE:
3067       if (TYPE_TEMPLATE_INFO (t))
3068         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3069                       &find_parameter_packs_r, ppd, ppd->visited);
3070
3071       *walk_subtrees = 0;
3072       return NULL_TREE;
3073
3074     case CONSTRUCTOR:
3075     case TEMPLATE_DECL:
3076       cp_walk_tree (&TREE_TYPE (t),
3077                     &find_parameter_packs_r, ppd, ppd->visited);
3078       return NULL_TREE;
3079  
3080     case TYPENAME_TYPE:
3081       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3082                    ppd, ppd->visited);
3083       *walk_subtrees = 0;
3084       return NULL_TREE;
3085       
3086     case TYPE_PACK_EXPANSION:
3087     case EXPR_PACK_EXPANSION:
3088       *walk_subtrees = 0;
3089       return NULL_TREE;
3090
3091     case INTEGER_TYPE:
3092       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3093                     ppd, ppd->visited);
3094       *walk_subtrees = 0;
3095       return NULL_TREE;
3096
3097     case IDENTIFIER_NODE:
3098       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3099                     ppd->visited);
3100       *walk_subtrees = 0;
3101       return NULL_TREE;
3102
3103     default:
3104       return NULL_TREE;
3105     }
3106
3107   return NULL_TREE;
3108 }
3109
3110 /* Determines if the expression or type T uses any parameter packs.  */
3111 bool
3112 uses_parameter_packs (tree t)
3113 {
3114   tree parameter_packs = NULL_TREE;
3115   struct find_parameter_pack_data ppd;
3116   ppd.parameter_packs = &parameter_packs;
3117   ppd.visited = pointer_set_create ();
3118   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3119   pointer_set_destroy (ppd.visited);
3120   return parameter_packs != NULL_TREE;
3121 }
3122
3123 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3124    representation a base-class initializer into a parameter pack
3125    expansion. If all goes well, the resulting node will be an
3126    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3127    respectively.  */
3128 tree 
3129 make_pack_expansion (tree arg)
3130 {
3131   tree result;
3132   tree parameter_packs = NULL_TREE;
3133   bool for_types = false;
3134   struct find_parameter_pack_data ppd;
3135
3136   if (!arg || arg == error_mark_node)
3137     return arg;
3138
3139   if (TREE_CODE (arg) == TREE_LIST)
3140     {
3141       /* The only time we will see a TREE_LIST here is for a base
3142          class initializer.  In this case, the TREE_PURPOSE will be a
3143          _TYPE node (representing the base class expansion we're
3144          initializing) and the TREE_VALUE will be a TREE_LIST
3145          containing the initialization arguments. 
3146
3147          The resulting expansion looks somewhat different from most
3148          expansions. Rather than returning just one _EXPANSION, we
3149          return a TREE_LIST whose TREE_PURPOSE is a
3150          TYPE_PACK_EXPANSION containing the bases that will be
3151          initialized.  The TREE_VALUE will be identical to the
3152          original TREE_VALUE, which is a list of arguments that will
3153          be passed to each base.  We do not introduce any new pack
3154          expansion nodes into the TREE_VALUE (although it is possible
3155          that some already exist), because the TREE_PURPOSE and
3156          TREE_VALUE all need to be expanded together with the same
3157          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3158          resulting TREE_PURPOSE will mention the parameter packs in
3159          both the bases and the arguments to the bases.  */
3160       tree purpose;
3161       tree value;
3162       tree parameter_packs = NULL_TREE;
3163
3164       /* Determine which parameter packs will be used by the base
3165          class expansion.  */
3166       ppd.visited = pointer_set_create ();
3167       ppd.parameter_packs = &parameter_packs;
3168       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3169                     &ppd, ppd.visited);
3170
3171       if (parameter_packs == NULL_TREE)
3172         {
3173           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3174           pointer_set_destroy (ppd.visited);
3175           return error_mark_node;
3176         }
3177
3178       if (TREE_VALUE (arg) != void_type_node)
3179         {
3180           /* Collect the sets of parameter packs used in each of the
3181              initialization arguments.  */
3182           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3183             {
3184               /* Determine which parameter packs will be expanded in this
3185                  argument.  */
3186               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3187                             &ppd, ppd.visited);
3188             }
3189         }
3190
3191       pointer_set_destroy (ppd.visited);
3192
3193       /* Create the pack expansion type for the base type.  */
3194       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3195       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3196       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3197
3198       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3199          they will rarely be compared to anything.  */
3200       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3201
3202       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3203     }
3204
3205   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3206     for_types = true;
3207
3208   /* Build the PACK_EXPANSION_* node.  */
3209   result = for_types
3210      ? cxx_make_type (TYPE_PACK_EXPANSION)
3211      : make_node (EXPR_PACK_EXPANSION);
3212   SET_PACK_EXPANSION_PATTERN (result, arg);
3213   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3214     {
3215       /* Propagate type and const-expression information.  */
3216       TREE_TYPE (result) = TREE_TYPE (arg);
3217       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3218     }
3219   else
3220     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3221        they will rarely be compared to anything.  */
3222     SET_TYPE_STRUCTURAL_EQUALITY (result);
3223
3224   /* Determine which parameter packs will be expanded.  */
3225   ppd.parameter_packs = &parameter_packs;
3226   ppd.visited = pointer_set_create ();
3227   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3228   pointer_set_destroy (ppd.visited);
3229
3230   /* Make sure we found some parameter packs.  */
3231   if (parameter_packs == NULL_TREE)
3232     {
3233       if (TYPE_P (arg))
3234         error ("expansion pattern %<%T%> contains no argument packs", arg);
3235       else
3236         error ("expansion pattern %<%E%> contains no argument packs", arg);
3237       return error_mark_node;
3238     }
3239   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3240
3241   return result;
3242 }
3243
3244 /* Checks T for any "bare" parameter packs, which have not yet been
3245    expanded, and issues an error if any are found. This operation can
3246    only be done on full expressions or types (e.g., an expression
3247    statement, "if" condition, etc.), because we could have expressions like:
3248
3249      foo(f(g(h(args)))...)
3250
3251    where "args" is a parameter pack. check_for_bare_parameter_packs
3252    should not be called for the subexpressions args, h(args),
3253    g(h(args)), or f(g(h(args))), because we would produce erroneous
3254    error messages. 
3255
3256    Returns TRUE and emits an error if there were bare parameter packs,
3257    returns FALSE otherwise.  */
3258 bool 
3259 check_for_bare_parameter_packs (tree t)
3260 {
3261   tree parameter_packs = NULL_TREE;
3262   struct find_parameter_pack_data ppd;
3263
3264   if (!processing_template_decl || !t || t == error_mark_node)
3265     return false;
3266
3267   if (TREE_CODE (t) == TYPE_DECL)
3268     t = TREE_TYPE (t);
3269
3270   ppd.parameter_packs = &parameter_packs;
3271   ppd.visited = pointer_set_create ();
3272   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3273   pointer_set_destroy (ppd.visited);
3274
3275   if (parameter_packs) 
3276     {
3277       error ("parameter packs not expanded with %<...%>:");
3278       while (parameter_packs)
3279         {
3280           tree pack = TREE_VALUE (parameter_packs);
3281           tree name = NULL_TREE;
3282
3283           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3284               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3285             name = TYPE_NAME (pack);
3286           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3287             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3288           else
3289             name = DECL_NAME (pack);
3290
3291           if (name)
3292             inform (input_location, "        %qD", name);
3293           else
3294             inform (input_location, "        <anonymous>");
3295
3296           parameter_packs = TREE_CHAIN (parameter_packs);
3297         }
3298
3299       return true;
3300     }
3301
3302   return false;
3303 }
3304
3305 /* Expand any parameter packs that occur in the template arguments in
3306    ARGS.  */
3307 tree
3308 expand_template_argument_pack (tree args)
3309 {
3310   tree result_args = NULL_TREE;
3311   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3312   int num_result_args = -1;
3313   int non_default_args_count = -1;
3314
3315   /* First, determine if we need to expand anything, and the number of
3316      slots we'll need.  */
3317   for (in_arg = 0; in_arg < nargs; ++in_arg)
3318     {
3319       tree arg = TREE_VEC_ELT (args, in_arg);
3320       if (arg == NULL_TREE)
3321         return args;
3322       if (ARGUMENT_PACK_P (arg))
3323         {
3324           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3325           if (num_result_args < 0)
3326             num_result_args = in_arg + num_packed;
3327           else
3328             num_result_args += num_packed;
3329         }
3330       else
3331         {
3332           if (num_result_args >= 0)
3333             num_result_args++;
3334         }
3335     }
3336
3337   /* If no expansion is necessary, we're done.  */
3338   if (num_result_args < 0)
3339     return args;
3340
3341   /* Expand arguments.  */
3342   result_args = make_tree_vec (num_result_args);
3343   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3344     non_default_args_count =
3345       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3346   for (in_arg = 0; in_arg < nargs; ++in_arg)
3347     {
3348       tree arg = TREE_VEC_ELT (args, in_arg);
3349       if (ARGUMENT_PACK_P (arg))
3350         {
3351           tree packed = ARGUMENT_PACK_ARGS (arg);
3352           int i, num_packed = TREE_VEC_LENGTH (packed);
3353           for (i = 0; i < num_packed; ++i, ++out_arg)
3354             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3355           if (non_default_args_count > 0)
3356             non_default_args_count += num_packed;
3357         }
3358       else
3359         {
3360           TREE_VEC_ELT (result_args, out_arg) = arg;
3361           ++out_arg;
3362         }
3363     }
3364   if (non_default_args_count >= 0)
3365     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3366   return result_args;
3367 }
3368
3369 /* Checks if DECL shadows a template parameter.
3370
3371    [temp.local]: A template-parameter shall not be redeclared within its
3372    scope (including nested scopes).
3373
3374    Emits an error and returns TRUE if the DECL shadows a parameter,
3375    returns FALSE otherwise.  */
3376
3377 bool
3378 check_template_shadow (tree decl)
3379 {
3380   tree olddecl;
3381
3382   /* If we're not in a template, we can't possibly shadow a template
3383      parameter.  */
3384   if (!current_template_parms)
3385     return true;
3386
3387   /* Figure out what we're shadowing.  */
3388   if (TREE_CODE (decl) == OVERLOAD)
3389     decl = OVL_CURRENT (decl);
3390   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3391
3392   /* If there's no previous binding for this name, we're not shadowing
3393      anything, let alone a template parameter.  */
3394   if (!olddecl)
3395     return true;
3396
3397   /* If we're not shadowing a template parameter, we're done.  Note
3398      that OLDDECL might be an OVERLOAD (or perhaps even an
3399      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3400      node.  */
3401   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3402     return true;
3403
3404   /* We check for decl != olddecl to avoid bogus errors for using a
3405      name inside a class.  We check TPFI to avoid duplicate errors for
3406      inline member templates.  */
3407   if (decl == olddecl
3408       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3409     return true;
3410
3411   error ("declaration of %q+#D", decl);
3412   error (" shadows template parm %q+#D", olddecl);
3413   return false;
3414 }
3415
3416 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3417    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3418    template parameters.  */
3419
3420 static tree
3421 build_template_parm_index (int index,
3422                            int level,
3423                            int orig_level,
3424                            int num_siblings,
3425                            tree decl,
3426                            tree type)
3427 {
3428   tree t = make_node (TEMPLATE_PARM_INDEX);
3429   TEMPLATE_PARM_IDX (t) = index;
3430   TEMPLATE_PARM_LEVEL (t) = level;
3431   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3432   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3433   TEMPLATE_PARM_DECL (t) = decl;
3434   TREE_TYPE (t) = type;
3435   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3436   TREE_READONLY (t) = TREE_READONLY (decl);
3437
3438   return t;
3439 }
3440
3441 /* Find the canonical type parameter for the given template type
3442    parameter.  Returns the canonical type parameter, which may be TYPE
3443    if no such parameter existed.  */
3444
3445 static tree
3446 canonical_type_parameter (tree type)
3447 {
3448   tree list;
3449   int idx = TEMPLATE_TYPE_IDX (type);
3450   if (!canonical_template_parms)
3451     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3452
3453   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3454     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3455
3456   list = VEC_index (tree, canonical_template_parms, idx);
3457   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3458     list = TREE_CHAIN (list);
3459
3460   if (list)
3461     return TREE_VALUE (list);
3462   else
3463     {
3464       VEC_replace(tree, canonical_template_parms, idx,
3465                   tree_cons (NULL_TREE, type, 
3466                              VEC_index (tree, canonical_template_parms, idx)));
3467       return type;
3468     }
3469 }
3470
3471 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3472    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3473    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3474    new one is created.  */
3475
3476 static tree
3477 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3478                             tsubst_flags_t complain)
3479 {
3480   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3481       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3482           != TEMPLATE_PARM_LEVEL (index) - levels)
3483       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3484     {
3485       tree orig_decl = TEMPLATE_PARM_DECL (index);
3486       tree decl, t;
3487
3488       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3489                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3490       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3491       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3492       DECL_ARTIFICIAL (decl) = 1;
3493       SET_DECL_TEMPLATE_PARM_P (decl);
3494
3495       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3496                                      TEMPLATE_PARM_LEVEL (index) - levels,
3497                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3498                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3499                                      decl, type);
3500       TEMPLATE_PARM_DESCENDANTS (index) = t;
3501       TEMPLATE_PARM_PARAMETER_PACK (t) 
3502         = TEMPLATE_PARM_PARAMETER_PACK (index);
3503
3504         /* Template template parameters need this.  */
3505       if (TREE_CODE (decl) == TEMPLATE_DECL)
3506         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3507           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3508            args, complain);
3509     }
3510
3511   return TEMPLATE_PARM_DESCENDANTS (index);
3512 }
3513
3514 /* Process information from new template parameter PARM and append it
3515    to the LIST being built.  This new parameter is a non-type
3516    parameter iff IS_NON_TYPE is true. This new parameter is a
3517    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3518    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3519    parameter list PARM belongs to. This is used used to create a
3520    proper canonical type for the type of PARM that is to be created,
3521    iff PARM is a type.  If the size is not known, this parameter shall
3522    be set to 0.  */
3523
3524 tree
3525 process_template_parm (tree list, location_t parm_loc, tree parm,
3526                        bool is_non_type, bool is_parameter_pack,
3527                        unsigned num_template_parms)
3528 {
3529   tree decl = 0;
3530   tree defval;
3531   tree err_parm_list;
3532   int idx = 0;
3533
3534   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3535   defval = TREE_PURPOSE (parm);
3536
3537   if (list)
3538     {
3539       tree p = tree_last (list);
3540
3541       if (p && TREE_VALUE (p) != error_mark_node)
3542         {
3543           p = TREE_VALUE (p);
3544           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3545             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3546           else
3547             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3548         }
3549
3550       ++idx;
3551     }
3552   else
3553     idx = 0;
3554
3555   if (is_non_type)
3556     {
3557       parm = TREE_VALUE (parm);
3558
3559       SET_DECL_TEMPLATE_PARM_P (parm);
3560
3561       if (TREE_TYPE (parm) == error_mark_node)
3562         {
3563           err_parm_list = build_tree_list (defval, parm);
3564           TREE_VALUE (err_parm_list) = error_mark_node;
3565            return chainon (list, err_parm_list);
3566         }
3567       else
3568       {
3569         /* [temp.param]
3570
3571            The top-level cv-qualifiers on the template-parameter are
3572            ignored when determining its type.  */
3573         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3574         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3575           {
3576             err_parm_list = build_tree_list (defval, parm);
3577             TREE_VALUE (err_parm_list) = error_mark_node;
3578              return chainon (list, err_parm_list);
3579           }
3580
3581         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3582           {
3583             /* This template parameter is not a parameter pack, but it
3584                should be. Complain about "bare" parameter packs.  */
3585             check_for_bare_parameter_packs (TREE_TYPE (parm));
3586             
3587             /* Recover by calling this a parameter pack.  */
3588             is_parameter_pack = true;
3589           }
3590       }
3591
3592       /* A template parameter is not modifiable.  */
3593       TREE_CONSTANT (parm) = 1;
3594       TREE_READONLY (parm) = 1;
3595       decl = build_decl (parm_loc,
3596                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3597       TREE_CONSTANT (decl) = 1;
3598       TREE_READONLY (decl) = 1;
3599       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3600         = build_template_parm_index (idx, processing_template_decl,
3601                                      processing_template_decl,
3602                                      num_template_parms,
3603                                      decl, TREE_TYPE (parm));
3604
3605       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3606         = is_parameter_pack;
3607     }
3608   else
3609     {
3610       tree t;
3611       parm = TREE_VALUE (TREE_VALUE (parm));
3612
3613       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3614         {
3615           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3616           /* This is for distinguishing between real templates and template
3617              template parameters */
3618           TREE_TYPE (parm) = t;
3619           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3620           decl = parm;
3621         }
3622       else
3623         {
3624           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3625           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3626           decl = build_decl (parm_loc,
3627                              TYPE_DECL, parm, t);
3628         }
3629
3630       TYPE_NAME (t) = decl;
3631       TYPE_STUB_DECL (t) = decl;
3632       parm = decl;
3633       TEMPLATE_TYPE_PARM_INDEX (t)
3634         = build_template_parm_index (idx, processing_template_decl,
3635                                      processing_template_decl,
3636                                      num_template_parms,
3637                                      decl, TREE_TYPE (parm));
3638       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3639       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3640     }
3641   DECL_ARTIFICIAL (decl) = 1;
3642   SET_DECL_TEMPLATE_PARM_P (decl);
3643   pushdecl (decl);
3644   parm = build_tree_list (defval, parm);
3645   return chainon (list, parm);
3646 }
3647
3648 /* The end of a template parameter list has been reached.  Process the
3649    tree list into a parameter vector, converting each parameter into a more
3650    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3651    as PARM_DECLs.  */
3652
3653 tree
3654 end_template_parm_list (tree parms)
3655 {
3656   int nparms;
3657   tree parm, next;
3658   tree saved_parmlist = make_tree_vec (list_length (parms));
3659
3660   current_template_parms
3661     = tree_cons (size_int (processing_template_decl),
3662                  saved_parmlist, current_template_parms);
3663
3664   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3665     {
3666       next = TREE_CHAIN (parm);
3667       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3668       TREE_CHAIN (parm) = NULL_TREE;
3669     }
3670
3671   --processing_template_parmlist;
3672
3673   return saved_parmlist;
3674 }
3675
3676 /* Create a new type almost identical to TYPE but which has the
3677    following differences:
3678
3679      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3680      template sibling parameters of T.
3681
3682      2/ T has a new canonical type that matches the new number
3683      of sibling parms.
3684
3685      3/ From now on, T is going to be what lookups referring to the
3686      name of TYPE will return. No lookup should return TYPE anymore.
3687
3688    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3689
3690    This is a subroutine of fixup_template_parms.  */
3691
3692 static tree
3693 fixup_template_type_parm_type (tree type, int num_parms)
3694 {
3695   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3696   tree t;
3697   /* This is the decl which name is inserted into the symbol table for
3698      the template parm type. So whenever we lookup the type name, this
3699      is the DECL we get.  */
3700   tree decl;
3701
3702   /* Do not fix up the type twice.  */
3703   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3704     return type;
3705
3706   t = copy_type (type);
3707   decl = TYPE_NAME (t);
3708
3709   TYPE_MAIN_VARIANT (t) = t;
3710   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3711   TYPE_POINTER_TO (t) = 0;
3712   TYPE_REFERENCE_TO (t) = 0;
3713
3714   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3715                                    TEMPLATE_PARM_LEVEL (orig_idx),
3716                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3717                                    num_parms,
3718                                    decl, t);
3719   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3720   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3721   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3722
3723   TYPE_STUB_DECL (t) = decl;
3724   TEMPLATE_TYPE_DECL (t) = decl;
3725   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3726     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3727
3728   /* Update the type associated to the type name stored in the symbol
3729      table. Now, whenever the type name is looked up, the resulting
3730      type is properly fixed up.  */
3731   TREE_TYPE (decl) = t;
3732
3733   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3734
3735   return t;
3736 }
3737
3738 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3739    identical to I, but that is fixed up as to:
3740
3741    1/ carry the number of sibling parms (NUM_PARMS) of the template
3742    parm represented by I.
3743
3744    2/ replace all references to template parm types declared before I
3745    (in the same template parm list as I) by references to template
3746    parm types contained in ARGS. ARGS should contain the list of
3747    template parms that have been fixed up so far, in a form suitable
3748    to be passed to tsubst.
3749
3750    This is a subroutine of fixup_template_parms.  */
3751
3752 static tree
3753 fixup_template_parm_index (tree i, tree args, int num_parms)
3754 {
3755   tree index, decl, type;
3756
3757   if (i == NULL_TREE
3758       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3759       /* Do not fix up the index twice.  */
3760       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3761     return i;
3762
3763   decl = TEMPLATE_PARM_DECL (i);
3764   type = TREE_TYPE (decl);
3765
3766   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3767                                      TEMPLATE_PARM_LEVEL (i),
3768                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3769                                      num_parms,
3770                                      decl, type);
3771
3772   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3773   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3774
3775   type = tsubst (type, args, tf_none, NULL_TREE);
3776   
3777   TREE_TYPE (decl) = type;
3778   TREE_TYPE (index) = type;
3779
3780   return index;
3781 }
3782
3783 /* 
3784    This is a subroutine of fixup_template_parms.
3785
3786    It computes the canonical type of the type of the template
3787    parameter PARM_DESC and update all references to that type so that
3788    they use the newly computed canonical type. No access check is
3789    performed during the fixup. PARM_DESC is a TREE_LIST which
3790    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3791    default argument of the template parm if any. IDX is the index of
3792    the template parameter, starting at 0. NUM_PARMS is the number of
3793    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3794    TREE_VEC containing the full set of template parameters in a form
3795    suitable to be passed to substs functions as their ARGS
3796    argument. This is what current_template_args returns for a given
3797    template. The innermost vector of args in ARGLIST is the set of
3798    template parms that have been fixed up so far. This function adds
3799    the fixed up parameter into that vector.  */
3800
3801 static void
3802 fixup_template_parm (tree parm_desc,
3803                      int idx,
3804                      int num_parms,
3805                      tree arglist)
3806 {
3807   tree parm = TREE_VALUE (parm_desc);
3808   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3809
3810   push_deferring_access_checks (dk_no_check);
3811
3812   if (TREE_CODE (parm) == TYPE_DECL)
3813     {
3814       /* PARM is a template type parameter. Fix up its type, add
3815          the fixed-up template parm to the vector of fixed-up
3816          template parms so far, and substitute the fixed-up
3817          template parms into the default argument of this
3818          parameter.  */
3819       tree t =
3820         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3821       TREE_TYPE (parm) = t;
3822
3823       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3824     }
3825   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3826     {
3827       /* PARM is a template template parameter. This is going to
3828          be interesting.  */
3829       tree tparms, targs, innermost_args, t;
3830       int j;
3831
3832       /* First, fix up the parms of the template template parm
3833          because the parms are involved in defining the new canonical
3834          type of the template template parm.  */
3835
3836       /* So we need to substitute the template parm types that have
3837          been fixed up so far into the template parms of this template
3838          template parm. E.g, consider this:
3839
3840          template<class T, template<T u> class TT> class S;
3841
3842          In this case we want to substitute T into the
3843          template parameters of TT.
3844
3845          So let's walk the template parms of PARM here, and
3846          tsubst ARGLIST into into each of the template
3847          parms.   */
3848
3849       /* For this substitution we need to build the full set of
3850          template parameters and use that as arguments for the
3851          tsubsting function.  */
3852       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3853
3854       /* This will contain the innermost parms of PARM into which
3855          we have substituted so far.  */
3856       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3857       targs = add_to_template_args (arglist, innermost_args);
3858       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3859         {
3860           tree parameter;
3861
3862           parameter = TREE_VEC_ELT (tparms, j);
3863
3864           /* INNERMOST_ARGS needs to have at least the same number
3865              of elements as the index PARAMETER, ortherwise
3866              tsubsting into PARAMETER will result in partially
3867              instantiating it, reducing its tempate parm
3868              level. Let's tactically fill INNERMOST_ARGS for that
3869              purpose.  */
3870           TREE_VEC_ELT (innermost_args, j) =
3871             template_parm_to_arg (parameter);
3872
3873           fixup_template_parm (parameter, j,
3874                                TREE_VEC_LENGTH (tparms),
3875                                targs);
3876         }
3877
3878       /* Now fix up the type of the template template parm.  */
3879
3880       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3881       TREE_TYPE (parm) = t;
3882
3883       TREE_VEC_ELT (fixedup_args, idx) =
3884         template_parm_to_arg (parm_desc);
3885     }
3886   else if (TREE_CODE (parm) == PARM_DECL)
3887     {
3888       /* PARM is a non-type template parameter. We need to:
3889
3890        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3891        proper number of sibling parameters.
3892
3893        * Make lookups of the template parameter return a reference
3894        to the fixed-up index. No lookup should return references
3895        to the former index anymore.
3896
3897        * Substitute the template parms that got fixed up so far
3898
3899        * into the type of PARM.  */
3900
3901       tree index = DECL_INITIAL (parm);
3902
3903       /* PUSHED_DECL is the decl added to the symbol table with
3904          the name of the parameter. E,g:
3905              
3906          template<class T, T u> //#0
3907          auto my_function(T t) -> decltype(u); //#1
3908
3909          Here, when looking up u at //#1, we get the decl of u
3910          resulting from the declaration in #0. This is what
3911          PUSHED_DECL is. We need to replace the reference to the
3912          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3913          fixed-up TEMPLATE_PARM_INDEX.  */
3914       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3915
3916       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3917          fixup the type of PUSHED_DECL as well and luckily
3918          fixup_template_parm_index does it for us too.  */
3919       tree fixed_up_index =
3920         fixup_template_parm_index (index, arglist, num_parms);
3921
3922       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3923
3924       /* Add this fixed up PARM to the template parms we've fixed
3925          up so far and use that to substitute the fixed-up
3926          template parms into the type of PARM.  */
3927       TREE_VEC_ELT (fixedup_args, idx) =
3928         template_parm_to_arg (parm_desc);
3929       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3930                                  tf_none, NULL_TREE);
3931     }
3932
3933   TREE_PURPOSE (parm_desc) =
3934     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3935                          arglist, tf_none, parm);
3936
3937   pop_deferring_access_checks ();
3938 }
3939
3940 /* Walk the current template parms and properly compute the canonical
3941    types of the dependent types created during
3942    cp_parser_template_parameter_list.  */
3943
3944 void
3945 fixup_template_parms (void)
3946 {
3947   tree arglist;
3948   tree parameter_vec;
3949   tree fixedup_args;
3950   int i, num_parms;
3951
3952   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3953   if (parameter_vec == NULL_TREE)
3954     return;
3955
3956   num_parms = TREE_VEC_LENGTH (parameter_vec);
3957
3958   /* This vector contains the current innermost template parms that
3959      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3960      to be passed to tsubst* functions as their ARGS argument.  */
3961   fixedup_args = make_tree_vec (num_parms);
3962
3963   /* This vector contains the full set of template parms in a form
3964      suitable to be passed to substs functions as their ARGS
3965      argument.  */
3966   arglist = current_template_args ();
3967   arglist = add_outermost_template_args (arglist, fixedup_args);
3968
3969   /* Let's do the proper fixup now.  */
3970   for (i = 0; i < num_parms; ++i)
3971     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3972                          i, num_parms, arglist);
3973 }
3974
3975 /* end_template_decl is called after a template declaration is seen.  */
3976
3977 void
3978 end_template_decl (void)
3979 {
3980   reset_specialization ();
3981
3982   if (! processing_template_decl)
3983     return;
3984
3985   /* This matches the pushlevel in begin_template_parm_list.  */
3986   finish_scope ();
3987
3988   --processing_template_decl;
3989   current_template_parms = TREE_CHAIN (current_template_parms);
3990 }
3991
3992 /* Takes a TREE_LIST representing a template parameter and convert it
3993    into an argument suitable to be passed to the type substitution
3994    functions.  Note that If the TREE_LIST contains an error_mark
3995    node, the returned argument is error_mark_node.  */
3996
3997 static tree
3998 template_parm_to_arg (tree t)
3999 {
4000
4001   if (t == NULL_TREE
4002       || TREE_CODE (t) != TREE_LIST)
4003     return t;
4004
4005   if (error_operand_p (TREE_VALUE (t)))
4006     return error_mark_node;
4007
4008   t = TREE_VALUE (t);
4009
4010   if (TREE_CODE (t) == TYPE_DECL
4011       || TREE_CODE (t) == TEMPLATE_DECL)
4012     {
4013       t = TREE_TYPE (t);
4014
4015       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4016         {
4017           /* Turn this argument into a TYPE_ARGUMENT_PACK
4018              with a single element, which expands T.  */
4019           tree vec = make_tree_vec (1);
4020 #ifdef ENABLE_CHECKING
4021           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4022             (vec, TREE_VEC_LENGTH (vec));
4023 #endif
4024           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4025
4026           t = cxx_make_type (TYPE_ARGUMENT_PACK);
4027           SET_ARGUMENT_PACK_ARGS (t, vec);
4028         }
4029     }
4030   else
4031     {
4032       t = DECL_INITIAL (t);
4033
4034       if (TEMPLATE_PARM_PARAMETER_PACK (t))
4035         {
4036           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4037              with a single element, which expands T.  */
4038           tree vec = make_tree_vec (1);
4039           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
4040 #ifdef ENABLE_CHECKING
4041           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4042             (vec, TREE_VEC_LENGTH (vec));
4043 #endif
4044           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4045
4046           t  = make_node (NONTYPE_ARGUMENT_PACK);
4047           SET_ARGUMENT_PACK_ARGS (t, vec);
4048           TREE_TYPE (t) = type;
4049         }
4050     }
4051   return t;
4052 }
4053
4054 /* This function returns TRUE if PARM_PACK is a template parameter
4055    pack and if ARG_PACK is what template_parm_to_arg returned when
4056    passed PARM_PACK.  */
4057
4058 static bool
4059 arg_from_parm_pack_p (tree arg_pack, tree parm_pack)
4060 {
4061   /* For clarity in the comments below let's use the representation
4062      argument_pack<elements>' to denote an argument pack and its
4063      elements.
4064
4065      In the 'if' block below, we want to detect cases where
4066      ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
4067      check if ARG_PACK is an argument pack which sole element is
4068      the expansion of PARM_PACK.  That argument pack is typically
4069      created by template_parm_to_arg when passed a parameter
4070      pack.  */
4071
4072   if (arg_pack
4073       && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
4074       && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
4075     {
4076       tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
4077       tree pattern = PACK_EXPANSION_PATTERN (expansion);
4078       /* So we have an argument_pack<P...>.  We want to test if P
4079          is actually PARM_PACK.  We will not use cp_tree_equal to
4080          test P and PARM_PACK because during type fixup (by
4081          fixup_template_parm) P can be a pre-fixup version of a
4082          type and PARM_PACK be its post-fixup version.
4083          cp_tree_equal would consider them as different even
4084          though we would want to consider them compatible for our
4085          precise purpose here.
4086
4087          Thus we are going to consider that P and PARM_PACK are
4088          compatible if they have the same DECL.  */
4089       if ((/* If ARG_PACK is a type parameter pack named by the
4090               same DECL as parm_pack ...  */
4091            (TYPE_P (pattern)
4092             && TYPE_P (parm_pack)
4093             && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
4094            /* ... or if PARM_PACK is a non-type parameter named by the
4095               same DECL as ARG_PACK.  Note that PARM_PACK being a
4096               non-type parameter means it's either a PARM_DECL or a
4097               TEMPLATE_PARM_INDEX.  */
4098            || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
4099                && ((TREE_CODE (parm_pack) == PARM_DECL
4100                     && (TEMPLATE_PARM_DECL (pattern)
4101                         == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
4102                    || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX
4103                        && (TEMPLATE_PARM_DECL (pattern)
4104                            == TEMPLATE_PARM_DECL (parm_pack))))))
4105           && template_parameter_pack_p (pattern))
4106         return true;
4107     }
4108   return false;
4109 }
4110
4111 /* Within the declaration of a template, return all levels of template
4112    parameters that apply.  The template parameters are represented as
4113    a TREE_VEC, in the form documented in cp-tree.h for template
4114    arguments.  */
4115
4116 static tree
4117 current_template_args (void)
4118 {
4119   tree header;
4120   tree args = NULL_TREE;
4121   int length = TMPL_PARMS_DEPTH (current_template_parms);
4122   int l = length;
4123
4124   /* If there is only one level of template parameters, we do not
4125      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4126      TREE_VEC containing the arguments.  */
4127   if (length > 1)
4128     args = make_tree_vec (length);
4129
4130   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4131     {
4132       tree a = copy_node (TREE_VALUE (header));
4133       int i;
4134
4135       TREE_TYPE (a) = NULL_TREE;
4136       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4137         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4138
4139 #ifdef ENABLE_CHECKING
4140       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4141 #endif
4142
4143       if (length > 1)
4144         TREE_VEC_ELT (args, --l) = a;
4145       else
4146         args = a;
4147     }
4148
4149     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4150       /* This can happen for template parms of a template template
4151          parameter, e.g:
4152
4153          template<template<class T, class U> class TT> struct S;
4154
4155          Consider the level of the parms of TT; T and U both have
4156          level 2; TT has no template parm of level 1. So in this case
4157          the first element of full_template_args is NULL_TREE. If we
4158          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4159          of 2. This will make tsubst wrongly consider that T and U
4160          have level 1. Instead, let's create a dummy vector as the
4161          first element of full_template_args so that TMPL_ARG_DEPTH
4162          returns the correct depth for args.  */
4163       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4164   return args;
4165 }
4166
4167 /* Update the declared TYPE by doing any lookups which were thought to be
4168    dependent, but are not now that we know the SCOPE of the declarator.  */
4169
4170 tree
4171 maybe_update_decl_type (tree orig_type, tree scope)
4172 {
4173   tree type = orig_type;
4174
4175   if (type == NULL_TREE)
4176     return type;
4177
4178   if (TREE_CODE (orig_type) == TYPE_DECL)
4179     type = TREE_TYPE (type);
4180
4181   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4182       && dependent_type_p (type)
4183       /* Don't bother building up the args in this case.  */
4184       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4185     {
4186       /* tsubst in the args corresponding to the template parameters,
4187          including auto if present.  Most things will be unchanged, but
4188          make_typename_type and tsubst_qualified_id will resolve
4189          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4190       tree args = current_template_args ();
4191       tree auto_node = type_uses_auto (type);
4192       tree pushed;
4193       if (auto_node)
4194         {
4195           tree auto_vec = make_tree_vec (1);
4196           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4197           args = add_to_template_args (args, auto_vec);
4198         }
4199       pushed = push_scope (scope);
4200       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4201       if (pushed)
4202         pop_scope (scope);
4203     }
4204
4205   if (type == error_mark_node)
4206     return orig_type;
4207
4208   if (TREE_CODE (orig_type) == TYPE_DECL)
4209     {
4210       if (same_type_p (type, TREE_TYPE (orig_type)))
4211         type = orig_type;
4212       else
4213         type = TYPE_NAME (type);
4214     }
4215   return type;
4216 }
4217
4218 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4219    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4220    a member template.  Used by push_template_decl below.  */
4221
4222 static tree
4223 build_template_decl (tree decl, tree parms, bool member_template_p)
4224 {
4225   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4226   DECL_TEMPLATE_PARMS (tmpl) = parms;
4227   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4228   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4229   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4230
4231   return tmpl;
4232 }
4233
4234 struct template_parm_data
4235 {
4236   /* The level of the template parameters we are currently
4237      processing.  */
4238   int level;
4239
4240   /* The index of the specialization argument we are currently
4241      processing.  */
4242   int current_arg;
4243
4244   /* An array whose size is the number of template parameters.  The
4245      elements are nonzero if the parameter has been used in any one
4246      of the arguments processed so far.  */
4247   int* parms;
4248
4249   /* An array whose size is the number of template arguments.  The
4250      elements are nonzero if the argument makes use of template
4251      parameters of this level.  */
4252   int* arg_uses_template_parms;
4253 };
4254
4255 /* Subroutine of push_template_decl used to see if each template
4256    parameter in a partial specialization is used in the explicit
4257    argument list.  If T is of the LEVEL given in DATA (which is
4258    treated as a template_parm_data*), then DATA->PARMS is marked
4259    appropriately.  */
4260
4261 static int
4262 mark_template_parm (tree t, void* data)
4263 {
4264   int level;
4265   int idx;
4266   struct template_parm_data* tpd = (struct template_parm_data*) data;
4267
4268   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4269     {
4270       level = TEMPLATE_PARM_LEVEL (t);
4271       idx = TEMPLATE_PARM_IDX (t);
4272     }
4273   else
4274     {
4275       level = TEMPLATE_TYPE_LEVEL (t);
4276       idx = TEMPLATE_TYPE_IDX (t);
4277     }
4278
4279   if (level == tpd->level)
4280     {
4281       tpd->parms[idx] = 1;
4282       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4283     }
4284
4285   /* Return zero so that for_each_template_parm will continue the
4286      traversal of the tree; we want to mark *every* template parm.  */
4287   return 0;
4288 }
4289
4290 /* Process the partial specialization DECL.  */
4291
4292 static tree
4293 process_partial_specialization (tree decl)
4294 {
4295   tree type = TREE_TYPE (decl);
4296   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4297   tree specargs = CLASSTYPE_TI_ARGS (type);
4298   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4299   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4300   tree inner_parms;
4301   tree inst;
4302   int nargs = TREE_VEC_LENGTH (inner_args);
4303   int ntparms;
4304   int  i;
4305   bool did_error_intro = false;
4306   struct template_parm_data tpd;
4307   struct template_parm_data tpd2;
4308
4309   gcc_assert (current_template_parms);
4310
4311   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4312   ntparms = TREE_VEC_LENGTH (inner_parms);
4313
4314   /* We check that each of the template parameters given in the
4315      partial specialization is used in the argument list to the
4316      specialization.  For example:
4317
4318        template <class T> struct S;
4319        template <class T> struct S<T*>;
4320
4321      The second declaration is OK because `T*' uses the template
4322      parameter T, whereas
4323
4324        template <class T> struct S<int>;
4325
4326      is no good.  Even trickier is:
4327
4328        template <class T>
4329        struct S1
4330        {
4331           template <class U>
4332           struct S2;
4333           template <class U>
4334           struct S2<T>;
4335        };
4336
4337      The S2<T> declaration is actually invalid; it is a
4338      full-specialization.  Of course,
4339
4340           template <class U>
4341           struct S2<T (*)(U)>;
4342
4343      or some such would have been OK.  */
4344   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4345   tpd.parms = XALLOCAVEC (int, ntparms);
4346   memset (tpd.parms, 0, sizeof (int) * ntparms);
4347
4348   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4349   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4350   for (i = 0; i < nargs; ++i)
4351     {
4352       tpd.current_arg = i;
4353       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4354                               &mark_template_parm,
4355                               &tpd,
4356                               NULL,
4357                               /*include_nondeduced_p=*/false);
4358     }
4359   for (i = 0; i < ntparms; ++i)
4360     if (tpd.parms[i] == 0)
4361       {
4362         /* One of the template parms was not used in the
4363            specialization.  */
4364         if (!did_error_intro)
4365           {
4366             error ("template parameters not used in partial specialization:");
4367             did_error_intro = true;
4368           }
4369
4370         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4371       }
4372
4373   if (did_error_intro)
4374     return error_mark_node;
4375
4376   /* [temp.class.spec]
4377
4378      The argument list of the specialization shall not be identical to
4379      the implicit argument list of the primary template.  */
4380   if (comp_template_args
4381       (inner_args,
4382        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4383                                                    (maintmpl)))))
4384     error ("partial specialization %qT does not specialize any template arguments", type);
4385
4386   /* [temp.class.spec]
4387
4388      A partially specialized non-type argument expression shall not
4389      involve template parameters of the partial specialization except
4390      when the argument expression is a simple identifier.
4391
4392      The type of a template parameter corresponding to a specialized
4393      non-type argument shall not be dependent on a parameter of the
4394      specialization. 
4395
4396      Also, we verify that pack expansions only occur at the
4397      end of the argument list.  */
4398   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4399   tpd2.parms = 0;
4400   for (i = 0; i < nargs; ++i)
4401     {
4402       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4403       tree arg = TREE_VEC_ELT (inner_args, i);
4404       tree packed_args = NULL_TREE;
4405       int j, len = 1;
4406
4407       if (ARGUMENT_PACK_P (arg))
4408         {
4409           /* Extract the arguments from the argument pack. We'll be
4410              iterating over these in the following loop.  */
4411           packed_args = ARGUMENT_PACK_ARGS (arg);
4412           len = TREE_VEC_LENGTH (packed_args);
4413         }
4414
4415       for (j = 0; j < len; j++)
4416         {
4417           if (packed_args)
4418             /* Get the Jth argument in the parameter pack.  */
4419             arg = TREE_VEC_ELT (packed_args, j);
4420
4421           if (PACK_EXPANSION_P (arg))
4422             {
4423               /* Pack expansions must come at the end of the
4424                  argument list.  */
4425               if ((packed_args && j < len - 1)
4426                   || (!packed_args && i < nargs - 1))
4427                 {
4428                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4429                     error ("parameter pack argument %qE must be at the "
4430                            "end of the template argument list", arg);
4431                   else
4432                     error ("parameter pack argument %qT must be at the "
4433                            "end of the template argument list", arg);
4434                 }
4435             }
4436
4437           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4438             /* We only care about the pattern.  */
4439             arg = PACK_EXPANSION_PATTERN (arg);
4440
4441           if (/* These first two lines are the `non-type' bit.  */
4442               !TYPE_P (arg)
4443               && TREE_CODE (arg) != TEMPLATE_DECL
4444               /* This next line is the `argument expression is not just a
4445                  simple identifier' condition and also the `specialized
4446                  non-type argument' bit.  */
4447               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4448             {
4449               if ((!packed_args && tpd.arg_uses_template_parms[i])
4450                   || (packed_args && uses_template_parms (arg)))
4451                 error ("template argument %qE involves template parameter(s)",
4452                        arg);
4453               else 
4454                 {
4455                   /* Look at the corresponding template parameter,
4456                      marking which template parameters its type depends
4457                      upon.  */
4458                   tree type = TREE_TYPE (parm);
4459
4460                   if (!tpd2.parms)
4461                     {
4462                       /* We haven't yet initialized TPD2.  Do so now.  */
4463                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4464                       /* The number of parameters here is the number in the
4465                          main template, which, as checked in the assertion
4466                          above, is NARGS.  */
4467                       tpd2.parms = XALLOCAVEC (int, nargs);
4468                       tpd2.level = 
4469                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4470                     }
4471
4472                   /* Mark the template parameters.  But this time, we're
4473                      looking for the template parameters of the main
4474                      template, not in the specialization.  */
4475                   tpd2.current_arg = i;
4476                   tpd2.arg_uses_template_parms[i] = 0;
4477                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4478                   for_each_template_parm (type,
4479                                           &mark_template_parm,
4480                                           &tpd2,
4481                                           NULL,
4482                                           /*include_nondeduced_p=*/false);
4483
4484                   if (tpd2.arg_uses_template_parms [i])
4485                     {
4486                       /* The type depended on some template parameters.
4487                          If they are fully specialized in the
4488                          specialization, that's OK.  */
4489                       int j;
4490                       int count = 0;
4491                       for (j = 0; j < nargs; ++j)
4492                         if (tpd2.parms[j] != 0
4493                             && tpd.arg_uses_template_parms [j])
4494                           ++count;
4495                       if (count != 0)
4496                         error_n (input_location, count,
4497                                  "type %qT of template argument %qE depends "
4498                                  "on a template parameter",
4499                                  "type %qT of template argument %qE depends "
4500                                  "on template parameters",
4501                                  type,
4502                                  arg);
4503                     }
4504                 }
4505             }
4506         }
4507     }
4508
4509   /* We should only get here once.  */
4510   gcc_assert (!COMPLETE_TYPE_P (type));
4511
4512   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4513     = tree_cons (specargs, inner_parms,
4514                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4515   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4516
4517   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4518        inst = TREE_CHAIN (inst))
4519     {
4520       tree inst_type = TREE_VALUE (inst);
4521       if (COMPLETE_TYPE_P (inst_type)
4522           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4523         {
4524           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4525           if (spec && TREE_TYPE (spec) == type)
4526             permerror (input_location,
4527                        "partial specialization of %qT after instantiation "
4528                        "of %qT", type, inst_type);
4529         }
4530     }
4531
4532   return decl;
4533 }
4534
4535 /* Check that a template declaration's use of default arguments and
4536    parameter packs is not invalid.  Here, PARMS are the template
4537    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4538    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4539    specialization.
4540    
4541
4542    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4543    declaration (but not a definition); 1 indicates a declaration, 2
4544    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4545    emitted for extraneous default arguments.
4546
4547    Returns TRUE if there were no errors found, FALSE otherwise. */
4548
4549 bool
4550 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4551                          int is_partial, int is_friend_decl)
4552 {
4553   const char *msg;
4554   int last_level_to_check;
4555   tree parm_level;
4556   bool no_errors = true;
4557
4558   /* [temp.param]
4559
4560      A default template-argument shall not be specified in a
4561      function template declaration or a function template definition, nor
4562      in the template-parameter-list of the definition of a member of a
4563      class template.  */
4564
4565   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4566     /* You can't have a function template declaration in a local
4567        scope, nor you can you define a member of a class template in a
4568        local scope.  */
4569     return true;
4570
4571   if (current_class_type
4572       && !TYPE_BEING_DEFINED (current_class_type)
4573       && DECL_LANG_SPECIFIC (decl)
4574       && DECL_DECLARES_FUNCTION_P (decl)
4575       /* If this is either a friend defined in the scope of the class
4576          or a member function.  */
4577       && (DECL_FUNCTION_MEMBER_P (decl)
4578           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4579           : DECL_FRIEND_CONTEXT (decl)
4580           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4581           : false)
4582       /* And, if it was a member function, it really was defined in
4583          the scope of the class.  */
4584       && (!DECL_FUNCTION_MEMBER_P (decl)
4585           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4586     /* We already checked these parameters when the template was
4587        declared, so there's no need to do it again now.  This function
4588        was defined in class scope, but we're processing it's body now
4589        that the class is complete.  */
4590     return true;
4591
4592   /* Core issue 226 (C++0x only): the following only applies to class
4593      templates.  */
4594   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4595     {
4596       /* [temp.param]
4597
4598          If a template-parameter has a default template-argument, all
4599          subsequent template-parameters shall have a default
4600          template-argument supplied.  */
4601       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4602         {
4603           tree inner_parms = TREE_VALUE (parm_level);
4604           int ntparms = TREE_VEC_LENGTH (inner_parms);
4605           int seen_def_arg_p = 0;
4606           int i;
4607
4608           for (i = 0; i < ntparms; ++i)
4609             {
4610               tree parm = TREE_VEC_ELT (inner_parms, i);
4611
4612               if (parm == error_mark_node)
4613                 continue;
4614
4615               if (TREE_PURPOSE (parm))
4616                 seen_def_arg_p = 1;
4617               else if (seen_def_arg_p
4618                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4619                 {
4620                   error ("no default argument for %qD", TREE_VALUE (parm));
4621                   /* For better subsequent error-recovery, we indicate that
4622                      there should have been a default argument.  */
4623                   TREE_PURPOSE (parm) = error_mark_node;
4624                   no_errors = false;
4625                 }
4626               else if (is_primary
4627                        && !is_partial
4628                        && !is_friend_decl
4629                        /* Don't complain about an enclosing partial
4630                           specialization.  */
4631                        && parm_level == parms
4632                        && TREE_CODE (decl) == TYPE_DECL
4633                        && i < ntparms - 1
4634                        && template_parameter_pack_p (TREE_VALUE (parm)))
4635                 {
4636                   /* A primary class template can only have one
4637                      parameter pack, at the end of the template
4638                      parameter list.  */
4639
4640                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4641                     error ("parameter pack %qE must be at the end of the"
4642                            " template parameter list", TREE_VALUE (parm));
4643                   else
4644                     error ("parameter pack %qT must be at the end of the"
4645                            " template parameter list", 
4646                            TREE_TYPE (TREE_VALUE (parm)));
4647
4648                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4649                     = error_mark_node;
4650                   no_errors = false;
4651                 }
4652             }
4653         }
4654     }
4655
4656   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4657       || is_partial 
4658       || !is_primary
4659       || is_friend_decl)
4660     /* For an ordinary class template, default template arguments are
4661        allowed at the innermost level, e.g.:
4662          template <class T = int>
4663          struct S {};
4664        but, in a partial specialization, they're not allowed even
4665        there, as we have in [temp.class.spec]:
4666
4667          The template parameter list of a specialization shall not
4668          contain default template argument values.
4669
4670        So, for a partial specialization, or for a function template
4671        (in C++98/C++03), we look at all of them.  */
4672     ;
4673   else
4674     /* But, for a primary class template that is not a partial
4675        specialization we look at all template parameters except the
4676        innermost ones.  */
4677     parms = TREE_CHAIN (parms);
4678
4679   /* Figure out what error message to issue.  */
4680   if (is_friend_decl == 2)
4681     msg = G_("default template arguments may not be used in function template "
4682              "friend re-declaration");
4683   else if (is_friend_decl)
4684     msg = G_("default template arguments may not be used in function template "
4685              "friend declarations");
4686   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4687     msg = G_("default template arguments may not be used in function templates "
4688              "without -std=c++11 or -std=gnu++11");
4689   else if (is_partial)
4690     msg = G_("default template arguments may not be used in "
4691              "partial specializations");
4692   else
4693     msg = G_("default argument for template parameter for class enclosing %qD");
4694
4695   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4696     /* If we're inside a class definition, there's no need to
4697        examine the parameters to the class itself.  On the one
4698        hand, they will be checked when the class is defined, and,
4699        on the other, default arguments are valid in things like:
4700          template <class T = double>
4701          struct S { template <class U> void f(U); };
4702        Here the default argument for `S' has no bearing on the
4703        declaration of `f'.  */
4704     last_level_to_check = template_class_depth (current_class_type) + 1;
4705   else
4706     /* Check everything.  */
4707     last_level_to_check = 0;
4708
4709   for (parm_level = parms;
4710        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4711        parm_level = TREE_CHAIN (parm_level))
4712     {
4713       tree inner_parms = TREE_VALUE (parm_level);
4714       int i;
4715       int ntparms;
4716
4717       ntparms = TREE_VEC_LENGTH (inner_parms);
4718       for (i = 0; i < ntparms; ++i)
4719         {
4720           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4721             continue;
4722
4723           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4724             {
4725               if (msg)
4726                 {
4727                   no_errors = false;
4728                   if (is_friend_decl == 2)
4729                     return no_errors;
4730
4731                   error (msg, decl);
4732                   msg = 0;
4733                 }
4734
4735               /* Clear out the default argument so that we are not
4736                  confused later.  */
4737               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4738             }
4739         }
4740
4741       /* At this point, if we're still interested in issuing messages,
4742          they must apply to classes surrounding the object declared.  */
4743       if (msg)
4744         msg = G_("default argument for template parameter for class "
4745                  "enclosing %qD");
4746     }
4747
4748   return no_errors;
4749 }
4750
4751 /* Worker for push_template_decl_real, called via
4752    for_each_template_parm.  DATA is really an int, indicating the
4753    level of the parameters we are interested in.  If T is a template
4754    parameter of that level, return nonzero.  */
4755
4756 static int
4757 template_parm_this_level_p (tree t, void* data)
4758 {
4759   int this_level = *(int *)data;
4760   int level;
4761
4762   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4763     level = TEMPLATE_PARM_LEVEL (t);
4764   else
4765     level = TEMPLATE_TYPE_LEVEL (t);
4766   return level == this_level;
4767 }
4768
4769 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4770    parameters given by current_template_args, or reuses a
4771    previously existing one, if appropriate.  Returns the DECL, or an
4772    equivalent one, if it is replaced via a call to duplicate_decls.
4773
4774    If IS_FRIEND is true, DECL is a friend declaration.  */
4775
4776 tree
4777 push_template_decl_real (tree decl, bool is_friend)
4778 {
4779   tree tmpl;
4780   tree args;
4781   tree info;
4782   tree ctx;
4783   int primary;
4784   int is_partial;
4785   int new_template_p = 0;
4786   /* True if the template is a member template, in the sense of
4787      [temp.mem].  */
4788   bool member_template_p = false;
4789
4790   if (decl == error_mark_node || !current_template_parms)
4791     return error_mark_node;
4792
4793   /* See if this is a partial specialization.  */
4794   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4795                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4796                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4797
4798   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4799     is_friend = true;
4800
4801   if (is_friend)
4802     /* For a friend, we want the context of the friend function, not
4803        the type of which it is a friend.  */
4804     ctx = CP_DECL_CONTEXT (decl);
4805   else if (CP_DECL_CONTEXT (decl)
4806            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4807     /* In the case of a virtual function, we want the class in which
4808        it is defined.  */
4809     ctx = CP_DECL_CONTEXT (decl);
4810   else
4811     /* Otherwise, if we're currently defining some class, the DECL
4812        is assumed to be a member of the class.  */
4813     ctx = current_scope ();
4814
4815   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4816     ctx = NULL_TREE;
4817
4818   if (!DECL_CONTEXT (decl))
4819     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4820
4821   /* See if this is a primary template.  */
4822   if (is_friend && ctx)
4823     /* A friend template that specifies a class context, i.e.
4824          template <typename T> friend void A<T>::f();
4825        is not primary.  */
4826     primary = 0;
4827   else
4828     primary = template_parm_scope_p ();
4829
4830   if (primary)
4831     {
4832       if (DECL_CLASS_SCOPE_P (decl))
4833         member_template_p = true;
4834       if (TREE_CODE (decl) == TYPE_DECL
4835           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4836         {
4837           error ("template class without a name");
4838           return error_mark_node;
4839         }
4840       else if (TREE_CODE (decl) == FUNCTION_DECL)
4841         {
4842           if (DECL_DESTRUCTOR_P (decl))
4843             {
4844               /* [temp.mem]
4845
4846                  A destructor shall not be a member template.  */
4847               error ("destructor %qD declared as member template", decl);
4848               return error_mark_node;
4849             }
4850           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4851               && (!prototype_p (TREE_TYPE (decl))
4852                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4853                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4854                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4855                       == void_list_node)))
4856             {
4857               /* [basic.stc.dynamic.allocation]
4858
4859                  An allocation function can be a function
4860                  template. ... Template allocation functions shall
4861                  have two or more parameters.  */
4862               error ("invalid template declaration of %qD", decl);
4863               return error_mark_node;
4864             }
4865         }
4866       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4867                && CLASS_TYPE_P (TREE_TYPE (decl)))
4868         /* OK */;
4869       else if (TREE_CODE (decl) == TYPE_DECL
4870                && TYPE_DECL_ALIAS_P (decl))
4871         /* alias-declaration */
4872         gcc_assert (!DECL_ARTIFICIAL (decl));
4873       else
4874         {
4875           error ("template declaration of %q#D", decl);
4876           return error_mark_node;
4877         }
4878     }
4879
4880   /* Check to see that the rules regarding the use of default
4881      arguments are not being violated.  */
4882   check_default_tmpl_args (decl, current_template_parms,
4883                            primary, is_partial, /*is_friend_decl=*/0);
4884
4885   /* Ensure that there are no parameter packs in the type of this
4886      declaration that have not been expanded.  */
4887   if (TREE_CODE (decl) == FUNCTION_DECL)
4888     {
4889       /* Check each of the arguments individually to see if there are
4890          any bare parameter packs.  */
4891       tree type = TREE_TYPE (decl);
4892       tree arg = DECL_ARGUMENTS (decl);
4893       tree argtype = TYPE_ARG_TYPES (type);
4894
4895       while (arg && argtype)
4896         {
4897           if (!FUNCTION_PARAMETER_PACK_P (arg)
4898               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4899             {
4900             /* This is a PARM_DECL that contains unexpanded parameter
4901                packs. We have already complained about this in the
4902                check_for_bare_parameter_packs call, so just replace
4903                these types with ERROR_MARK_NODE.  */
4904               TREE_TYPE (arg) = error_mark_node;
4905               TREE_VALUE (argtype) = error_mark_node;
4906             }
4907
4908           arg = DECL_CHAIN (arg);
4909           argtype = TREE_CHAIN (argtype);
4910         }
4911
4912       /* Check for bare parameter packs in the return type and the
4913          exception specifiers.  */
4914       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4915         /* Errors were already issued, set return type to int
4916            as the frontend doesn't expect error_mark_node as
4917            the return type.  */
4918         TREE_TYPE (type) = integer_type_node;
4919       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4920         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4921     }
4922   else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4923                                             && TYPE_DECL_ALIAS_P (decl))
4924                                            ? DECL_ORIGINAL_TYPE (decl)
4925                                            : TREE_TYPE (decl)))
4926     {
4927       TREE_TYPE (decl) = error_mark_node;
4928       return error_mark_node;
4929     }
4930
4931   if (is_partial)
4932     return process_partial_specialization (decl);
4933
4934   args = current_template_args ();
4935
4936   if (!ctx
4937       || TREE_CODE (ctx) == FUNCTION_DECL
4938       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4939       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4940     {
4941       if (DECL_LANG_SPECIFIC (decl)
4942           && DECL_TEMPLATE_INFO (decl)
4943           && DECL_TI_TEMPLATE (decl))
4944         tmpl = DECL_TI_TEMPLATE (decl);
4945       /* If DECL is a TYPE_DECL for a class-template, then there won't
4946          be DECL_LANG_SPECIFIC.  The information equivalent to
4947          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4948       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4949                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4950                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4951         {
4952           /* Since a template declaration already existed for this
4953              class-type, we must be redeclaring it here.  Make sure
4954              that the redeclaration is valid.  */
4955           redeclare_class_template (TREE_TYPE (decl),
4956                                     current_template_parms);
4957           /* We don't need to create a new TEMPLATE_DECL; just use the
4958              one we already had.  */
4959           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4960         }
4961       else
4962         {
4963           tmpl = build_template_decl (decl, current_template_parms,
4964                                       member_template_p);
4965           new_template_p = 1;
4966
4967           if (DECL_LANG_SPECIFIC (decl)
4968               && DECL_TEMPLATE_SPECIALIZATION (decl))
4969             {
4970               /* A specialization of a member template of a template
4971                  class.  */
4972               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4973               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4974               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4975             }
4976         }
4977     }
4978   else
4979     {
4980       tree a, t, current, parms;
4981       int i;
4982       tree tinfo = get_template_info (decl);
4983
4984       if (!tinfo)
4985         {
4986           error ("template definition of non-template %q#D", decl);
4987           return error_mark_node;
4988         }
4989
4990       tmpl = TI_TEMPLATE (tinfo);
4991
4992       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4993           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4994           && DECL_TEMPLATE_SPECIALIZATION (decl)
4995           && DECL_MEMBER_TEMPLATE_P (tmpl))
4996         {
4997           tree new_tmpl;
4998
4999           /* The declaration is a specialization of a member
5000              template, declared outside the class.  Therefore, the
5001              innermost template arguments will be NULL, so we
5002              replace them with the arguments determined by the
5003              earlier call to check_explicit_specialization.  */
5004           args = DECL_TI_ARGS (decl);
5005
5006           new_tmpl
5007             = build_template_decl (decl, current_template_parms,
5008                                    member_template_p);
5009           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5010           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5011           DECL_TI_TEMPLATE (decl) = new_tmpl;
5012           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5013           DECL_TEMPLATE_INFO (new_tmpl)
5014             = build_template_info (tmpl, args);
5015
5016           register_specialization (new_tmpl,
5017                                    most_general_template (tmpl),
5018                                    args,
5019                                    is_friend, 0);
5020           return decl;
5021         }
5022
5023       /* Make sure the template headers we got make sense.  */
5024
5025       parms = DECL_TEMPLATE_PARMS (tmpl);
5026       i = TMPL_PARMS_DEPTH (parms);
5027       if (TMPL_ARGS_DEPTH (args) != i)
5028         {
5029           error ("expected %d levels of template parms for %q#D, got %d",
5030                  i, decl, TMPL_ARGS_DEPTH (args));
5031         }
5032       else
5033         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5034           {
5035             a = TMPL_ARGS_LEVEL (args, i);
5036             t = INNERMOST_TEMPLATE_PARMS (parms);
5037
5038             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5039               {
5040                 if (current == decl)
5041                   error ("got %d template parameters for %q#D",
5042                          TREE_VEC_LENGTH (a), decl);
5043                 else
5044                   error ("got %d template parameters for %q#T",
5045                          TREE_VEC_LENGTH (a), current);
5046                 error ("  but %d required", TREE_VEC_LENGTH (t));
5047                 return error_mark_node;
5048               }
5049
5050             if (current == decl)
5051               current = ctx;
5052             else if (current == NULL_TREE)
5053               /* Can happen in erroneous input.  */
5054               break;
5055             else
5056               current = (TYPE_P (current)
5057                          ? TYPE_CONTEXT (current)
5058                          : DECL_CONTEXT (current));
5059           }
5060
5061       /* Check that the parms are used in the appropriate qualifying scopes
5062          in the declarator.  */
5063       if (!comp_template_args
5064           (TI_ARGS (tinfo),
5065            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5066         {
5067           error ("\
5068 template arguments to %qD do not match original template %qD",
5069                  decl, DECL_TEMPLATE_RESULT (tmpl));
5070           if (!uses_template_parms (TI_ARGS (tinfo)))
5071             inform (input_location, "use template<> for an explicit specialization");
5072           /* Avoid crash in import_export_decl.  */
5073           DECL_INTERFACE_KNOWN (decl) = 1;
5074           return error_mark_node;
5075         }
5076     }
5077
5078   DECL_TEMPLATE_RESULT (tmpl) = decl;
5079   TREE_TYPE (tmpl) = TREE_TYPE (decl);
5080
5081   /* Push template declarations for global functions and types.  Note
5082      that we do not try to push a global template friend declared in a
5083      template class; such a thing may well depend on the template
5084      parameters of the class.  */
5085   if (new_template_p && !ctx
5086       && !(is_friend && template_class_depth (current_class_type) > 0))
5087     {
5088       tmpl = pushdecl_namespace_level (tmpl, is_friend);
5089       if (tmpl == error_mark_node)
5090         return error_mark_node;
5091
5092       /* Hide template friend classes that haven't been declared yet.  */
5093       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5094         {
5095           DECL_ANTICIPATED (tmpl) = 1;
5096           DECL_FRIEND_P (tmpl) = 1;
5097         }
5098     }
5099
5100   if (primary)
5101     {
5102       tree parms = DECL_TEMPLATE_PARMS (tmpl);
5103       int i;
5104
5105       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5106       if (DECL_CONV_FN_P (tmpl))
5107         {
5108           int depth = TMPL_PARMS_DEPTH (parms);
5109
5110           /* It is a conversion operator. See if the type converted to
5111              depends on innermost template operands.  */
5112
5113           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5114                                          depth))
5115             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5116         }
5117
5118       /* Give template template parms a DECL_CONTEXT of the template
5119          for which they are a parameter.  */
5120       parms = INNERMOST_TEMPLATE_PARMS (parms);
5121       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5122         {
5123           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5124           if (TREE_CODE (parm) == TEMPLATE_DECL)
5125             DECL_CONTEXT (parm) = tmpl;
5126         }
5127     }
5128
5129   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5130      back to its most general template.  If TMPL is a specialization,
5131      ARGS may only have the innermost set of arguments.  Add the missing
5132      argument levels if necessary.  */
5133   if (DECL_TEMPLATE_INFO (tmpl))
5134     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5135
5136   info = build_template_info (tmpl, args);
5137
5138   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5139     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5140   else
5141     {
5142       if (primary && !DECL_LANG_SPECIFIC (decl))
5143         retrofit_lang_decl (decl);
5144       if (DECL_LANG_SPECIFIC (decl))
5145         DECL_TEMPLATE_INFO (decl) = info;
5146     }
5147
5148   return DECL_TEMPLATE_RESULT (tmpl);
5149 }
5150
5151 tree
5152 push_template_decl (tree decl)
5153 {
5154   return push_template_decl_real (decl, false);
5155 }
5156
5157 /* Called when a class template TYPE is redeclared with the indicated
5158    template PARMS, e.g.:
5159
5160      template <class T> struct S;
5161      template <class T> struct S {};  */
5162
5163 bool
5164 redeclare_class_template (tree type, tree parms)
5165 {
5166   tree tmpl;
5167   tree tmpl_parms;
5168   int i;
5169
5170   if (!TYPE_TEMPLATE_INFO (type))
5171     {
5172       error ("%qT is not a template type", type);
5173       return false;
5174     }
5175
5176   tmpl = TYPE_TI_TEMPLATE (type);
5177   if (!PRIMARY_TEMPLATE_P (tmpl))
5178     /* The type is nested in some template class.  Nothing to worry
5179        about here; there are no new template parameters for the nested
5180        type.  */
5181     return true;
5182
5183   if (!parms)
5184     {
5185       error ("template specifiers not specified in declaration of %qD",
5186              tmpl);
5187       return false;
5188     }
5189
5190   parms = INNERMOST_TEMPLATE_PARMS (parms);
5191   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5192
5193   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5194     {
5195       error_n (input_location, TREE_VEC_LENGTH (parms),
5196                "redeclared with %d template parameter",
5197                "redeclared with %d template parameters",
5198                TREE_VEC_LENGTH (parms));
5199       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5200                 "previous declaration %q+D used %d template parameter",
5201                 "previous declaration %q+D used %d template parameters",
5202                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5203       return false;
5204     }
5205
5206   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5207     {
5208       tree tmpl_parm;
5209       tree parm;
5210       tree tmpl_default;
5211       tree parm_default;
5212
5213       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5214           || TREE_VEC_ELT (parms, i) == error_mark_node)
5215         continue;
5216
5217       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5218       if (tmpl_parm == error_mark_node)
5219         return false;
5220
5221       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5222       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5223       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5224
5225       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5226          TEMPLATE_DECL.  */
5227       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5228           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5229               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5230           || (TREE_CODE (tmpl_parm) != PARM_DECL
5231               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5232                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5233           || (TREE_CODE (tmpl_parm) == PARM_DECL
5234               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5235                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5236         {
5237           error ("template parameter %q+#D", tmpl_parm);
5238           error ("redeclared here as %q#D", parm);
5239           return false;
5240         }
5241
5242       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5243         {
5244           /* We have in [temp.param]:
5245
5246              A template-parameter may not be given default arguments
5247              by two different declarations in the same scope.  */
5248           error_at (input_location, "redefinition of default argument for %q#D", parm);
5249           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5250                   "original definition appeared here");
5251           return false;
5252         }
5253
5254       if (parm_default != NULL_TREE)
5255         /* Update the previous template parameters (which are the ones
5256            that will really count) with the new default value.  */
5257         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5258       else if (tmpl_default != NULL_TREE)
5259         /* Update the new parameters, too; they'll be used as the
5260            parameters for any members.  */
5261         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5262     }
5263
5264     return true;
5265 }
5266
5267 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5268    (possibly simplified) expression.  */
5269
5270 static tree
5271 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5272 {
5273   if (expr == NULL_TREE)
5274     return NULL_TREE;
5275
5276   /* If we're in a template, but EXPR isn't value dependent, simplify
5277      it.  We're supposed to treat:
5278
5279        template <typename T> void f(T[1 + 1]);
5280        template <typename T> void f(T[2]);
5281
5282      as two declarations of the same function, for example.  */
5283   if (processing_template_decl
5284       && !type_dependent_expression_p (expr)
5285       && potential_constant_expression (expr)
5286       && !value_dependent_expression_p (expr))
5287     {
5288       HOST_WIDE_INT saved_processing_template_decl;
5289
5290       saved_processing_template_decl = processing_template_decl;
5291       processing_template_decl = 0;
5292       expr = tsubst_copy_and_build (expr,
5293                                     /*args=*/NULL_TREE,
5294                                     complain,
5295                                     /*in_decl=*/NULL_TREE,
5296                                     /*function_p=*/false,
5297                                     /*integral_constant_expression_p=*/true);
5298       processing_template_decl = saved_processing_template_decl;
5299     }
5300   return expr;
5301 }
5302
5303 tree
5304 fold_non_dependent_expr (tree expr)
5305 {
5306   return fold_non_dependent_expr_sfinae (expr, tf_error);
5307 }
5308
5309 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5310    template declaration, or a TYPE_DECL for an alias declaration.  */
5311
5312 bool
5313 alias_type_or_template_p (tree t)
5314 {
5315   if (t == NULL_TREE)
5316     return false;
5317   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5318           || (TYPE_P (t)
5319               && TYPE_NAME (t)
5320               && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5321           || DECL_ALIAS_TEMPLATE_P (t));
5322 }
5323
5324 /* Return TRUE iff is a specialization of an alias template.  */
5325
5326 bool
5327 alias_template_specialization_p (tree t)
5328 {
5329   if (t == NULL_TREE)
5330     return false;
5331   return (primary_template_instantiation_p (t)
5332           && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5333 }
5334
5335 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5336    must be a function or a pointer-to-function type, as specified
5337    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5338    and check that the resulting function has external linkage.  */
5339
5340 static tree
5341 convert_nontype_argument_function (tree type, tree expr)
5342 {
5343   tree fns = expr;
5344   tree fn, fn_no_ptr;
5345   linkage_kind linkage;
5346
5347   fn = instantiate_type (type, fns, tf_none);
5348   if (fn == error_mark_node)
5349     return error_mark_node;
5350
5351   fn_no_ptr = fn;
5352   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5353     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5354   if (BASELINK_P (fn_no_ptr))
5355     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5356  
5357   /* [temp.arg.nontype]/1
5358
5359      A template-argument for a non-type, non-template template-parameter
5360      shall be one of:
5361      [...]
5362      -- the address of an object or function with external [C++11: or
5363         internal] linkage.  */
5364   linkage = decl_linkage (fn_no_ptr);
5365   if (cxx_dialect >= cxx0x ? linkage == lk_none : linkage != lk_external)
5366     {
5367       if (cxx_dialect >= cxx0x)
5368         error ("%qE is not a valid template argument for type %qT "
5369                "because %qD has no linkage",
5370                expr, type, fn_no_ptr);
5371       else
5372         error ("%qE is not a valid template argument for type %qT "
5373                "because %qD does not have external linkage",
5374                expr, type, fn_no_ptr);
5375       return NULL_TREE;
5376     }
5377
5378   return fn;
5379 }
5380
5381 /* Subroutine of convert_nontype_argument.
5382    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5383    Emit an error otherwise.  */
5384
5385 static bool
5386 check_valid_ptrmem_cst_expr (tree type, tree expr,
5387                              tsubst_flags_t complain)
5388 {
5389   STRIP_NOPS (expr);
5390   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5391     return true;
5392   if (cxx_dialect >= cxx0x && null_member_pointer_value_p (expr))
5393     return true;
5394   if (complain & tf_error)
5395     {
5396       error ("%qE is not a valid template argument for type %qT",
5397              expr, type);
5398       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5399     }
5400   return false;
5401 }
5402
5403 /* Returns TRUE iff the address of OP is value-dependent.
5404
5405    14.6.2.4 [temp.dep.temp]:
5406    A non-integral non-type template-argument is dependent if its type is
5407    dependent or it has either of the following forms
5408      qualified-id
5409      & qualified-id
5410    and contains a nested-name-specifier which specifies a class-name that
5411    names a dependent type.
5412
5413    We generalize this to just say that the address of a member of a
5414    dependent class is value-dependent; the above doesn't cover the
5415    address of a static data member named with an unqualified-id.  */
5416
5417 static bool
5418 has_value_dependent_address (tree op)
5419 {
5420   /* We could use get_inner_reference here, but there's no need;
5421      this is only relevant for template non-type arguments, which
5422      can only be expressed as &id-expression.  */
5423   if (DECL_P (op))
5424     {
5425       tree ctx = CP_DECL_CONTEXT (op);
5426       if (TYPE_P (ctx) && dependent_type_p (ctx))
5427         return true;
5428     }
5429
5430   return false;
5431 }
5432
5433 /* The next set of functions are used for providing helpful explanatory
5434    diagnostics for failed overload resolution.  Their messages should be
5435    indented by two spaces for consistency with the messages in
5436    call.c  */
5437
5438 static int
5439 unify_success (bool explain_p ATTRIBUTE_UNUSED)
5440 {
5441   return 0;
5442 }
5443
5444 static int
5445 unify_parameter_deduction_failure (bool explain_p, tree parm)
5446 {
5447   if (explain_p)
5448     inform (input_location,
5449             "  couldn't deduce template parameter %qD", parm);
5450   return 1;
5451 }
5452
5453 static int
5454 unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5455 {
5456   return 1;
5457 }
5458
5459 static int
5460 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5461 {
5462   if (explain_p)
5463     inform (input_location,
5464             "  types %qT and %qT have incompatible cv-qualifiers",
5465             parm, arg);
5466   return 1;
5467 }
5468
5469 static int
5470 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5471 {
5472   if (explain_p)
5473     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5474   return 1;
5475 }
5476
5477 static int
5478 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5479 {
5480   if (explain_p)
5481     inform (input_location,
5482             "  template parameter %qD is not a parameter pack, but "
5483             "argument %qD is",
5484             parm, arg);
5485   return 1;
5486 }
5487
5488 static int
5489 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5490 {
5491   if (explain_p)
5492     inform (input_location,
5493             "  template argument %qE does not match "
5494             "pointer-to-member constant %qE",
5495             arg, parm);
5496   return 1;
5497 }
5498
5499 static int
5500 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5501 {
5502   if (explain_p)
5503     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5504   return 1;
5505 }
5506
5507 static int
5508 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5509 {
5510   if (explain_p)
5511     inform (input_location,
5512             "  inconsistent parameter pack deduction with %qT and %qT",
5513             old_arg, new_arg);
5514   return 1;
5515 }
5516
5517 static int
5518 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5519 {
5520   if (explain_p)
5521     {
5522       if (TYPE_P (parm))
5523         inform (input_location,
5524                 "  deduced conflicting types for parameter %qT (%qT and %qT)",
5525                 parm, first, second);
5526       else
5527         inform (input_location,
5528                 "  deduced conflicting values for non-type parameter "
5529                 "%qE (%qE and %qE)", parm, first, second);
5530     }
5531   return 1;
5532 }
5533
5534 static int
5535 unify_vla_arg (bool explain_p, tree arg)
5536 {
5537   if (explain_p)
5538     inform (input_location,
5539             "  variable-sized array type %qT is not "
5540             "a valid template argument",
5541             arg);
5542   return 1;
5543 }
5544
5545 static int
5546 unify_method_type_error (bool explain_p, tree arg)
5547 {
5548   if (explain_p)
5549     inform (input_location,
5550             "  member function type %qT is not a valid template argument",
5551             arg);
5552   return 1;
5553 }
5554
5555 static int
5556 unify_arity (bool explain_p, int have, int wanted)
5557 {
5558   if (explain_p)
5559     inform_n (input_location, wanted,
5560               "  candidate expects %d argument, %d provided",
5561               "  candidate expects %d arguments, %d provided",
5562               wanted, have);
5563   return 1;
5564 }
5565
5566 static int
5567 unify_too_many_arguments (bool explain_p, int have, int wanted)
5568 {
5569   return unify_arity (explain_p, have, wanted);
5570 }
5571
5572 static int
5573 unify_too_few_arguments (bool explain_p, int have, int wanted)
5574 {
5575   return unify_arity (explain_p, have, wanted);
5576 }
5577
5578 static int
5579 unify_arg_conversion (bool explain_p, tree to_type,
5580                       tree from_type, tree arg)
5581 {
5582   if (explain_p)
5583     inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5584             arg, from_type, to_type);
5585   return 1;
5586 }
5587
5588 static int
5589 unify_no_common_base (bool explain_p, enum template_base_result r,
5590                       tree parm, tree arg)
5591 {
5592   if (explain_p)
5593     switch (r)
5594       {
5595       case tbr_ambiguous_baseclass:
5596         inform (input_location, "  %qT is an ambiguous base class of %qT",
5597                 arg, parm);
5598         break;
5599       default:
5600         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5601         break;
5602       }
5603   return 1;
5604 }
5605
5606 static int
5607 unify_inconsistent_template_template_parameters (bool explain_p)
5608 {
5609   if (explain_p)
5610     inform (input_location,
5611             "  template parameters of a template template argument are "
5612             "inconsistent with other deduced template arguments");
5613   return 1;
5614 }
5615
5616 static int
5617 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5618 {
5619   if (explain_p)
5620     inform (input_location,
5621             "  can't deduce a template for %qT from non-template type %qT",
5622             parm, arg);
5623   return 1;
5624 }
5625
5626 static int
5627 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5628 {
5629   if (explain_p)
5630     inform (input_location,
5631             "  template argument %qE does not match %qD", arg, parm);
5632   return 1;
5633 }
5634
5635 static int
5636 unify_overload_resolution_failure (bool explain_p, tree arg)
5637 {
5638   if (explain_p)
5639     inform (input_location,
5640             "  could not resolve address from overloaded function %qE",
5641             arg);
5642   return 1;
5643 }
5644
5645 /* Attempt to convert the non-type template parameter EXPR to the
5646    indicated TYPE.  If the conversion is successful, return the
5647    converted value.  If the conversion is unsuccessful, return
5648    NULL_TREE if we issued an error message, or error_mark_node if we
5649    did not.  We issue error messages for out-and-out bad template
5650    parameters, but not simply because the conversion failed, since we
5651    might be just trying to do argument deduction.  Both TYPE and EXPR
5652    must be non-dependent.
5653
5654    The conversion follows the special rules described in
5655    [temp.arg.nontype], and it is much more strict than an implicit
5656    conversion.
5657
5658    This function is called twice for each template argument (see
5659    lookup_template_class for a more accurate description of this
5660    problem). This means that we need to handle expressions which
5661    are not valid in a C++ source, but can be created from the
5662    first call (for instance, casts to perform conversions). These
5663    hacks can go away after we fix the double coercion problem.  */
5664
5665 static tree
5666 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5667 {
5668   tree expr_type;
5669
5670   /* Detect immediately string literals as invalid non-type argument.
5671      This special-case is not needed for correctness (we would easily
5672      catch this later), but only to provide better diagnostic for this
5673      common user mistake. As suggested by DR 100, we do not mention
5674      linkage issues in the diagnostic as this is not the point.  */
5675   /* FIXME we're making this OK.  */
5676   if (TREE_CODE (expr) == STRING_CST)
5677     {
5678       if (complain & tf_error)
5679         error ("%qE is not a valid template argument for type %qT "
5680                "because string literals can never be used in this context",
5681                expr, type);
5682       return NULL_TREE;
5683     }
5684
5685   /* Add the ADDR_EXPR now for the benefit of
5686      value_dependent_expression_p.  */
5687   if (TYPE_PTROBV_P (type)
5688       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5689     expr = decay_conversion (expr);
5690
5691   /* If we are in a template, EXPR may be non-dependent, but still
5692      have a syntactic, rather than semantic, form.  For example, EXPR
5693      might be a SCOPE_REF, rather than the VAR_DECL to which the
5694      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5695      so that access checking can be performed when the template is
5696      instantiated -- but here we need the resolved form so that we can
5697      convert the argument.  */
5698   if (TYPE_REF_OBJ_P (type)
5699       && has_value_dependent_address (expr))
5700     /* If we want the address and it's value-dependent, don't fold.  */;
5701   else if (!type_unknown_p (expr))
5702     expr = fold_non_dependent_expr_sfinae (expr, complain);
5703   if (error_operand_p (expr))
5704     return error_mark_node;
5705   expr_type = TREE_TYPE (expr);
5706   if (TREE_CODE (type) == REFERENCE_TYPE)
5707     expr = mark_lvalue_use (expr);
5708   else
5709     expr = mark_rvalue_use (expr);
5710
5711   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5712      to a non-type argument of "nullptr".  */
5713   if (expr == nullptr_node
5714       && (TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type)))
5715     expr = convert (type, expr);
5716
5717   /* In C++11, integral or enumeration non-type template arguments can be
5718      arbitrary constant expressions.  Pointer and pointer to
5719      member arguments can be general constant expressions that evaluate
5720      to a null value, but otherwise still need to be of a specific form.  */
5721   if (cxx_dialect >= cxx0x)
5722     {
5723       if (TREE_CODE (expr) == PTRMEM_CST)
5724         /* A PTRMEM_CST is already constant, and a valid template
5725            argument for a parameter of pointer to member type, we just want
5726            to leave it in that form rather than lower it to a
5727            CONSTRUCTOR.  */;
5728       else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5729         expr = maybe_constant_value (expr);
5730       else if (TYPE_PTR_P (type)
5731                || TYPE_PTR_TO_MEMBER_P (type))
5732         {
5733           tree folded = maybe_constant_value (expr);
5734           if (TYPE_PTR_P (type) ? integer_zerop (folded)
5735               : null_member_pointer_value_p (folded))
5736             expr = folded;
5737         }
5738     }
5739
5740   /* HACK: Due to double coercion, we can get a
5741      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5742      which is the tree that we built on the first call (see
5743      below when coercing to reference to object or to reference to
5744      function). We just strip everything and get to the arg.
5745      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5746      for examples.  */
5747   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5748     {
5749       tree probe_type, probe = expr;
5750       if (REFERENCE_REF_P (probe))
5751         probe = TREE_OPERAND (probe, 0);
5752       probe_type = TREE_TYPE (probe);
5753       if (TREE_CODE (probe) == NOP_EXPR)
5754         {
5755           /* ??? Maybe we could use convert_from_reference here, but we
5756              would need to relax its constraints because the NOP_EXPR
5757              could actually change the type to something more cv-qualified,
5758              and this is not folded by convert_from_reference.  */
5759           tree addr = TREE_OPERAND (probe, 0);
5760           gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5761           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5762           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5763           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5764                       (TREE_TYPE (probe_type),
5765                        TREE_TYPE (TREE_TYPE (addr))));
5766
5767           expr = TREE_OPERAND (addr, 0);
5768           expr_type = TREE_TYPE (expr);
5769         }
5770     }
5771
5772   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5773      parameter is a pointer to object, through decay and
5774      qualification conversion. Let's strip everything.  */
5775   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5776     {
5777       STRIP_NOPS (expr);
5778       gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5779       gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5780       /* Skip the ADDR_EXPR only if it is part of the decay for
5781          an array. Otherwise, it is part of the original argument
5782          in the source code.  */
5783       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5784         expr = TREE_OPERAND (expr, 0);
5785       expr_type = TREE_TYPE (expr);
5786     }
5787
5788   /* [temp.arg.nontype]/5, bullet 1
5789
5790      For a non-type template-parameter of integral or enumeration type,
5791      integral promotions (_conv.prom_) and integral conversions
5792      (_conv.integral_) are applied.  */
5793   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5794     {
5795       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5796       t = maybe_constant_value (t);
5797       if (t != error_mark_node)
5798         expr = t;
5799
5800       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5801         return error_mark_node;
5802
5803       /* Notice that there are constant expressions like '4 % 0' which
5804          do not fold into integer constants.  */
5805       if (TREE_CODE (expr) != INTEGER_CST)
5806         {
5807           if (complain & tf_error)
5808             {
5809               int errs = errorcount, warns = warningcount;
5810               expr = cxx_constant_value (expr);
5811               if (errorcount > errs || warningcount > warns)
5812                 inform (EXPR_LOC_OR_HERE (expr),
5813                         "in template argument for type %qT ", type);
5814               if (expr == error_mark_node)
5815                 return NULL_TREE;
5816               /* else cxx_constant_value complained but gave us
5817                  a real constant, so go ahead.  */
5818               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5819             }
5820           else
5821             return NULL_TREE;
5822         }
5823     }
5824   /* [temp.arg.nontype]/5, bullet 2
5825
5826      For a non-type template-parameter of type pointer to object,
5827      qualification conversions (_conv.qual_) and the array-to-pointer
5828      conversion (_conv.array_) are applied.  */
5829   else if (TYPE_PTROBV_P (type))
5830     {
5831       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5832
5833          A template-argument for a non-type, non-template template-parameter
5834          shall be one of: [...]
5835
5836          -- the name of a non-type template-parameter;
5837          -- the address of an object or function with external linkage, [...]
5838             expressed as "& id-expression" where the & is optional if the name
5839             refers to a function or array, or if the corresponding
5840             template-parameter is a reference.
5841
5842         Here, we do not care about functions, as they are invalid anyway
5843         for a parameter of type pointer-to-object.  */
5844
5845       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5846         /* Non-type template parameters are OK.  */
5847         ;
5848       else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5849         /* Null pointer values are OK in C++11.  */;
5850       else if (TREE_CODE (expr) != ADDR_EXPR
5851                && TREE_CODE (expr_type) != ARRAY_TYPE)
5852         {
5853           if (TREE_CODE (expr) == VAR_DECL)
5854             {
5855               error ("%qD is not a valid template argument "
5856                      "because %qD is a variable, not the address of "
5857                      "a variable",
5858                      expr, expr);
5859               return NULL_TREE;
5860             }
5861           /* Other values, like integer constants, might be valid
5862              non-type arguments of some other type.  */
5863           return error_mark_node;
5864         }
5865       else
5866         {
5867           tree decl;
5868
5869           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5870                   ? TREE_OPERAND (expr, 0) : expr);
5871           if (TREE_CODE (decl) != VAR_DECL)
5872             {
5873               error ("%qE is not a valid template argument of type %qT "
5874                      "because %qE is not a variable",
5875                      expr, type, decl);
5876               return NULL_TREE;
5877             }
5878           else if (cxx_dialect < cxx0x && !DECL_EXTERNAL_LINKAGE_P (decl))
5879             {
5880               error ("%qE is not a valid template argument of type %qT "
5881                      "because %qD does not have external linkage",
5882                      expr, type, decl);
5883               return NULL_TREE;
5884             }
5885           else if (cxx_dialect >= cxx0x && decl_linkage (decl) == lk_none)
5886             {
5887               error ("%qE is not a valid template argument of type %qT "
5888                      "because %qD has no linkage",
5889                      expr, type, decl);
5890               return NULL_TREE;
5891             }
5892         }
5893
5894       expr = decay_conversion (expr);
5895       if (expr == error_mark_node)
5896         return error_mark_node;
5897
5898       expr = perform_qualification_conversions (type, expr);
5899       if (expr == error_mark_node)
5900         return error_mark_node;
5901     }
5902   /* [temp.arg.nontype]/5, bullet 3
5903
5904      For a non-type template-parameter of type reference to object, no
5905      conversions apply. The type referred to by the reference may be more
5906      cv-qualified than the (otherwise identical) type of the
5907      template-argument. The template-parameter is bound directly to the
5908      template-argument, which must be an lvalue.  */
5909   else if (TYPE_REF_OBJ_P (type))
5910     {
5911       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5912                                                       expr_type))
5913         return error_mark_node;
5914
5915       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5916         {
5917           error ("%qE is not a valid template argument for type %qT "
5918                  "because of conflicts in cv-qualification", expr, type);
5919           return NULL_TREE;
5920         }
5921
5922       if (!real_lvalue_p (expr))
5923         {
5924           error ("%qE is not a valid template argument for type %qT "
5925                  "because it is not an lvalue", expr, type);
5926           return NULL_TREE;
5927         }
5928
5929       /* [temp.arg.nontype]/1
5930
5931          A template-argument for a non-type, non-template template-parameter
5932          shall be one of: [...]
5933
5934          -- the address of an object or function with external linkage.  */
5935       if (TREE_CODE (expr) == INDIRECT_REF
5936           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5937         {
5938           expr = TREE_OPERAND (expr, 0);
5939           if (DECL_P (expr))
5940             {
5941               error ("%q#D is not a valid template argument for type %qT "
5942                      "because a reference variable does not have a constant "
5943                      "address", expr, type);
5944               return NULL_TREE;
5945             }
5946         }
5947
5948       if (!DECL_P (expr))
5949         {
5950           error ("%qE is not a valid template argument for type %qT "
5951                  "because it is not an object with external linkage",
5952                  expr, type);
5953           return NULL_TREE;
5954         }
5955
5956       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5957         {
5958           error ("%qE is not a valid template argument for type %qT "
5959                  "because object %qD has not external linkage",
5960                  expr, type, expr);
5961           return NULL_TREE;
5962         }
5963
5964       expr = build_nop (type, build_address (expr));
5965     }
5966   /* [temp.arg.nontype]/5, bullet 4
5967
5968      For a non-type template-parameter of type pointer to function, only
5969      the function-to-pointer conversion (_conv.func_) is applied. If the
5970      template-argument represents a set of overloaded functions (or a
5971      pointer to such), the matching function is selected from the set
5972      (_over.over_).  */
5973   else if (TYPE_PTRFN_P (type))
5974     {
5975       /* If the argument is a template-id, we might not have enough
5976          context information to decay the pointer.  */
5977       if (!type_unknown_p (expr_type))
5978         {
5979           expr = decay_conversion (expr);
5980           if (expr == error_mark_node)
5981             return error_mark_node;
5982         }
5983
5984       if (cxx_dialect >= cxx0x && integer_zerop (expr))
5985         /* Null pointer values are OK in C++11.  */
5986         return perform_qualification_conversions (type, expr);
5987
5988       expr = convert_nontype_argument_function (type, expr);
5989       if (!expr || expr == error_mark_node)
5990         return expr;
5991
5992       if (TREE_CODE (expr) != ADDR_EXPR)
5993         {
5994           error ("%qE is not a valid template argument for type %qT", expr, type);
5995           error ("it must be the address of a function with external linkage");
5996           return NULL_TREE;
5997         }
5998     }
5999   /* [temp.arg.nontype]/5, bullet 5
6000
6001      For a non-type template-parameter of type reference to function, no
6002      conversions apply. If the template-argument represents a set of
6003      overloaded functions, the matching function is selected from the set
6004      (_over.over_).  */
6005   else if (TYPE_REFFN_P (type))
6006     {
6007       if (TREE_CODE (expr) == ADDR_EXPR)
6008         {
6009           error ("%qE is not a valid template argument for type %qT "
6010                  "because it is a pointer", expr, type);
6011           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
6012           return NULL_TREE;
6013         }
6014
6015       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
6016       if (!expr || expr == error_mark_node)
6017         return expr;
6018
6019       expr = build_nop (type, build_address (expr));
6020     }
6021   /* [temp.arg.nontype]/5, bullet 6
6022
6023      For a non-type template-parameter of type pointer to member function,
6024      no conversions apply. If the template-argument represents a set of
6025      overloaded member functions, the matching member function is selected
6026      from the set (_over.over_).  */
6027   else if (TYPE_PTRMEMFUNC_P (type))
6028     {
6029       expr = instantiate_type (type, expr, tf_none);
6030       if (expr == error_mark_node)
6031         return error_mark_node;
6032
6033       /* [temp.arg.nontype] bullet 1 says the pointer to member
6034          expression must be a pointer-to-member constant.  */
6035       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6036         return error_mark_node;
6037
6038       /* There is no way to disable standard conversions in
6039          resolve_address_of_overloaded_function (called by
6040          instantiate_type). It is possible that the call succeeded by
6041          converting &B::I to &D::I (where B is a base of D), so we need
6042          to reject this conversion here.
6043
6044          Actually, even if there was a way to disable standard conversions,
6045          it would still be better to reject them here so that we can
6046          provide a superior diagnostic.  */
6047       if (!same_type_p (TREE_TYPE (expr), type))
6048         {
6049           error ("%qE is not a valid template argument for type %qT "
6050                  "because it is of type %qT", expr, type,
6051                  TREE_TYPE (expr));
6052           /* If we are just one standard conversion off, explain.  */
6053           if (can_convert (type, TREE_TYPE (expr)))
6054             inform (input_location,
6055                     "standard conversions are not allowed in this context");
6056           return NULL_TREE;
6057         }
6058     }
6059   /* [temp.arg.nontype]/5, bullet 7
6060
6061      For a non-type template-parameter of type pointer to data member,
6062      qualification conversions (_conv.qual_) are applied.  */
6063   else if (TYPE_PTRMEM_P (type))
6064     {
6065       /* [temp.arg.nontype] bullet 1 says the pointer to member
6066          expression must be a pointer-to-member constant.  */
6067       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6068         return error_mark_node;
6069
6070       expr = perform_qualification_conversions (type, expr);
6071       if (expr == error_mark_node)
6072         return expr;
6073     }
6074   else if (NULLPTR_TYPE_P (type))
6075     {
6076       if (expr != nullptr_node)
6077         {
6078           error ("%qE is not a valid template argument for type %qT "
6079                  "because it is of type %qT", expr, type, TREE_TYPE (expr));
6080           return NULL_TREE;
6081         }
6082       return expr;
6083     }
6084   /* A template non-type parameter must be one of the above.  */
6085   else
6086     gcc_unreachable ();
6087
6088   /* Sanity check: did we actually convert the argument to the
6089      right type?  */
6090   gcc_assert (same_type_ignoring_top_level_qualifiers_p
6091               (type, TREE_TYPE (expr)));
6092   return expr;
6093 }
6094
6095 /* Subroutine of coerce_template_template_parms, which returns 1 if
6096    PARM_PARM and ARG_PARM match using the rule for the template
6097    parameters of template template parameters. Both PARM and ARG are
6098    template parameters; the rest of the arguments are the same as for
6099    coerce_template_template_parms.
6100  */
6101 static int
6102 coerce_template_template_parm (tree parm,
6103                               tree arg,
6104                               tsubst_flags_t complain,
6105                               tree in_decl,
6106                               tree outer_args)
6107 {
6108   if (arg == NULL_TREE || arg == error_mark_node
6109       || parm == NULL_TREE || parm == error_mark_node)
6110     return 0;
6111   
6112   if (TREE_CODE (arg) != TREE_CODE (parm))
6113     return 0;
6114   
6115   switch (TREE_CODE (parm))
6116     {
6117     case TEMPLATE_DECL:
6118       /* We encounter instantiations of templates like
6119          template <template <template <class> class> class TT>
6120          class C;  */
6121       {
6122         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6123         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6124         
6125         if (!coerce_template_template_parms
6126             (parmparm, argparm, complain, in_decl, outer_args))
6127           return 0;
6128       }
6129       /* Fall through.  */
6130       
6131     case TYPE_DECL:
6132       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6133           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6134         /* Argument is a parameter pack but parameter is not.  */
6135         return 0;
6136       break;
6137       
6138     case PARM_DECL:
6139       /* The tsubst call is used to handle cases such as
6140          
6141            template <int> class C {};
6142            template <class T, template <T> class TT> class D {};
6143            D<int, C> d;
6144
6145          i.e. the parameter list of TT depends on earlier parameters.  */
6146       if (!uses_template_parms (TREE_TYPE (arg))
6147           && !same_type_p
6148                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6149                  TREE_TYPE (arg)))
6150         return 0;
6151       
6152       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6153           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6154         /* Argument is a parameter pack but parameter is not.  */
6155         return 0;
6156       
6157       break;
6158
6159     default:
6160       gcc_unreachable ();
6161     }
6162
6163   return 1;
6164 }
6165
6166
6167 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6168    template template parameters.  Both PARM_PARMS and ARG_PARMS are
6169    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6170    or PARM_DECL.
6171
6172    Consider the example:
6173      template <class T> class A;
6174      template<template <class U> class TT> class B;
6175
6176    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6177    the parameters to A, and OUTER_ARGS contains A.  */
6178
6179 static int
6180 coerce_template_template_parms (tree parm_parms,
6181                                 tree arg_parms,
6182                                 tsubst_flags_t complain,
6183                                 tree in_decl,
6184                                 tree outer_args)
6185 {
6186   int nparms, nargs, i;
6187   tree parm, arg;
6188   int variadic_p = 0;
6189
6190   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6191   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6192
6193   nparms = TREE_VEC_LENGTH (parm_parms);
6194   nargs = TREE_VEC_LENGTH (arg_parms);
6195
6196   /* Determine whether we have a parameter pack at the end of the
6197      template template parameter's template parameter list.  */
6198   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6199     {
6200       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6201       
6202       if (parm == error_mark_node)
6203         return 0;
6204
6205       switch (TREE_CODE (parm))
6206         {
6207         case TEMPLATE_DECL:
6208         case TYPE_DECL:
6209           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6210             variadic_p = 1;
6211           break;
6212           
6213         case PARM_DECL:
6214           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6215             variadic_p = 1;
6216           break;
6217           
6218         default:
6219           gcc_unreachable ();
6220         }
6221     }
6222  
6223   if (nargs != nparms
6224       && !(variadic_p && nargs >= nparms - 1))
6225     return 0;
6226
6227   /* Check all of the template parameters except the parameter pack at
6228      the end (if any).  */
6229   for (i = 0; i < nparms - variadic_p; ++i)
6230     {
6231       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6232           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6233         continue;
6234
6235       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6236       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6237
6238       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6239                                           outer_args))
6240         return 0;
6241
6242     }
6243
6244   if (variadic_p)
6245     {
6246       /* Check each of the template parameters in the template
6247          argument against the template parameter pack at the end of
6248          the template template parameter.  */
6249       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6250         return 0;
6251
6252       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6253
6254       for (; i < nargs; ++i)
6255         {
6256           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6257             continue;
6258  
6259           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6260  
6261           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6262                                               outer_args))
6263             return 0;
6264         }
6265     }
6266
6267   return 1;
6268 }
6269
6270 /* Verifies that the deduced template arguments (in TARGS) for the
6271    template template parameters (in TPARMS) represent valid bindings,
6272    by comparing the template parameter list of each template argument
6273    to the template parameter list of its corresponding template
6274    template parameter, in accordance with DR150. This
6275    routine can only be called after all template arguments have been
6276    deduced. It will return TRUE if all of the template template
6277    parameter bindings are okay, FALSE otherwise.  */
6278 bool 
6279 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6280 {
6281   int i, ntparms = TREE_VEC_LENGTH (tparms);
6282   bool ret = true;
6283
6284   /* We're dealing with template parms in this process.  */
6285   ++processing_template_decl;
6286
6287   targs = INNERMOST_TEMPLATE_ARGS (targs);
6288
6289   for (i = 0; i < ntparms; ++i)
6290     {
6291       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6292       tree targ = TREE_VEC_ELT (targs, i);
6293
6294       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6295         {
6296           tree packed_args = NULL_TREE;
6297           int idx, len = 1;
6298
6299           if (ARGUMENT_PACK_P (targ))
6300             {
6301               /* Look inside the argument pack.  */
6302               packed_args = ARGUMENT_PACK_ARGS (targ);
6303               len = TREE_VEC_LENGTH (packed_args);
6304             }
6305
6306           for (idx = 0; idx < len; ++idx)
6307             {
6308               tree targ_parms = NULL_TREE;
6309
6310               if (packed_args)
6311                 /* Extract the next argument from the argument
6312                    pack.  */
6313                 targ = TREE_VEC_ELT (packed_args, idx);
6314
6315               if (PACK_EXPANSION_P (targ))
6316                 /* Look at the pattern of the pack expansion.  */
6317                 targ = PACK_EXPANSION_PATTERN (targ);
6318
6319               /* Extract the template parameters from the template
6320                  argument.  */
6321               if (TREE_CODE (targ) == TEMPLATE_DECL)
6322                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6323               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6324                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6325
6326               /* Verify that we can coerce the template template
6327                  parameters from the template argument to the template
6328                  parameter.  This requires an exact match.  */
6329               if (targ_parms
6330                   && !coerce_template_template_parms
6331                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6332                         targ_parms,
6333                         tf_none,
6334                         tparm,
6335                         targs))
6336                 {
6337                   ret = false;
6338                   goto out;
6339                 }
6340             }
6341         }
6342     }
6343
6344  out:
6345
6346   --processing_template_decl;
6347   return ret;
6348 }
6349
6350 /* Since type attributes aren't mangled, we need to strip them from
6351    template type arguments.  */
6352
6353 static tree
6354 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6355 {
6356   tree mv;
6357   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6358     return arg;
6359   mv = TYPE_MAIN_VARIANT (arg);
6360   arg = strip_typedefs (arg);
6361   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6362       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6363     {
6364       if (complain & tf_warning)
6365         warning (0, "ignoring attributes on template argument %qT", arg);
6366       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6367       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6368     }
6369   return arg;
6370 }
6371
6372 /* Convert the indicated template ARG as necessary to match the
6373    indicated template PARM.  Returns the converted ARG, or
6374    error_mark_node if the conversion was unsuccessful.  Error and
6375    warning messages are issued under control of COMPLAIN.  This
6376    conversion is for the Ith parameter in the parameter list.  ARGS is
6377    the full set of template arguments deduced so far.  */
6378
6379 static tree
6380 convert_template_argument (tree parm,
6381                            tree arg,
6382                            tree args,
6383                            tsubst_flags_t complain,
6384                            int i,
6385                            tree in_decl)
6386 {
6387   tree orig_arg;
6388   tree val;
6389   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6390
6391   if (TREE_CODE (arg) == TREE_LIST
6392       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6393     {
6394       /* The template argument was the name of some
6395          member function.  That's usually
6396          invalid, but static members are OK.  In any
6397          case, grab the underlying fields/functions
6398          and issue an error later if required.  */
6399       orig_arg = TREE_VALUE (arg);
6400       TREE_TYPE (arg) = unknown_type_node;
6401     }
6402
6403   orig_arg = arg;
6404
6405   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6406   requires_type = (TREE_CODE (parm) == TYPE_DECL
6407                    || requires_tmpl_type);
6408
6409   /* When determining whether an argument pack expansion is a template,
6410      look at the pattern.  */
6411   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6412     arg = PACK_EXPANSION_PATTERN (arg);
6413
6414   /* Deal with an injected-class-name used as a template template arg.  */
6415   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6416     {
6417       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6418       if (TREE_CODE (t) == TEMPLATE_DECL)
6419         {
6420           if (cxx_dialect >= cxx0x)
6421             /* OK under DR 1004.  */;
6422           else if (complain & tf_warning_or_error)
6423             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6424                      " used as template template argument", TYPE_NAME (arg));
6425           else if (flag_pedantic_errors)
6426             t = arg;
6427
6428           arg = t;
6429         }
6430     }
6431
6432   is_tmpl_type = 
6433     ((TREE_CODE (arg) == TEMPLATE_DECL
6434       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6435      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6436      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6437
6438   if (is_tmpl_type
6439       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6440           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6441     arg = TYPE_STUB_DECL (arg);
6442
6443   is_type = TYPE_P (arg) || is_tmpl_type;
6444
6445   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6446       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6447     {
6448       if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6449         {
6450           if (complain & tf_error)
6451             error ("invalid use of destructor %qE as a type", orig_arg);
6452           return error_mark_node;
6453         }
6454
6455       permerror (input_location,
6456                  "to refer to a type member of a template parameter, "
6457                  "use %<typename %E%>", orig_arg);
6458
6459       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6460                                      TREE_OPERAND (arg, 1),
6461                                      typename_type,
6462                                      complain & tf_error);
6463       arg = orig_arg;
6464       is_type = 1;
6465     }
6466   if (is_type != requires_type)
6467     {
6468       if (in_decl)
6469         {
6470           if (complain & tf_error)
6471             {
6472               error ("type/value mismatch at argument %d in template "
6473                      "parameter list for %qD",
6474                      i + 1, in_decl);
6475               if (is_type)
6476                 error ("  expected a constant of type %qT, got %qT",
6477                        TREE_TYPE (parm),
6478                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6479               else if (requires_tmpl_type)
6480                 error ("  expected a class template, got %qE", orig_arg);
6481               else
6482                 error ("  expected a type, got %qE", orig_arg);
6483             }
6484         }
6485       return error_mark_node;
6486     }
6487   if (is_tmpl_type ^ requires_tmpl_type)
6488     {
6489       if (in_decl && (complain & tf_error))
6490         {
6491           error ("type/value mismatch at argument %d in template "
6492                  "parameter list for %qD",
6493                  i + 1, in_decl);
6494           if (is_tmpl_type)
6495             error ("  expected a type, got %qT", DECL_NAME (arg));
6496           else
6497             error ("  expected a class template, got %qT", orig_arg);
6498         }
6499       return error_mark_node;
6500     }
6501
6502   if (is_type)
6503     {
6504       if (requires_tmpl_type)
6505         {
6506           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6507             /* The number of argument required is not known yet.
6508                Just accept it for now.  */
6509             val = TREE_TYPE (arg);
6510           else
6511             {
6512               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6513               tree argparm;
6514
6515               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6516
6517               if (coerce_template_template_parms (parmparm, argparm,
6518                                                   complain, in_decl,
6519                                                   args))
6520                 {
6521                   val = arg;
6522
6523                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6524                      TEMPLATE_DECL.  */
6525                   if (val != error_mark_node)
6526                     {
6527                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6528                         val = TREE_TYPE (val);
6529                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6530                         val = make_pack_expansion (val);
6531                     }
6532                 }
6533               else
6534                 {
6535                   if (in_decl && (complain & tf_error))
6536                     {
6537                       error ("type/value mismatch at argument %d in "
6538                              "template parameter list for %qD",
6539                              i + 1, in_decl);
6540                       error ("  expected a template of type %qD, got %qT",
6541                              parm, orig_arg);
6542                     }
6543
6544                   val = error_mark_node;
6545                 }
6546             }
6547         }
6548       else
6549         val = orig_arg;
6550       /* We only form one instance of each template specialization.
6551          Therefore, if we use a non-canonical variant (i.e., a
6552          typedef), any future messages referring to the type will use
6553          the typedef, which is confusing if those future uses do not
6554          themselves also use the typedef.  */
6555       if (TYPE_P (val))
6556         val = canonicalize_type_argument (val, complain);
6557     }
6558   else
6559     {
6560       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6561
6562       if (invalid_nontype_parm_type_p (t, complain))
6563         return error_mark_node;
6564
6565       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6566         {
6567           if (same_type_p (t, TREE_TYPE (orig_arg)))
6568             val = orig_arg;
6569           else
6570             {
6571               /* Not sure if this is reachable, but it doesn't hurt
6572                  to be robust.  */
6573               error ("type mismatch in nontype parameter pack");
6574               val = error_mark_node;
6575             }
6576         }
6577       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6578         /* We used to call digest_init here.  However, digest_init
6579            will report errors, which we don't want when complain
6580            is zero.  More importantly, digest_init will try too
6581            hard to convert things: for example, `0' should not be
6582            converted to pointer type at this point according to
6583            the standard.  Accepting this is not merely an
6584            extension, since deciding whether or not these
6585            conversions can occur is part of determining which
6586            function template to call, or whether a given explicit
6587            argument specification is valid.  */
6588         val = convert_nontype_argument (t, orig_arg, complain);
6589       else
6590         val = orig_arg;
6591
6592       if (val == NULL_TREE)
6593         val = error_mark_node;
6594       else if (val == error_mark_node && (complain & tf_error))
6595         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6596
6597       if (TREE_CODE (val) == SCOPE_REF)
6598         {
6599           /* Strip typedefs from the SCOPE_REF.  */
6600           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6601           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6602                                                    complain);
6603           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6604                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6605         }
6606     }
6607
6608   return val;
6609 }
6610
6611 /* Coerces the remaining template arguments in INNER_ARGS (from
6612    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6613    Returns the coerced argument pack. PARM_IDX is the position of this
6614    parameter in the template parameter list. ARGS is the original
6615    template argument list.  */
6616 static tree
6617 coerce_template_parameter_pack (tree parms,
6618                                 int parm_idx,
6619                                 tree args,
6620                                 tree inner_args,
6621                                 int arg_idx,
6622                                 tree new_args,
6623                                 int* lost,
6624                                 tree in_decl,
6625                                 tsubst_flags_t complain)
6626 {
6627   tree parm = TREE_VEC_ELT (parms, parm_idx);
6628   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6629   tree packed_args;
6630   tree argument_pack;
6631   tree packed_types = NULL_TREE;
6632
6633   if (arg_idx > nargs)
6634     arg_idx = nargs;
6635
6636   packed_args = make_tree_vec (nargs - arg_idx);
6637
6638   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6639       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6640     {
6641       /* When the template parameter is a non-type template
6642          parameter pack whose type uses parameter packs, we need
6643          to look at each of the template arguments
6644          separately. Build a vector of the types for these
6645          non-type template parameters in PACKED_TYPES.  */
6646       tree expansion 
6647         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6648       packed_types = tsubst_pack_expansion (expansion, args,
6649                                             complain, in_decl);
6650
6651       if (packed_types == error_mark_node)
6652         return error_mark_node;
6653
6654       /* Check that we have the right number of arguments.  */
6655       if (arg_idx < nargs
6656           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6657           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6658         {
6659           int needed_parms 
6660             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6661           error ("wrong number of template arguments (%d, should be %d)",
6662                  nargs, needed_parms);
6663           return error_mark_node;
6664         }
6665
6666       /* If we aren't able to check the actual arguments now
6667          (because they haven't been expanded yet), we can at least
6668          verify that all of the types used for the non-type
6669          template parameter pack are, in fact, valid for non-type
6670          template parameters.  */
6671       if (arg_idx < nargs 
6672           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6673         {
6674           int j, len = TREE_VEC_LENGTH (packed_types);
6675           for (j = 0; j < len; ++j)
6676             {
6677               tree t = TREE_VEC_ELT (packed_types, j);
6678               if (invalid_nontype_parm_type_p (t, complain))
6679                 return error_mark_node;
6680             }
6681         }
6682     }
6683
6684   /* Convert the remaining arguments, which will be a part of the
6685      parameter pack "parm".  */
6686   for (; arg_idx < nargs; ++arg_idx)
6687     {
6688       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6689       tree actual_parm = TREE_VALUE (parm);
6690
6691       if (packed_types && !PACK_EXPANSION_P (arg))
6692         {
6693           /* When we have a vector of types (corresponding to the
6694              non-type template parameter pack that uses parameter
6695              packs in its type, as mention above), and the
6696              argument is not an expansion (which expands to a
6697              currently unknown number of arguments), clone the
6698              parm and give it the next type in PACKED_TYPES.  */
6699           actual_parm = copy_node (actual_parm);
6700           TREE_TYPE (actual_parm) = 
6701             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6702         }
6703
6704       if (arg != error_mark_node)
6705         arg = convert_template_argument (actual_parm, 
6706                                          arg, new_args, complain, parm_idx,
6707                                          in_decl);
6708       if (arg == error_mark_node)
6709         (*lost)++;
6710       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6711     }
6712
6713   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6714       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6715     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6716   else
6717     {
6718       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6719       TREE_TYPE (argument_pack) 
6720         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6721       TREE_CONSTANT (argument_pack) = 1;
6722     }
6723
6724   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6725 #ifdef ENABLE_CHECKING
6726   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6727                                        TREE_VEC_LENGTH (packed_args));
6728 #endif
6729   return argument_pack;
6730 }
6731
6732 /* Convert all template arguments to their appropriate types, and
6733    return a vector containing the innermost resulting template
6734    arguments.  If any error occurs, return error_mark_node. Error and
6735    warning messages are issued under control of COMPLAIN.
6736
6737    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6738    for arguments not specified in ARGS.  Otherwise, if
6739    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6740    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6741    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6742    ARGS.  */
6743
6744 static tree
6745 coerce_template_parms (tree parms,
6746                        tree args,
6747                        tree in_decl,
6748                        tsubst_flags_t complain,
6749                        bool require_all_args,
6750                        bool use_default_args)
6751 {
6752   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6753   tree inner_args;
6754   tree new_args;
6755   tree new_inner_args;
6756   int saved_unevaluated_operand;
6757   int saved_inhibit_evaluation_warnings;
6758
6759   /* When used as a boolean value, indicates whether this is a
6760      variadic template parameter list. Since it's an int, we can also
6761      subtract it from nparms to get the number of non-variadic
6762      parameters.  */
6763   int variadic_p = 0;
6764   int post_variadic_parms = 0;
6765
6766   if (args == error_mark_node)
6767     return error_mark_node;
6768
6769   nparms = TREE_VEC_LENGTH (parms);
6770
6771   /* Determine if there are any parameter packs.  */
6772   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6773     {
6774       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6775       if (variadic_p)
6776         ++post_variadic_parms;
6777       if (template_parameter_pack_p (tparm))
6778         ++variadic_p;
6779     }
6780
6781   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6782   /* If there are no parameters that follow a parameter pack, we need to
6783      expand any argument packs so that we can deduce a parameter pack from
6784      some non-packed args followed by an argument pack, as in variadic85.C.
6785      If there are such parameters, we need to leave argument packs intact
6786      so the arguments are assigned properly.  This can happen when dealing
6787      with a nested class inside a partial specialization of a class
6788      template, as in variadic92.C, or when deducing a template parameter pack
6789      from a sub-declarator, as in variadic114.C.  */
6790   if (!post_variadic_parms)
6791     inner_args = expand_template_argument_pack (inner_args);
6792
6793   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6794   if ((nargs > nparms && !variadic_p)
6795       || (nargs < nparms - variadic_p
6796           && require_all_args
6797           && (!use_default_args
6798               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6799                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6800     {
6801       if (complain & tf_error)
6802         {
6803           if (variadic_p)
6804             {
6805               nparms -= variadic_p;
6806               error ("wrong number of template arguments "
6807                      "(%d, should be %d or more)", nargs, nparms);
6808             }
6809           else
6810              error ("wrong number of template arguments "
6811                     "(%d, should be %d)", nargs, nparms);
6812
6813           if (in_decl)
6814             error ("provided for %q+D", in_decl);
6815         }
6816
6817       return error_mark_node;
6818     }
6819
6820   /* We need to evaluate the template arguments, even though this
6821      template-id may be nested within a "sizeof".  */
6822   saved_unevaluated_operand = cp_unevaluated_operand;
6823   cp_unevaluated_operand = 0;
6824   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6825   c_inhibit_evaluation_warnings = 0;
6826   new_inner_args = make_tree_vec (nparms);
6827   new_args = add_outermost_template_args (args, new_inner_args);
6828   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6829     {
6830       tree arg;
6831       tree parm;
6832
6833       /* Get the Ith template parameter.  */
6834       parm = TREE_VEC_ELT (parms, parm_idx);
6835  
6836       if (parm == error_mark_node)
6837       {
6838         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6839         continue;
6840       }
6841
6842       /* Calculate the next argument.  */
6843       if (arg_idx < nargs)
6844         arg = TREE_VEC_ELT (inner_args, arg_idx);
6845       else
6846         arg = NULL_TREE;
6847
6848       if (template_parameter_pack_p (TREE_VALUE (parm))
6849           && !(arg && ARGUMENT_PACK_P (arg)))
6850         {
6851           /* All remaining arguments will be placed in the
6852              template parameter pack PARM.  */
6853           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6854                                                 inner_args, arg_idx,
6855                                                 new_args, &lost,
6856                                                 in_decl, complain);
6857
6858           /* Store this argument.  */
6859           if (arg == error_mark_node)
6860             lost++;
6861           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6862
6863           /* We are done with all of the arguments.  */
6864           arg_idx = nargs;
6865           
6866           continue;
6867         }
6868       else if (arg)
6869         {
6870           if (PACK_EXPANSION_P (arg))
6871             {
6872               /* We don't know how many args we have yet, just
6873                  use the unconverted ones for now.  */
6874               new_inner_args = args;
6875               break;
6876             }
6877         }
6878       else if (require_all_args)
6879         {
6880           /* There must be a default arg in this case.  */
6881           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6882                                      complain, in_decl);
6883           /* The position of the first default template argument,
6884              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6885              Record that.  */
6886           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6887             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6888         }
6889       else
6890         break;
6891
6892       if (arg == error_mark_node)
6893         {
6894           if (complain & tf_error)
6895             error ("template argument %d is invalid", arg_idx + 1);
6896         }
6897       else if (!arg)
6898         /* This only occurs if there was an error in the template
6899            parameter list itself (which we would already have
6900            reported) that we are trying to recover from, e.g., a class
6901            template with a parameter list such as
6902            template<typename..., typename>.  */
6903         ++lost;
6904       else
6905         arg = convert_template_argument (TREE_VALUE (parm),
6906                                          arg, new_args, complain, 
6907                                          parm_idx, in_decl);
6908
6909       if (arg == error_mark_node)
6910         lost++;
6911       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6912     }
6913   cp_unevaluated_operand = saved_unevaluated_operand;
6914   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6915
6916   if (lost)
6917     return error_mark_node;
6918
6919 #ifdef ENABLE_CHECKING
6920   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6921     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6922                                          TREE_VEC_LENGTH (new_inner_args));
6923 #endif
6924
6925   return new_inner_args;
6926 }
6927
6928 /* Returns 1 if template args OT and NT are equivalent.  */
6929
6930 static int
6931 template_args_equal (tree ot, tree nt)
6932 {
6933   if (nt == ot)
6934     return 1;
6935   if (nt == NULL_TREE || ot == NULL_TREE)
6936     return false;
6937
6938   if (TREE_CODE (nt) == TREE_VEC)
6939     /* For member templates */
6940     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6941   else if (PACK_EXPANSION_P (ot))
6942     return (PACK_EXPANSION_P (nt)
6943             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6944                                     PACK_EXPANSION_PATTERN (nt))
6945             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
6946                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
6947   else if (ARGUMENT_PACK_P (ot))
6948     {
6949       int i, len;
6950       tree opack, npack;
6951
6952       if (!ARGUMENT_PACK_P (nt))
6953         return 0;
6954
6955       opack = ARGUMENT_PACK_ARGS (ot);
6956       npack = ARGUMENT_PACK_ARGS (nt);
6957       len = TREE_VEC_LENGTH (opack);
6958       if (TREE_VEC_LENGTH (npack) != len)
6959         return 0;
6960       for (i = 0; i < len; ++i)
6961         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6962                                   TREE_VEC_ELT (npack, i)))
6963           return 0;
6964       return 1;
6965     }
6966   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6967     {
6968       /* We get here probably because we are in the middle of substituting
6969          into the pattern of a pack expansion. In that case the
6970          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6971          interested in. So we want to use the initial pack argument for
6972          the comparison.  */
6973       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6974       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6975         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6976       return template_args_equal (ot, nt);
6977     }
6978   else if (TYPE_P (nt))
6979     return TYPE_P (ot) && same_type_p (ot, nt);
6980   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6981     return 0;
6982   else
6983     return cp_tree_equal (ot, nt);
6984 }
6985
6986 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6987    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6988    NEWARG_PTR with the offending arguments if they are non-NULL.  */
6989
6990 static int
6991 comp_template_args_with_info (tree oldargs, tree newargs,
6992                               tree *oldarg_ptr, tree *newarg_ptr)
6993 {
6994   int i;
6995
6996   if (oldargs == newargs)
6997     return 1;
6998
6999   if (!oldargs || !newargs)
7000     return 0;
7001
7002   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7003     return 0;
7004
7005   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7006     {
7007       tree nt = TREE_VEC_ELT (newargs, i);
7008       tree ot = TREE_VEC_ELT (oldargs, i);
7009
7010       if (! template_args_equal (ot, nt))
7011         {
7012           if (oldarg_ptr != NULL)
7013             *oldarg_ptr = ot;
7014           if (newarg_ptr != NULL)
7015             *newarg_ptr = nt;
7016           return 0;
7017         }
7018     }
7019   return 1;
7020 }
7021
7022 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7023    of template arguments.  Returns 0 otherwise.  */
7024
7025 int
7026 comp_template_args (tree oldargs, tree newargs)
7027 {
7028   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7029 }
7030
7031 static void
7032 add_pending_template (tree d)
7033 {
7034   tree ti = (TYPE_P (d)
7035              ? CLASSTYPE_TEMPLATE_INFO (d)
7036              : DECL_TEMPLATE_INFO (d));
7037   struct pending_template *pt;
7038   int level;
7039
7040   if (TI_PENDING_TEMPLATE_FLAG (ti))
7041     return;
7042
7043   /* We are called both from instantiate_decl, where we've already had a
7044      tinst_level pushed, and instantiate_template, where we haven't.
7045      Compensate.  */
7046   level = !current_tinst_level || current_tinst_level->decl != d;
7047
7048   if (level)
7049     push_tinst_level (d);
7050
7051   pt = ggc_alloc_pending_template ();
7052   pt->next = NULL;
7053   pt->tinst = current_tinst_level;
7054   if (last_pending_template)
7055     last_pending_template->next = pt;
7056   else
7057     pending_templates = pt;
7058
7059   last_pending_template = pt;
7060
7061   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7062
7063   if (level)
7064     pop_tinst_level ();
7065 }
7066
7067
7068 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7069    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7070    documentation for TEMPLATE_ID_EXPR.  */
7071
7072 tree
7073 lookup_template_function (tree fns, tree arglist)
7074 {
7075   tree type;
7076
7077   if (fns == error_mark_node || arglist == error_mark_node)
7078     return error_mark_node;
7079
7080   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7081
7082   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
7083     {
7084       error ("%q#D is not a function template", fns);
7085       return error_mark_node;
7086     }
7087
7088   if (BASELINK_P (fns))
7089     {
7090       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7091                                          unknown_type_node,
7092                                          BASELINK_FUNCTIONS (fns),
7093                                          arglist);
7094       return fns;
7095     }
7096
7097   type = TREE_TYPE (fns);
7098   if (TREE_CODE (fns) == OVERLOAD || !type)
7099     type = unknown_type_node;
7100
7101   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7102 }
7103
7104 /* Within the scope of a template class S<T>, the name S gets bound
7105    (in build_self_reference) to a TYPE_DECL for the class, not a
7106    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7107    or one of its enclosing classes, and that type is a template,
7108    return the associated TEMPLATE_DECL.  Otherwise, the original
7109    DECL is returned.
7110
7111    Also handle the case when DECL is a TREE_LIST of ambiguous
7112    injected-class-names from different bases.  */
7113
7114 tree
7115 maybe_get_template_decl_from_type_decl (tree decl)
7116 {
7117   if (decl == NULL_TREE)
7118     return decl;
7119
7120   /* DR 176: A lookup that finds an injected-class-name (10.2
7121      [class.member.lookup]) can result in an ambiguity in certain cases
7122      (for example, if it is found in more than one base class). If all of
7123      the injected-class-names that are found refer to specializations of
7124      the same class template, and if the name is followed by a
7125      template-argument-list, the reference refers to the class template
7126      itself and not a specialization thereof, and is not ambiguous.  */
7127   if (TREE_CODE (decl) == TREE_LIST)
7128     {
7129       tree t, tmpl = NULL_TREE;
7130       for (t = decl; t; t = TREE_CHAIN (t))
7131         {
7132           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7133           if (!tmpl)
7134             tmpl = elt;
7135           else if (tmpl != elt)
7136             break;
7137         }
7138       if (tmpl && t == NULL_TREE)
7139         return tmpl;
7140       else
7141         return decl;
7142     }
7143
7144   return (decl != NULL_TREE
7145           && DECL_SELF_REFERENCE_P (decl)
7146           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7147     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7148 }
7149
7150 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
7151    parameters, find the desired type.
7152
7153    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7154
7155    IN_DECL, if non-NULL, is the template declaration we are trying to
7156    instantiate.
7157
7158    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7159    the class we are looking up.
7160
7161    Issue error and warning messages under control of COMPLAIN.
7162
7163    If the template class is really a local class in a template
7164    function, then the FUNCTION_CONTEXT is the function in which it is
7165    being instantiated.
7166
7167    ??? Note that this function is currently called *twice* for each
7168    template-id: the first time from the parser, while creating the
7169    incomplete type (finish_template_type), and the second type during the
7170    real instantiation (instantiate_template_class). This is surely something
7171    that we want to avoid. It also causes some problems with argument
7172    coercion (see convert_nontype_argument for more information on this).  */
7173
7174 static tree
7175 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7176                          int entering_scope, tsubst_flags_t complain)
7177 {
7178   tree templ = NULL_TREE, parmlist;
7179   tree t;
7180   void **slot;
7181   spec_entry *entry;
7182   spec_entry elt;
7183   hashval_t hash;
7184
7185   if (TREE_CODE (d1) == IDENTIFIER_NODE)
7186     {
7187       tree value = innermost_non_namespace_value (d1);
7188       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7189         templ = value;
7190       else
7191         {
7192           if (context)
7193             push_decl_namespace (context);
7194           templ = lookup_name (d1);
7195           templ = maybe_get_template_decl_from_type_decl (templ);
7196           if (context)
7197             pop_decl_namespace ();
7198         }
7199       if (templ)
7200         context = DECL_CONTEXT (templ);
7201     }
7202   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7203     {
7204       tree type = TREE_TYPE (d1);
7205
7206       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7207          an implicit typename for the second A.  Deal with it.  */
7208       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7209         type = TREE_TYPE (type);
7210
7211       if (CLASSTYPE_TEMPLATE_INFO (type))
7212         {
7213           templ = CLASSTYPE_TI_TEMPLATE (type);
7214           d1 = DECL_NAME (templ);
7215         }
7216     }
7217   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7218            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7219     {
7220       templ = TYPE_TI_TEMPLATE (d1);
7221       d1 = DECL_NAME (templ);
7222     }
7223   else if (TREE_CODE (d1) == TEMPLATE_DECL
7224            && DECL_TEMPLATE_RESULT (d1)
7225            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7226     {
7227       templ = d1;
7228       d1 = DECL_NAME (templ);
7229       context = DECL_CONTEXT (templ);
7230     }
7231
7232   /* Issue an error message if we didn't find a template.  */
7233   if (! templ)
7234     {
7235       if (complain & tf_error)
7236         error ("%qT is not a template", d1);
7237       return error_mark_node;
7238     }
7239
7240   if (TREE_CODE (templ) != TEMPLATE_DECL
7241          /* Make sure it's a user visible template, if it was named by
7242             the user.  */
7243       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7244           && !PRIMARY_TEMPLATE_P (templ)))
7245     {
7246       if (complain & tf_error)
7247         {
7248           error ("non-template type %qT used as a template", d1);
7249           if (in_decl)
7250             error ("for template declaration %q+D", in_decl);
7251         }
7252       return error_mark_node;
7253     }
7254
7255   complain &= ~tf_user;
7256
7257   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7258     {
7259       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7260          template arguments */
7261
7262       tree parm;
7263       tree arglist2;
7264       tree outer;
7265
7266       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7267
7268       /* Consider an example where a template template parameter declared as
7269
7270            template <class T, class U = std::allocator<T> > class TT
7271
7272          The template parameter level of T and U are one level larger than
7273          of TT.  To proper process the default argument of U, say when an
7274          instantiation `TT<int>' is seen, we need to build the full
7275          arguments containing {int} as the innermost level.  Outer levels,
7276          available when not appearing as default template argument, can be
7277          obtained from the arguments of the enclosing template.
7278
7279          Suppose that TT is later substituted with std::vector.  The above
7280          instantiation is `TT<int, std::allocator<T> >' with TT at
7281          level 1, and T at level 2, while the template arguments at level 1
7282          becomes {std::vector} and the inner level 2 is {int}.  */
7283
7284       outer = DECL_CONTEXT (templ);
7285       if (outer)
7286         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7287       else if (current_template_parms)
7288         /* This is an argument of the current template, so we haven't set
7289            DECL_CONTEXT yet.  */
7290         outer = current_template_args ();
7291
7292       if (outer)
7293         arglist = add_to_template_args (outer, arglist);
7294
7295       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7296                                         complain,
7297                                         /*require_all_args=*/true,
7298                                         /*use_default_args=*/true);
7299       if (arglist2 == error_mark_node
7300           || (!uses_template_parms (arglist2)
7301               && check_instantiated_args (templ, arglist2, complain)))
7302         return error_mark_node;
7303
7304       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7305       return parm;
7306     }
7307   else
7308     {
7309       tree template_type = TREE_TYPE (templ);
7310       tree gen_tmpl;
7311       tree type_decl;
7312       tree found = NULL_TREE;
7313       int arg_depth;
7314       int parm_depth;
7315       int is_dependent_type;
7316       int use_partial_inst_tmpl = false;
7317
7318       if (template_type == error_mark_node)
7319         /* An error occured while building the template TEMPL, and a
7320            diagnostic has most certainly been emitted for that
7321            already.  Let's propagate that error.  */
7322         return error_mark_node;
7323
7324       gen_tmpl = most_general_template (templ);
7325       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7326       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7327       arg_depth = TMPL_ARGS_DEPTH (arglist);
7328
7329       if (arg_depth == 1 && parm_depth > 1)
7330         {
7331           /* We've been given an incomplete set of template arguments.
7332              For example, given:
7333
7334                template <class T> struct S1 {
7335                  template <class U> struct S2 {};
7336                  template <class U> struct S2<U*> {};
7337                 };
7338
7339              we will be called with an ARGLIST of `U*', but the
7340              TEMPLATE will be `template <class T> template
7341              <class U> struct S1<T>::S2'.  We must fill in the missing
7342              arguments.  */
7343           arglist
7344             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7345                                            arglist);
7346           arg_depth = TMPL_ARGS_DEPTH (arglist);
7347         }
7348
7349       /* Now we should have enough arguments.  */
7350       gcc_assert (parm_depth == arg_depth);
7351
7352       /* From here on, we're only interested in the most general
7353          template.  */
7354
7355       /* Calculate the BOUND_ARGS.  These will be the args that are
7356          actually tsubst'd into the definition to create the
7357          instantiation.  */
7358       if (parm_depth > 1)
7359         {
7360           /* We have multiple levels of arguments to coerce, at once.  */
7361           int i;
7362           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7363
7364           tree bound_args = make_tree_vec (parm_depth);
7365
7366           for (i = saved_depth,
7367                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7368                i > 0 && t != NULL_TREE;
7369                --i, t = TREE_CHAIN (t))
7370             {
7371               tree a;
7372               if (i == saved_depth)
7373                 a = coerce_template_parms (TREE_VALUE (t),
7374                                            arglist, gen_tmpl,
7375                                            complain,
7376                                            /*require_all_args=*/true,
7377                                            /*use_default_args=*/true);
7378               else
7379                 /* Outer levels should have already been coerced.  */
7380                 a = TMPL_ARGS_LEVEL (arglist, i);
7381
7382               /* Don't process further if one of the levels fails.  */
7383               if (a == error_mark_node)
7384                 {
7385                   /* Restore the ARGLIST to its full size.  */
7386                   TREE_VEC_LENGTH (arglist) = saved_depth;
7387                   return error_mark_node;
7388                 }
7389
7390               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7391
7392               /* We temporarily reduce the length of the ARGLIST so
7393                  that coerce_template_parms will see only the arguments
7394                  corresponding to the template parameters it is
7395                  examining.  */
7396               TREE_VEC_LENGTH (arglist)--;
7397             }
7398
7399           /* Restore the ARGLIST to its full size.  */
7400           TREE_VEC_LENGTH (arglist) = saved_depth;
7401
7402           arglist = bound_args;
7403         }
7404       else
7405         arglist
7406           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7407                                    INNERMOST_TEMPLATE_ARGS (arglist),
7408                                    gen_tmpl,
7409                                    complain,
7410                                    /*require_all_args=*/true,
7411                                    /*use_default_args=*/true);
7412
7413       if (arglist == error_mark_node)
7414         /* We were unable to bind the arguments.  */
7415         return error_mark_node;
7416
7417       /* In the scope of a template class, explicit references to the
7418          template class refer to the type of the template, not any
7419          instantiation of it.  For example, in:
7420
7421            template <class T> class C { void f(C<T>); }
7422
7423          the `C<T>' is just the same as `C'.  Outside of the
7424          class, however, such a reference is an instantiation.  */
7425       if ((entering_scope
7426            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7427            || currently_open_class (template_type))
7428           /* comp_template_args is expensive, check it last.  */
7429           && comp_template_args (TYPE_TI_ARGS (template_type),
7430                                  arglist))
7431         return template_type;
7432
7433       /* If we already have this specialization, return it.  */
7434       elt.tmpl = gen_tmpl;
7435       elt.args = arglist;
7436       hash = hash_specialization (&elt);
7437       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7438                                                   &elt, hash);
7439
7440       if (entry)
7441         return entry->spec;
7442
7443       is_dependent_type = uses_template_parms (arglist);
7444
7445       /* If the deduced arguments are invalid, then the binding
7446          failed.  */
7447       if (!is_dependent_type
7448           && check_instantiated_args (gen_tmpl,
7449                                       INNERMOST_TEMPLATE_ARGS (arglist),
7450                                       complain))
7451         return error_mark_node;
7452
7453       if (!is_dependent_type
7454           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7455           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7456           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7457         {
7458           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7459                                       DECL_NAME (gen_tmpl),
7460                                       /*tag_scope=*/ts_global);
7461           return found;
7462         }
7463
7464       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7465                         complain, in_decl);
7466       if (!context)
7467         context = global_namespace;
7468
7469       /* Create the type.  */
7470       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7471         {
7472           if (!is_dependent_type)
7473             {
7474               set_current_access_from_decl (TYPE_NAME (template_type));
7475               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7476                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7477                                       arglist, complain, in_decl),
7478                               SCOPED_ENUM_P (template_type), NULL);
7479             }
7480           else
7481             {
7482               /* We don't want to call start_enum for this type, since
7483                  the values for the enumeration constants may involve
7484                  template parameters.  And, no one should be interested
7485                  in the enumeration constants for such a type.  */
7486               t = cxx_make_type (ENUMERAL_TYPE);
7487               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7488             }
7489           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7490           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7491             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7492         }
7493       else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7494         {
7495           /* The user referred to a specialization of an alias
7496             template represented by GEN_TMPL.
7497
7498             [temp.alias]/2 says:
7499
7500                 When a template-id refers to the specialization of an
7501                 alias template, it is equivalent to the associated
7502                 type obtained by substitution of its
7503                 template-arguments for the template-parameters in the
7504                 type-id of the alias template.  */
7505
7506           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7507           /* Note that the call above (by indirectly calling
7508              register_specialization in tsubst_decl) registers the
7509              TYPE_DECL representing the specialization of the alias
7510              template.  So next time someone substitutes ARGLIST for
7511              the template parms into the alias template (GEN_TMPL),
7512              she'll get that TYPE_DECL back.  */
7513
7514           if (t == error_mark_node)
7515             return t;
7516         }
7517       else if (CLASS_TYPE_P (template_type))
7518         {
7519           t = make_class_type (TREE_CODE (template_type));
7520           CLASSTYPE_DECLARED_CLASS (t)
7521             = CLASSTYPE_DECLARED_CLASS (template_type);
7522           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7523           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7524
7525           /* A local class.  Make sure the decl gets registered properly.  */
7526           if (context == current_function_decl)
7527             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7528
7529           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7530             /* This instantiation is another name for the primary
7531                template type. Set the TYPE_CANONICAL field
7532                appropriately. */
7533             TYPE_CANONICAL (t) = template_type;
7534           else if (any_template_arguments_need_structural_equality_p (arglist))
7535             /* Some of the template arguments require structural
7536                equality testing, so this template class requires
7537                structural equality testing. */
7538             SET_TYPE_STRUCTURAL_EQUALITY (t);
7539         }
7540       else
7541         gcc_unreachable ();
7542
7543       /* If we called start_enum or pushtag above, this information
7544          will already be set up.  */
7545       if (!TYPE_NAME (t))
7546         {
7547           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7548
7549           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7550           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7551           DECL_SOURCE_LOCATION (type_decl)
7552             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7553         }
7554       else
7555         type_decl = TYPE_NAME (t);
7556
7557       if (CLASS_TYPE_P (template_type))
7558         {
7559           TREE_PRIVATE (type_decl)
7560             = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7561           TREE_PROTECTED (type_decl)
7562             = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7563           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7564             {
7565               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7566               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7567             }
7568         }
7569
7570       /* Let's consider the explicit specialization of a member
7571          of a class template specialization that is implicitely instantiated,
7572          e.g.:
7573              template<class T>
7574              struct S
7575              {
7576                template<class U> struct M {}; //#0
7577              };
7578
7579              template<>
7580              template<>
7581              struct S<int>::M<char> //#1
7582              {
7583                int i;
7584              };
7585         [temp.expl.spec]/4 says this is valid.
7586
7587         In this case, when we write:
7588         S<int>::M<char> m;
7589
7590         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7591         the one of #0.
7592
7593         When we encounter #1, we want to store the partial instantiation
7594         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7595
7596         For all cases other than this "explicit specialization of member of a
7597         class template", we just want to store the most general template into
7598         the CLASSTYPE_TI_TEMPLATE of M.
7599
7600         This case of "explicit specialization of member of a class template"
7601         only happens when:
7602         1/ the enclosing class is an instantiation of, and therefore not
7603         the same as, the context of the most general template, and
7604         2/ we aren't looking at the partial instantiation itself, i.e.
7605         the innermost arguments are not the same as the innermost parms of
7606         the most general template.
7607
7608         So it's only when 1/ and 2/ happens that we want to use the partial
7609         instantiation of the member template in lieu of its most general
7610         template.  */
7611
7612       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7613           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7614           /* the enclosing class must be an instantiation...  */
7615           && CLASS_TYPE_P (context)
7616           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7617         {
7618           tree partial_inst_args;
7619           TREE_VEC_LENGTH (arglist)--;
7620           ++processing_template_decl;
7621           partial_inst_args =
7622             tsubst (INNERMOST_TEMPLATE_ARGS
7623                         (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7624                     arglist, complain, NULL_TREE);
7625           --processing_template_decl;
7626           TREE_VEC_LENGTH (arglist)++;
7627           use_partial_inst_tmpl =
7628             /*...and we must not be looking at the partial instantiation
7629              itself. */
7630             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7631                                  partial_inst_args);
7632         }
7633
7634       if (!use_partial_inst_tmpl)
7635         /* This case is easy; there are no member templates involved.  */
7636         found = gen_tmpl;
7637       else
7638         {
7639           /* This is a full instantiation of a member template.  Find
7640              the partial instantiation of which this is an instance.  */
7641
7642           /* Temporarily reduce by one the number of levels in the ARGLIST
7643              so as to avoid comparing the last set of arguments.  */
7644           TREE_VEC_LENGTH (arglist)--;
7645           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7646           TREE_VEC_LENGTH (arglist)++;
7647           /* FOUND is either a proper class type, or an alias
7648              template specialization.  In the later case, it's a
7649              TYPE_DECL, resulting from the substituting of arguments
7650              for parameters in the TYPE_DECL of the alias template
7651              done earlier.  So be careful while getting the template
7652              of FOUND.  */
7653           found = TREE_CODE (found) == TYPE_DECL
7654             ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7655             : CLASSTYPE_TI_TEMPLATE (found);
7656         }
7657
7658       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7659
7660       elt.spec = t;
7661       slot = htab_find_slot_with_hash (type_specializations,
7662                                        &elt, hash, INSERT);
7663       entry = ggc_alloc_spec_entry ();
7664       *entry = elt;
7665       *slot = entry;
7666
7667       /* Note this use of the partial instantiation so we can check it
7668          later in maybe_process_partial_specialization.  */
7669       DECL_TEMPLATE_INSTANTIATIONS (templ)
7670         = tree_cons (arglist, t,
7671                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7672
7673       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7674         /* Now that the type has been registered on the instantiations
7675            list, we set up the enumerators.  Because the enumeration
7676            constants may involve the enumeration type itself, we make
7677            sure to register the type first, and then create the
7678            constants.  That way, doing tsubst_expr for the enumeration
7679            constants won't result in recursive calls here; we'll find
7680            the instantiation and exit above.  */
7681         tsubst_enum (template_type, t, arglist);
7682
7683       if (CLASS_TYPE_P (template_type) && is_dependent_type)
7684         /* If the type makes use of template parameters, the
7685            code that generates debugging information will crash.  */
7686         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7687
7688       /* Possibly limit visibility based on template args.  */
7689       TREE_PUBLIC (type_decl) = 1;
7690       determine_visibility (type_decl);
7691
7692       return t;
7693     }
7694 }
7695
7696 /* Wrapper for lookup_template_class_1.  */
7697
7698 tree
7699 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7700                        int entering_scope, tsubst_flags_t complain)
7701 {
7702   tree ret;
7703   timevar_push (TV_TEMPLATE_INST);
7704   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7705                                  entering_scope, complain);
7706   timevar_pop (TV_TEMPLATE_INST);
7707   return ret;
7708 }
7709 \f
7710 struct pair_fn_data
7711 {
7712   tree_fn_t fn;
7713   void *data;
7714   /* True when we should also visit template parameters that occur in
7715      non-deduced contexts.  */
7716   bool include_nondeduced_p;
7717   struct pointer_set_t *visited;
7718 };
7719
7720 /* Called from for_each_template_parm via walk_tree.  */
7721
7722 static tree
7723 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7724 {
7725   tree t = *tp;
7726   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7727   tree_fn_t fn = pfd->fn;
7728   void *data = pfd->data;
7729
7730   if (TYPE_P (t)
7731       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7732       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7733                                  pfd->include_nondeduced_p))
7734     return error_mark_node;
7735
7736   switch (TREE_CODE (t))
7737     {
7738     case RECORD_TYPE:
7739       if (TYPE_PTRMEMFUNC_P (t))
7740         break;
7741       /* Fall through.  */
7742
7743     case UNION_TYPE:
7744     case ENUMERAL_TYPE:
7745       if (!TYPE_TEMPLATE_INFO (t))
7746         *walk_subtrees = 0;
7747       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7748                                        fn, data, pfd->visited, 
7749                                        pfd->include_nondeduced_p))
7750         return error_mark_node;
7751       break;
7752
7753     case INTEGER_TYPE:
7754       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7755                                   fn, data, pfd->visited, 
7756                                   pfd->include_nondeduced_p)
7757           || for_each_template_parm (TYPE_MAX_VALUE (t),
7758                                      fn, data, pfd->visited,
7759                                      pfd->include_nondeduced_p))
7760         return error_mark_node;
7761       break;
7762
7763     case METHOD_TYPE:
7764       /* Since we're not going to walk subtrees, we have to do this
7765          explicitly here.  */
7766       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7767                                   pfd->visited, pfd->include_nondeduced_p))
7768         return error_mark_node;
7769       /* Fall through.  */
7770
7771     case FUNCTION_TYPE:
7772       /* Check the return type.  */
7773       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7774                                   pfd->include_nondeduced_p))
7775         return error_mark_node;
7776
7777       /* Check the parameter types.  Since default arguments are not
7778          instantiated until they are needed, the TYPE_ARG_TYPES may
7779          contain expressions that involve template parameters.  But,
7780          no-one should be looking at them yet.  And, once they're
7781          instantiated, they don't contain template parameters, so
7782          there's no point in looking at them then, either.  */
7783       {
7784         tree parm;
7785
7786         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7787           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7788                                       pfd->visited, pfd->include_nondeduced_p))
7789             return error_mark_node;
7790
7791         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7792            want walk_tree walking into them itself.  */
7793         *walk_subtrees = 0;
7794       }
7795       break;
7796
7797     case TYPEOF_TYPE:
7798     case UNDERLYING_TYPE:
7799       if (pfd->include_nondeduced_p
7800           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7801                                      pfd->visited, 
7802                                      pfd->include_nondeduced_p))
7803         return error_mark_node;
7804       break;
7805
7806     case FUNCTION_DECL:
7807     case VAR_DECL:
7808       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7809           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7810                                      pfd->visited, pfd->include_nondeduced_p))
7811         return error_mark_node;
7812       /* Fall through.  */
7813
7814     case PARM_DECL:
7815     case CONST_DECL:
7816       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7817           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7818                                      pfd->visited, pfd->include_nondeduced_p))
7819         return error_mark_node;
7820       if (DECL_CONTEXT (t)
7821           && pfd->include_nondeduced_p
7822           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7823                                      pfd->visited, pfd->include_nondeduced_p))
7824         return error_mark_node;
7825       break;
7826
7827     case BOUND_TEMPLATE_TEMPLATE_PARM:
7828       /* Record template parameters such as `T' inside `TT<T>'.  */
7829       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7830                                   pfd->include_nondeduced_p))
7831         return error_mark_node;
7832       /* Fall through.  */
7833
7834     case TEMPLATE_TEMPLATE_PARM:
7835     case TEMPLATE_TYPE_PARM:
7836     case TEMPLATE_PARM_INDEX:
7837       if (fn && (*fn)(t, data))
7838         return error_mark_node;
7839       else if (!fn)
7840         return error_mark_node;
7841       break;
7842
7843     case TEMPLATE_DECL:
7844       /* A template template parameter is encountered.  */
7845       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7846           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7847                                      pfd->include_nondeduced_p))
7848         return error_mark_node;
7849
7850       /* Already substituted template template parameter */
7851       *walk_subtrees = 0;
7852       break;
7853
7854     case TYPENAME_TYPE:
7855       if (!fn
7856           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7857                                      data, pfd->visited, 
7858                                      pfd->include_nondeduced_p))
7859         return error_mark_node;
7860       break;
7861
7862     case CONSTRUCTOR:
7863       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7864           && pfd->include_nondeduced_p
7865           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7866                                      (TREE_TYPE (t)), fn, data,
7867                                      pfd->visited, pfd->include_nondeduced_p))
7868         return error_mark_node;
7869       break;
7870
7871     case INDIRECT_REF:
7872     case COMPONENT_REF:
7873       /* If there's no type, then this thing must be some expression
7874          involving template parameters.  */
7875       if (!fn && !TREE_TYPE (t))
7876         return error_mark_node;
7877       break;
7878
7879     case MODOP_EXPR:
7880     case CAST_EXPR:
7881     case IMPLICIT_CONV_EXPR:
7882     case REINTERPRET_CAST_EXPR:
7883     case CONST_CAST_EXPR:
7884     case STATIC_CAST_EXPR:
7885     case DYNAMIC_CAST_EXPR:
7886     case ARROW_EXPR:
7887     case DOTSTAR_EXPR:
7888     case TYPEID_EXPR:
7889     case PSEUDO_DTOR_EXPR:
7890       if (!fn)
7891         return error_mark_node;
7892       break;
7893
7894     default:
7895       break;
7896     }
7897
7898   /* We didn't find any template parameters we liked.  */
7899   return NULL_TREE;
7900 }
7901
7902 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7903    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7904    call FN with the parameter and the DATA.
7905    If FN returns nonzero, the iteration is terminated, and
7906    for_each_template_parm returns 1.  Otherwise, the iteration
7907    continues.  If FN never returns a nonzero value, the value
7908    returned by for_each_template_parm is 0.  If FN is NULL, it is
7909    considered to be the function which always returns 1.
7910
7911    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7912    parameters that occur in non-deduced contexts.  When false, only
7913    visits those template parameters that can be deduced.  */
7914
7915 static int
7916 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7917                         struct pointer_set_t *visited,
7918                         bool include_nondeduced_p)
7919 {
7920   struct pair_fn_data pfd;
7921   int result;
7922
7923   /* Set up.  */
7924   pfd.fn = fn;
7925   pfd.data = data;
7926   pfd.include_nondeduced_p = include_nondeduced_p;
7927
7928   /* Walk the tree.  (Conceptually, we would like to walk without
7929      duplicates, but for_each_template_parm_r recursively calls
7930      for_each_template_parm, so we would need to reorganize a fair
7931      bit to use walk_tree_without_duplicates, so we keep our own
7932      visited list.)  */
7933   if (visited)
7934     pfd.visited = visited;
7935   else
7936     pfd.visited = pointer_set_create ();
7937   result = cp_walk_tree (&t,
7938                          for_each_template_parm_r,
7939                          &pfd,
7940                          pfd.visited) != NULL_TREE;
7941
7942   /* Clean up.  */
7943   if (!visited)
7944     {
7945       pointer_set_destroy (pfd.visited);
7946       pfd.visited = 0;
7947     }
7948
7949   return result;
7950 }
7951
7952 /* Returns true if T depends on any template parameter.  */
7953
7954 int
7955 uses_template_parms (tree t)
7956 {
7957   bool dependent_p;
7958   int saved_processing_template_decl;
7959
7960   saved_processing_template_decl = processing_template_decl;
7961   if (!saved_processing_template_decl)
7962     processing_template_decl = 1;
7963   if (TYPE_P (t))
7964     dependent_p = dependent_type_p (t);
7965   else if (TREE_CODE (t) == TREE_VEC)
7966     dependent_p = any_dependent_template_arguments_p (t);
7967   else if (TREE_CODE (t) == TREE_LIST)
7968     dependent_p = (uses_template_parms (TREE_VALUE (t))
7969                    || uses_template_parms (TREE_CHAIN (t)));
7970   else if (TREE_CODE (t) == TYPE_DECL)
7971     dependent_p = dependent_type_p (TREE_TYPE (t));
7972   else if (DECL_P (t)
7973            || EXPR_P (t)
7974            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7975            || TREE_CODE (t) == OVERLOAD
7976            || BASELINK_P (t)
7977            || TREE_CODE (t) == IDENTIFIER_NODE
7978            || TREE_CODE (t) == TRAIT_EXPR
7979            || TREE_CODE (t) == CONSTRUCTOR
7980            || CONSTANT_CLASS_P (t))
7981     dependent_p = (type_dependent_expression_p (t)
7982                    || value_dependent_expression_p (t));
7983   else
7984     {
7985       gcc_assert (t == error_mark_node);
7986       dependent_p = false;
7987     }
7988
7989   processing_template_decl = saved_processing_template_decl;
7990
7991   return dependent_p;
7992 }
7993
7994 /* Returns true if T depends on any template parameter with level LEVEL.  */
7995
7996 int
7997 uses_template_parms_level (tree t, int level)
7998 {
7999   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8000                                  /*include_nondeduced_p=*/true);
8001 }
8002
8003 /* Returns TRUE iff INST is an instantiation we don't need to do in an
8004    ill-formed translation unit, i.e. a variable or function that isn't
8005    usable in a constant expression.  */
8006
8007 static inline bool
8008 neglectable_inst_p (tree d)
8009 {
8010   return (DECL_P (d)
8011           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8012                : decl_maybe_constant_var_p (d)));
8013 }
8014
8015 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8016    neglectable and instantiated from within an erroneous instantiation.  */
8017
8018 static bool
8019 limit_bad_template_recursion (tree decl)
8020 {
8021   struct tinst_level *lev = current_tinst_level;
8022   int errs = errorcount + sorrycount;
8023   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8024     return false;
8025
8026   for (; lev; lev = lev->next)
8027     if (neglectable_inst_p (lev->decl))
8028       break;
8029
8030   return (lev && errs > lev->errors);
8031 }
8032
8033 static int tinst_depth;
8034 extern int max_tinst_depth;
8035 #ifdef GATHER_STATISTICS
8036 int depth_reached;
8037 #endif
8038 static GTY(()) struct tinst_level *last_error_tinst_level;
8039
8040 /* We're starting to instantiate D; record the template instantiation context
8041    for diagnostics and to restore it later.  */
8042
8043 int
8044 push_tinst_level (tree d)
8045 {
8046   struct tinst_level *new_level;
8047
8048   if (tinst_depth >= max_tinst_depth)
8049     {
8050       last_error_tinst_level = current_tinst_level;
8051       if (TREE_CODE (d) == TREE_LIST)
8052         error ("template instantiation depth exceeds maximum of %d (use "
8053                "-ftemplate-depth= to increase the maximum) substituting %qS",
8054                max_tinst_depth, d);
8055       else
8056         error ("template instantiation depth exceeds maximum of %d (use "
8057                "-ftemplate-depth= to increase the maximum) instantiating %qD",
8058                max_tinst_depth, d);
8059
8060       print_instantiation_context ();
8061
8062       return 0;
8063     }
8064
8065   /* If the current instantiation caused problems, don't let it instantiate
8066      anything else.  Do allow deduction substitution and decls usable in
8067      constant expressions.  */
8068   if (limit_bad_template_recursion (d))
8069     return 0;
8070
8071   new_level = ggc_alloc_tinst_level ();
8072   new_level->decl = d;
8073   new_level->locus = input_location;
8074   new_level->errors = errorcount+sorrycount;
8075   new_level->in_system_header_p = in_system_header;
8076   new_level->next = current_tinst_level;
8077   current_tinst_level = new_level;
8078
8079   ++tinst_depth;
8080 #ifdef GATHER_STATISTICS
8081   if (tinst_depth > depth_reached)
8082     depth_reached = tinst_depth;
8083 #endif
8084
8085   return 1;
8086 }
8087
8088 /* We're done instantiating this template; return to the instantiation
8089    context.  */
8090
8091 void
8092 pop_tinst_level (void)
8093 {
8094   /* Restore the filename and line number stashed away when we started
8095      this instantiation.  */
8096   input_location = current_tinst_level->locus;
8097   current_tinst_level = current_tinst_level->next;
8098   --tinst_depth;
8099 }
8100
8101 /* We're instantiating a deferred template; restore the template
8102    instantiation context in which the instantiation was requested, which
8103    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8104
8105 static tree
8106 reopen_tinst_level (struct tinst_level *level)
8107 {
8108   struct tinst_level *t;
8109
8110   tinst_depth = 0;
8111   for (t = level; t; t = t->next)
8112     ++tinst_depth;
8113
8114   current_tinst_level = level;
8115   pop_tinst_level ();
8116   if (current_tinst_level)
8117     current_tinst_level->errors = errorcount+sorrycount;
8118   return level->decl;
8119 }
8120
8121 /* Returns the TINST_LEVEL which gives the original instantiation
8122    context.  */
8123
8124 struct tinst_level *
8125 outermost_tinst_level (void)
8126 {
8127   struct tinst_level *level = current_tinst_level;
8128   if (level)
8129     while (level->next)
8130       level = level->next;
8131   return level;
8132 }
8133
8134 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
8135
8136 bool
8137 parameter_of_template_p (tree parm, tree templ)
8138 {
8139   tree parms;
8140   int i;
8141
8142   if (!parm || !templ)
8143     return false;
8144
8145   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
8146   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8147
8148   parms = DECL_TEMPLATE_PARMS (templ);
8149   parms = INNERMOST_TEMPLATE_PARMS (parms);
8150
8151   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
8152     {
8153       tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
8154       if (parm == p
8155           || (DECL_INITIAL (parm)
8156               && DECL_INITIAL (parm) == DECL_INITIAL (p)))
8157         return true;
8158     }
8159
8160   return false;
8161 }
8162
8163 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8164    vector of template arguments, as for tsubst.
8165
8166    Returns an appropriate tsubst'd friend declaration.  */
8167
8168 static tree
8169 tsubst_friend_function (tree decl, tree args)
8170 {
8171   tree new_friend;
8172
8173   if (TREE_CODE (decl) == FUNCTION_DECL
8174       && DECL_TEMPLATE_INSTANTIATION (decl)
8175       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8176     /* This was a friend declared with an explicit template
8177        argument list, e.g.:
8178
8179        friend void f<>(T);
8180
8181        to indicate that f was a template instantiation, not a new
8182        function declaration.  Now, we have to figure out what
8183        instantiation of what template.  */
8184     {
8185       tree template_id, arglist, fns;
8186       tree new_args;
8187       tree tmpl;
8188       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8189
8190       /* Friend functions are looked up in the containing namespace scope.
8191          We must enter that scope, to avoid finding member functions of the
8192          current class with same name.  */
8193       push_nested_namespace (ns);
8194       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8195                          tf_warning_or_error, NULL_TREE,
8196                          /*integral_constant_expression_p=*/false);
8197       pop_nested_namespace (ns);
8198       arglist = tsubst (DECL_TI_ARGS (decl), args,
8199                         tf_warning_or_error, NULL_TREE);
8200       template_id = lookup_template_function (fns, arglist);
8201
8202       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8203       tmpl = determine_specialization (template_id, new_friend,
8204                                        &new_args,
8205                                        /*need_member_template=*/0,
8206                                        TREE_VEC_LENGTH (args),
8207                                        tsk_none);
8208       return instantiate_template (tmpl, new_args, tf_error);
8209     }
8210
8211   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8212
8213   /* The NEW_FRIEND will look like an instantiation, to the
8214      compiler, but is not an instantiation from the point of view of
8215      the language.  For example, we might have had:
8216
8217      template <class T> struct S {
8218        template <class U> friend void f(T, U);
8219      };
8220
8221      Then, in S<int>, template <class U> void f(int, U) is not an
8222      instantiation of anything.  */
8223   if (new_friend == error_mark_node)
8224     return error_mark_node;
8225
8226   DECL_USE_TEMPLATE (new_friend) = 0;
8227   if (TREE_CODE (decl) == TEMPLATE_DECL)
8228     {
8229       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8230       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8231         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8232     }
8233
8234   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8235      is not a template instantiation and should not be mangled like
8236      one.  Therefore, we forget the mangling here; we'll recompute it
8237      later if we need it.  */
8238   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8239     {
8240       SET_DECL_RTL (new_friend, NULL);
8241       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8242     }
8243
8244   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8245     {
8246       tree old_decl;
8247       tree new_friend_template_info;
8248       tree new_friend_result_template_info;
8249       tree ns;
8250       int  new_friend_is_defn;
8251
8252       /* We must save some information from NEW_FRIEND before calling
8253          duplicate decls since that function will free NEW_FRIEND if
8254          possible.  */
8255       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8256       new_friend_is_defn =
8257             (DECL_INITIAL (DECL_TEMPLATE_RESULT
8258                            (template_for_substitution (new_friend)))
8259              != NULL_TREE);
8260       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8261         {
8262           /* This declaration is a `primary' template.  */
8263           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8264
8265           new_friend_result_template_info
8266             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8267         }
8268       else
8269         new_friend_result_template_info = NULL_TREE;
8270
8271       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8272       if (new_friend_is_defn)
8273         DECL_INITIAL (new_friend) = error_mark_node;
8274
8275       /* Inside pushdecl_namespace_level, we will push into the
8276          current namespace. However, the friend function should go
8277          into the namespace of the template.  */
8278       ns = decl_namespace_context (new_friend);
8279       push_nested_namespace (ns);
8280       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8281       pop_nested_namespace (ns);
8282
8283       if (old_decl == error_mark_node)
8284         return error_mark_node;
8285
8286       if (old_decl != new_friend)
8287         {
8288           /* This new friend declaration matched an existing
8289              declaration.  For example, given:
8290
8291                template <class T> void f(T);
8292                template <class U> class C {
8293                  template <class T> friend void f(T) {}
8294                };
8295
8296              the friend declaration actually provides the definition
8297              of `f', once C has been instantiated for some type.  So,
8298              old_decl will be the out-of-class template declaration,
8299              while new_friend is the in-class definition.
8300
8301              But, if `f' was called before this point, the
8302              instantiation of `f' will have DECL_TI_ARGS corresponding
8303              to `T' but not to `U', references to which might appear
8304              in the definition of `f'.  Previously, the most general
8305              template for an instantiation of `f' was the out-of-class
8306              version; now it is the in-class version.  Therefore, we
8307              run through all specialization of `f', adding to their
8308              DECL_TI_ARGS appropriately.  In particular, they need a
8309              new set of outer arguments, corresponding to the
8310              arguments for this class instantiation.
8311
8312              The same situation can arise with something like this:
8313
8314                friend void f(int);
8315                template <class T> class C {
8316                  friend void f(T) {}
8317                };
8318
8319              when `C<int>' is instantiated.  Now, `f(int)' is defined
8320              in the class.  */
8321
8322           if (!new_friend_is_defn)
8323             /* On the other hand, if the in-class declaration does
8324                *not* provide a definition, then we don't want to alter
8325                existing definitions.  We can just leave everything
8326                alone.  */
8327             ;
8328           else
8329             {
8330               tree new_template = TI_TEMPLATE (new_friend_template_info);
8331               tree new_args = TI_ARGS (new_friend_template_info);
8332
8333               /* Overwrite whatever template info was there before, if
8334                  any, with the new template information pertaining to
8335                  the declaration.  */
8336               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8337
8338               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8339                 {
8340                   /* We should have called reregister_specialization in
8341                      duplicate_decls.  */
8342                   gcc_assert (retrieve_specialization (new_template,
8343                                                        new_args, 0)
8344                               == old_decl);
8345
8346                   /* Instantiate it if the global has already been used.  */
8347                   if (DECL_ODR_USED (old_decl))
8348                     instantiate_decl (old_decl, /*defer_ok=*/true,
8349                                       /*expl_inst_class_mem_p=*/false);
8350                 }
8351               else
8352                 {
8353                   tree t;
8354
8355                   /* Indicate that the old function template is a partial
8356                      instantiation.  */
8357                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8358                     = new_friend_result_template_info;
8359
8360                   gcc_assert (new_template
8361                               == most_general_template (new_template));
8362                   gcc_assert (new_template != old_decl);
8363
8364                   /* Reassign any specializations already in the hash table
8365                      to the new more general template, and add the
8366                      additional template args.  */
8367                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8368                        t != NULL_TREE;
8369                        t = TREE_CHAIN (t))
8370                     {
8371                       tree spec = TREE_VALUE (t);
8372                       spec_entry elt;
8373
8374                       elt.tmpl = old_decl;
8375                       elt.args = DECL_TI_ARGS (spec);
8376                       elt.spec = NULL_TREE;
8377
8378                       htab_remove_elt (decl_specializations, &elt);
8379
8380                       DECL_TI_ARGS (spec)
8381                         = add_outermost_template_args (new_args,
8382                                                        DECL_TI_ARGS (spec));
8383
8384                       register_specialization
8385                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8386
8387                     }
8388                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8389                 }
8390             }
8391
8392           /* The information from NEW_FRIEND has been merged into OLD_DECL
8393              by duplicate_decls.  */
8394           new_friend = old_decl;
8395         }
8396     }
8397   else
8398     {
8399       tree context = DECL_CONTEXT (new_friend);
8400       bool dependent_p;
8401
8402       /* In the code
8403            template <class T> class C {
8404              template <class U> friend void C1<U>::f (); // case 1
8405              friend void C2<T>::f ();                    // case 2
8406            };
8407          we only need to make sure CONTEXT is a complete type for
8408          case 2.  To distinguish between the two cases, we note that
8409          CONTEXT of case 1 remains dependent type after tsubst while
8410          this isn't true for case 2.  */
8411       ++processing_template_decl;
8412       dependent_p = dependent_type_p (context);
8413       --processing_template_decl;
8414
8415       if (!dependent_p
8416           && !complete_type_or_else (context, NULL_TREE))
8417         return error_mark_node;
8418
8419       if (COMPLETE_TYPE_P (context))
8420         {
8421           /* Check to see that the declaration is really present, and,
8422              possibly obtain an improved declaration.  */
8423           tree fn = check_classfn (context,
8424                                    new_friend, NULL_TREE);
8425
8426           if (fn)
8427             new_friend = fn;
8428         }
8429     }
8430
8431   return new_friend;
8432 }
8433
8434 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8435    template arguments, as for tsubst.
8436
8437    Returns an appropriate tsubst'd friend type or error_mark_node on
8438    failure.  */
8439
8440 static tree
8441 tsubst_friend_class (tree friend_tmpl, tree args)
8442 {
8443   tree friend_type;
8444   tree tmpl;
8445   tree context;
8446
8447   context = CP_DECL_CONTEXT (friend_tmpl);
8448
8449   if (context != global_namespace)
8450     {
8451       if (TREE_CODE (context) == NAMESPACE_DECL)
8452         push_nested_namespace (context);
8453       else
8454         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8455     }
8456
8457   /* Look for a class template declaration.  We look for hidden names
8458      because two friend declarations of the same template are the
8459      same.  For example, in:
8460
8461        struct A { 
8462          template <typename> friend class F;
8463        };
8464        template <typename> struct B { 
8465          template <typename> friend class F;
8466        };
8467
8468      both F templates are the same.  */
8469   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8470                            /*block_p=*/true, 0, 
8471                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8472
8473   /* But, if we don't find one, it might be because we're in a
8474      situation like this:
8475
8476        template <class T>
8477        struct S {
8478          template <class U>
8479          friend struct S;
8480        };
8481
8482      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8483      for `S<int>', not the TEMPLATE_DECL.  */
8484   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8485     {
8486       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8487       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8488     }
8489
8490   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8491     {
8492       /* The friend template has already been declared.  Just
8493          check to see that the declarations match, and install any new
8494          default parameters.  We must tsubst the default parameters,
8495          of course.  We only need the innermost template parameters
8496          because that is all that redeclare_class_template will look
8497          at.  */
8498       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8499           > TMPL_ARGS_DEPTH (args))
8500         {
8501           tree parms;
8502           location_t saved_input_location;
8503           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8504                                          args, tf_warning_or_error);
8505
8506           saved_input_location = input_location;
8507           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8508           redeclare_class_template (TREE_TYPE (tmpl), parms);
8509           input_location = saved_input_location;
8510           
8511         }
8512
8513       friend_type = TREE_TYPE (tmpl);
8514     }
8515   else
8516     {
8517       /* The friend template has not already been declared.  In this
8518          case, the instantiation of the template class will cause the
8519          injection of this template into the global scope.  */
8520       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8521       if (tmpl == error_mark_node)
8522         return error_mark_node;
8523
8524       /* The new TMPL is not an instantiation of anything, so we
8525          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8526          the new type because that is supposed to be the corresponding
8527          template decl, i.e., TMPL.  */
8528       DECL_USE_TEMPLATE (tmpl) = 0;
8529       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8530       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8531       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8532         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8533
8534       /* Inject this template into the global scope.  */
8535       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8536     }
8537
8538   if (context != global_namespace)
8539     {
8540       if (TREE_CODE (context) == NAMESPACE_DECL)
8541         pop_nested_namespace (context);
8542       else
8543         pop_nested_class ();
8544     }
8545
8546   return friend_type;
8547 }
8548
8549 /* Returns zero if TYPE cannot be completed later due to circularity.
8550    Otherwise returns one.  */
8551
8552 static int
8553 can_complete_type_without_circularity (tree type)
8554 {
8555   if (type == NULL_TREE || type == error_mark_node)
8556     return 0;
8557   else if (COMPLETE_TYPE_P (type))
8558     return 1;
8559   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8560     return can_complete_type_without_circularity (TREE_TYPE (type));
8561   else if (CLASS_TYPE_P (type)
8562            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8563     return 0;
8564   else
8565     return 1;
8566 }
8567
8568 /* Apply any attributes which had to be deferred until instantiation
8569    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8570    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8571
8572 static void
8573 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8574                                 tree args, tsubst_flags_t complain, tree in_decl)
8575 {
8576   tree last_dep = NULL_TREE;
8577   tree t;
8578   tree *p;
8579
8580   for (t = attributes; t; t = TREE_CHAIN (t))
8581     if (ATTR_IS_DEPENDENT (t))
8582       {
8583         last_dep = t;
8584         attributes = copy_list (attributes);
8585         break;
8586       }
8587
8588   if (DECL_P (*decl_p))
8589     {
8590       if (TREE_TYPE (*decl_p) == error_mark_node)
8591         return;
8592       p = &DECL_ATTRIBUTES (*decl_p);
8593     }
8594   else
8595     p = &TYPE_ATTRIBUTES (*decl_p);
8596
8597   if (last_dep)
8598     {
8599       tree late_attrs = NULL_TREE;
8600       tree *q = &late_attrs;
8601
8602       for (*p = attributes; *p; )
8603         {
8604           t = *p;
8605           if (ATTR_IS_DEPENDENT (t))
8606             {
8607               *p = TREE_CHAIN (t);
8608               TREE_CHAIN (t) = NULL_TREE;
8609               /* If the first attribute argument is an identifier, don't
8610                  pass it through tsubst.  Attributes like mode, format,
8611                  cleanup and several target specific attributes expect it
8612                  unmodified.  */
8613               if (TREE_VALUE (t)
8614                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8615                   && TREE_VALUE (TREE_VALUE (t))
8616                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8617                       == IDENTIFIER_NODE))
8618                 {
8619                   tree chain
8620                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8621                                    in_decl,
8622                                    /*integral_constant_expression_p=*/false);
8623                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8624                     TREE_VALUE (t)
8625                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8626                                    chain);
8627                 }
8628               else
8629                 TREE_VALUE (t)
8630                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8631                                  /*integral_constant_expression_p=*/false);
8632               *q = t;
8633               q = &TREE_CHAIN (t);
8634             }
8635           else
8636             p = &TREE_CHAIN (t);
8637         }
8638
8639       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8640     }
8641 }
8642
8643 /* Perform (or defer) access check for typedefs that were referenced
8644    from within the template TMPL code.
8645    This is a subroutine of instantiate_template and instantiate_class_template.
8646    TMPL is the template to consider and TARGS is the list of arguments of
8647    that template.  */
8648
8649 static void
8650 perform_typedefs_access_check (tree tmpl, tree targs)
8651 {
8652   location_t saved_location;
8653   int i;
8654   qualified_typedef_usage_t *iter;
8655
8656   if (!tmpl
8657       || (!CLASS_TYPE_P (tmpl)
8658           && TREE_CODE (tmpl) != FUNCTION_DECL))
8659     return;
8660
8661   saved_location = input_location;
8662   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8663                     get_types_needing_access_check (tmpl),
8664                     i, iter)
8665     {
8666       tree type_decl = iter->typedef_decl;
8667       tree type_scope = iter->context;
8668
8669       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8670         continue;
8671
8672       if (uses_template_parms (type_decl))
8673         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8674       if (uses_template_parms (type_scope))
8675         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8676
8677       /* Make access check error messages point to the location
8678          of the use of the typedef.  */
8679       input_location = iter->locus;
8680       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8681                                      type_decl, type_decl);
8682     }
8683     input_location = saved_location;
8684 }
8685
8686 static tree
8687 instantiate_class_template_1 (tree type)
8688 {
8689   tree templ, args, pattern, t, member;
8690   tree typedecl;
8691   tree pbinfo;
8692   tree base_list;
8693   unsigned int saved_maximum_field_alignment;
8694
8695   if (type == error_mark_node)
8696     return error_mark_node;
8697
8698   if (COMPLETE_OR_OPEN_TYPE_P (type)
8699       || uses_template_parms (type))
8700     return type;
8701
8702   /* Figure out which template is being instantiated.  */
8703   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8704   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8705
8706   /* Determine what specialization of the original template to
8707      instantiate.  */
8708   t = most_specialized_class (type, templ, tf_warning_or_error);
8709   if (t == error_mark_node)
8710     {
8711       TYPE_BEING_DEFINED (type) = 1;
8712       return error_mark_node;
8713     }
8714   else if (t)
8715     {
8716       /* This TYPE is actually an instantiation of a partial
8717          specialization.  We replace the innermost set of ARGS with
8718          the arguments appropriate for substitution.  For example,
8719          given:
8720
8721            template <class T> struct S {};
8722            template <class T> struct S<T*> {};
8723
8724          and supposing that we are instantiating S<int*>, ARGS will
8725          presently be {int*} -- but we need {int}.  */
8726       pattern = TREE_TYPE (t);
8727       args = TREE_PURPOSE (t);
8728     }
8729   else
8730     {
8731       pattern = TREE_TYPE (templ);
8732       args = CLASSTYPE_TI_ARGS (type);
8733     }
8734
8735   /* If the template we're instantiating is incomplete, then clearly
8736      there's nothing we can do.  */
8737   if (!COMPLETE_TYPE_P (pattern))
8738     return type;
8739
8740   /* If we've recursively instantiated too many templates, stop.  */
8741   if (! push_tinst_level (type))
8742     return type;
8743
8744   /* Now we're really doing the instantiation.  Mark the type as in
8745      the process of being defined.  */
8746   TYPE_BEING_DEFINED (type) = 1;
8747
8748   /* We may be in the middle of deferred access check.  Disable
8749      it now.  */
8750   push_deferring_access_checks (dk_no_deferred);
8751
8752   push_to_top_level ();
8753   /* Use #pragma pack from the template context.  */
8754   saved_maximum_field_alignment = maximum_field_alignment;
8755   maximum_field_alignment = TYPE_PRECISION (pattern);
8756
8757   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8758
8759   /* Set the input location to the most specialized template definition.
8760      This is needed if tsubsting causes an error.  */
8761   typedecl = TYPE_MAIN_DECL (pattern);
8762   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8763     DECL_SOURCE_LOCATION (typedecl);
8764
8765   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8766   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8767   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8768   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8769   if (ANON_AGGR_TYPE_P (pattern))
8770     SET_ANON_AGGR_TYPE_P (type);
8771   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8772     {
8773       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8774       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8775       /* Adjust visibility for template arguments.  */
8776       determine_visibility (TYPE_MAIN_DECL (type));
8777     }
8778   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8779
8780   pbinfo = TYPE_BINFO (pattern);
8781
8782   /* We should never instantiate a nested class before its enclosing
8783      class; we need to look up the nested class by name before we can
8784      instantiate it, and that lookup should instantiate the enclosing
8785      class.  */
8786   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8787               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8788
8789   base_list = NULL_TREE;
8790   if (BINFO_N_BASE_BINFOS (pbinfo))
8791     {
8792       tree pbase_binfo;
8793       tree pushed_scope;
8794       int i;
8795
8796       /* We must enter the scope containing the type, as that is where
8797          the accessibility of types named in dependent bases are
8798          looked up from.  */
8799       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8800
8801       /* Substitute into each of the bases to determine the actual
8802          basetypes.  */
8803       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8804         {
8805           tree base;
8806           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8807           tree expanded_bases = NULL_TREE;
8808           int idx, len = 1;
8809
8810           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8811             {
8812               expanded_bases = 
8813                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8814                                        args, tf_error, NULL_TREE);
8815               if (expanded_bases == error_mark_node)
8816                 continue;
8817
8818               len = TREE_VEC_LENGTH (expanded_bases);
8819             }
8820
8821           for (idx = 0; idx < len; idx++)
8822             {
8823               if (expanded_bases)
8824                 /* Extract the already-expanded base class.  */
8825                 base = TREE_VEC_ELT (expanded_bases, idx);
8826               else
8827                 /* Substitute to figure out the base class.  */
8828                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8829                                NULL_TREE);
8830
8831               if (base == error_mark_node)
8832                 continue;
8833
8834               base_list = tree_cons (access, base, base_list);
8835               if (BINFO_VIRTUAL_P (pbase_binfo))
8836                 TREE_TYPE (base_list) = integer_type_node;
8837             }
8838         }
8839
8840       /* The list is now in reverse order; correct that.  */
8841       base_list = nreverse (base_list);
8842
8843       if (pushed_scope)
8844         pop_scope (pushed_scope);
8845     }
8846   /* Now call xref_basetypes to set up all the base-class
8847      information.  */
8848   xref_basetypes (type, base_list);
8849
8850   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8851                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8852                                   args, tf_error, NULL_TREE);
8853   fixup_attribute_variants (type);
8854
8855   /* Now that our base classes are set up, enter the scope of the
8856      class, so that name lookups into base classes, etc. will work
8857      correctly.  This is precisely analogous to what we do in
8858      begin_class_definition when defining an ordinary non-template
8859      class, except we also need to push the enclosing classes.  */
8860   push_nested_class (type);
8861
8862   /* Now members are processed in the order of declaration.  */
8863   for (member = CLASSTYPE_DECL_LIST (pattern);
8864        member; member = TREE_CHAIN (member))
8865     {
8866       tree t = TREE_VALUE (member);
8867
8868       if (TREE_PURPOSE (member))
8869         {
8870           if (TYPE_P (t))
8871             {
8872               /* Build new CLASSTYPE_NESTED_UTDS.  */
8873
8874               tree newtag;
8875               bool class_template_p;
8876
8877               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8878                                   && TYPE_LANG_SPECIFIC (t)
8879                                   && CLASSTYPE_IS_TEMPLATE (t));
8880               /* If the member is a class template, then -- even after
8881                  substitution -- there may be dependent types in the
8882                  template argument list for the class.  We increment
8883                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8884                  that function will assume that no types are dependent
8885                  when outside of a template.  */
8886               if (class_template_p)
8887                 ++processing_template_decl;
8888               newtag = tsubst (t, args, tf_error, NULL_TREE);
8889               if (class_template_p)
8890                 --processing_template_decl;
8891               if (newtag == error_mark_node)
8892                 continue;
8893
8894               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8895                 {
8896                   tree name = TYPE_IDENTIFIER (t);
8897
8898                   if (class_template_p)
8899                     /* Unfortunately, lookup_template_class sets
8900                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8901                        instantiation (i.e., for the type of a member
8902                        template class nested within a template class.)
8903                        This behavior is required for
8904                        maybe_process_partial_specialization to work
8905                        correctly, but is not accurate in this case;
8906                        the TAG is not an instantiation of anything.
8907                        (The corresponding TEMPLATE_DECL is an
8908                        instantiation, but the TYPE is not.) */
8909                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8910
8911                   /* Now, we call pushtag to put this NEWTAG into the scope of
8912                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8913                      pushtag calling push_template_decl.  We don't have to do
8914                      this for enums because it will already have been done in
8915                      tsubst_enum.  */
8916                   if (name)
8917                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8918                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8919                 }
8920             }
8921           else if (TREE_CODE (t) == FUNCTION_DECL
8922                    || DECL_FUNCTION_TEMPLATE_P (t))
8923             {
8924               /* Build new TYPE_METHODS.  */
8925               tree r;
8926
8927               if (TREE_CODE (t) == TEMPLATE_DECL)
8928                 ++processing_template_decl;
8929               r = tsubst (t, args, tf_error, NULL_TREE);
8930               if (TREE_CODE (t) == TEMPLATE_DECL)
8931                 --processing_template_decl;
8932               set_current_access_from_decl (r);
8933               finish_member_declaration (r);
8934               /* Instantiate members marked with attribute used.  */
8935               if (r != error_mark_node && DECL_PRESERVE_P (r))
8936                 mark_used (r);
8937             }
8938           else
8939             {
8940               /* Build new TYPE_FIELDS.  */
8941               if (TREE_CODE (t) == STATIC_ASSERT)
8942                 {
8943                   tree condition = 
8944                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8945                                  tf_warning_or_error, NULL_TREE,
8946                                  /*integral_constant_expression_p=*/true);
8947                   finish_static_assert (condition,
8948                                         STATIC_ASSERT_MESSAGE (t), 
8949                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8950                                         /*member_p=*/true);
8951                 }
8952               else if (TREE_CODE (t) != CONST_DECL)
8953                 {
8954                   tree r;
8955
8956                   /* The file and line for this declaration, to
8957                      assist in error message reporting.  Since we
8958                      called push_tinst_level above, we don't need to
8959                      restore these.  */
8960                   input_location = DECL_SOURCE_LOCATION (t);
8961
8962                   if (TREE_CODE (t) == TEMPLATE_DECL)
8963                     ++processing_template_decl;
8964                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8965                   if (TREE_CODE (t) == TEMPLATE_DECL)
8966                     --processing_template_decl;
8967                   if (TREE_CODE (r) == VAR_DECL)
8968                     {
8969                       /* In [temp.inst]:
8970
8971                            [t]he initialization (and any associated
8972                            side-effects) of a static data member does
8973                            not occur unless the static data member is
8974                            itself used in a way that requires the
8975                            definition of the static data member to
8976                            exist.
8977
8978                          Therefore, we do not substitute into the
8979                          initialized for the static data member here.  */
8980                       finish_static_data_member_decl
8981                         (r,
8982                          /*init=*/NULL_TREE,
8983                          /*init_const_expr_p=*/false,
8984                          /*asmspec_tree=*/NULL_TREE,
8985                          /*flags=*/0);
8986                       /* Instantiate members marked with attribute used.  */
8987                       if (r != error_mark_node && DECL_PRESERVE_P (r))
8988                         mark_used (r);
8989                     }
8990                   else if (TREE_CODE (r) == FIELD_DECL)
8991                     {
8992                       /* Determine whether R has a valid type and can be
8993                          completed later.  If R is invalid, then it is
8994                          replaced by error_mark_node so that it will not be
8995                          added to TYPE_FIELDS.  */
8996                       tree rtype = TREE_TYPE (r);
8997                       if (can_complete_type_without_circularity (rtype))
8998                         complete_type (rtype);
8999
9000                       if (!COMPLETE_TYPE_P (rtype))
9001                         {
9002                           cxx_incomplete_type_error (r, rtype);
9003                           r = error_mark_node;
9004                         }
9005                     }
9006
9007                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9008                      such a thing will already have been added to the field
9009                      list by tsubst_enum in finish_member_declaration in the
9010                      CLASSTYPE_NESTED_UTDS case above.  */
9011                   if (!(TREE_CODE (r) == TYPE_DECL
9012                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9013                         && DECL_ARTIFICIAL (r)))
9014                     {
9015                       set_current_access_from_decl (r);
9016                       finish_member_declaration (r);
9017                     }
9018                 }
9019             }
9020         }
9021       else
9022         {
9023           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
9024             {
9025               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9026
9027               tree friend_type = t;
9028               bool adjust_processing_template_decl = false;
9029
9030               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9031                 {
9032                   /* template <class T> friend class C;  */
9033                   friend_type = tsubst_friend_class (friend_type, args);
9034                   adjust_processing_template_decl = true;
9035                 }
9036               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9037                 {
9038                   /* template <class T> friend class C::D;  */
9039                   friend_type = tsubst (friend_type, args,
9040                                         tf_warning_or_error, NULL_TREE);
9041                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9042                     friend_type = TREE_TYPE (friend_type);
9043                   adjust_processing_template_decl = true;
9044                 }
9045               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9046                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9047                 {
9048                   /* This could be either
9049
9050                        friend class T::C;
9051
9052                      when dependent_type_p is false or
9053
9054                        template <class U> friend class T::C;
9055
9056                      otherwise.  */
9057                   friend_type = tsubst (friend_type, args,
9058                                         tf_warning_or_error, NULL_TREE);
9059                   /* Bump processing_template_decl for correct
9060                      dependent_type_p calculation.  */
9061                   ++processing_template_decl;
9062                   if (dependent_type_p (friend_type))
9063                     adjust_processing_template_decl = true;
9064                   --processing_template_decl;
9065                 }
9066               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9067                        && hidden_name_p (TYPE_NAME (friend_type)))
9068                 {
9069                   /* friend class C;
9070
9071                      where C hasn't been declared yet.  Let's lookup name
9072                      from namespace scope directly, bypassing any name that
9073                      come from dependent base class.  */
9074                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9075
9076                   /* The call to xref_tag_from_type does injection for friend
9077                      classes.  */
9078                   push_nested_namespace (ns);
9079                   friend_type =
9080                     xref_tag_from_type (friend_type, NULL_TREE,
9081                                         /*tag_scope=*/ts_current);
9082                   pop_nested_namespace (ns);
9083                 }
9084               else if (uses_template_parms (friend_type))
9085                 /* friend class C<T>;  */
9086                 friend_type = tsubst (friend_type, args,
9087                                       tf_warning_or_error, NULL_TREE);
9088               /* Otherwise it's
9089
9090                    friend class C;
9091
9092                  where C is already declared or
9093
9094                    friend class C<int>;
9095
9096                  We don't have to do anything in these cases.  */
9097
9098               if (adjust_processing_template_decl)
9099                 /* Trick make_friend_class into realizing that the friend
9100                    we're adding is a template, not an ordinary class.  It's
9101                    important that we use make_friend_class since it will
9102                    perform some error-checking and output cross-reference
9103                    information.  */
9104                 ++processing_template_decl;
9105
9106               if (friend_type != error_mark_node)
9107                 make_friend_class (type, friend_type, /*complain=*/false);
9108
9109               if (adjust_processing_template_decl)
9110                 --processing_template_decl;
9111             }
9112           else
9113             {
9114               /* Build new DECL_FRIENDLIST.  */
9115               tree r;
9116
9117               /* The file and line for this declaration, to
9118                  assist in error message reporting.  Since we
9119                  called push_tinst_level above, we don't need to
9120                  restore these.  */
9121               input_location = DECL_SOURCE_LOCATION (t);
9122
9123               if (TREE_CODE (t) == TEMPLATE_DECL)
9124                 {
9125                   ++processing_template_decl;
9126                   push_deferring_access_checks (dk_no_check);
9127                 }
9128
9129               r = tsubst_friend_function (t, args);
9130               add_friend (type, r, /*complain=*/false);
9131               if (TREE_CODE (t) == TEMPLATE_DECL)
9132                 {
9133                   pop_deferring_access_checks ();
9134                   --processing_template_decl;
9135                 }
9136             }
9137         }
9138     }
9139
9140   if (CLASSTYPE_LAMBDA_EXPR (type))
9141     {
9142       tree decl = lambda_function (type);
9143       if (decl)
9144         {
9145           tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
9146           if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
9147             {
9148               apply_lambda_return_type (lambda, void_type_node);
9149               LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
9150             }
9151           instantiate_decl (decl, false, false);
9152           maybe_add_lambda_conv_op (type);
9153         }
9154       else
9155         gcc_assert (errorcount);
9156     }
9157
9158   /* Set the file and line number information to whatever is given for
9159      the class itself.  This puts error messages involving generated
9160      implicit functions at a predictable point, and the same point
9161      that would be used for non-template classes.  */
9162   input_location = DECL_SOURCE_LOCATION (typedecl);
9163
9164   unreverse_member_declarations (type);
9165   finish_struct_1 (type);
9166   TYPE_BEING_DEFINED (type) = 0;
9167
9168   /* We don't instantiate default arguments for member functions.  14.7.1:
9169
9170      The implicit instantiation of a class template specialization causes
9171      the implicit instantiation of the declarations, but not of the
9172      definitions or default arguments, of the class member functions,
9173      member classes, static data members and member templates....  */
9174
9175   /* Some typedefs referenced from within the template code need to be access
9176      checked at template instantiation time, i.e now. These types were
9177      added to the template at parsing time. Let's get those and perform
9178      the access checks then.  */
9179   perform_typedefs_access_check (pattern, args);
9180   perform_deferred_access_checks ();
9181   pop_nested_class ();
9182   maximum_field_alignment = saved_maximum_field_alignment;
9183   pop_from_top_level ();
9184   pop_deferring_access_checks ();
9185   pop_tinst_level ();
9186
9187   /* The vtable for a template class can be emitted in any translation
9188      unit in which the class is instantiated.  When there is no key
9189      method, however, finish_struct_1 will already have added TYPE to
9190      the keyed_classes list.  */
9191   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9192     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9193
9194   return type;
9195 }
9196
9197 /* Wrapper for instantiate_class_template_1.  */
9198
9199 tree
9200 instantiate_class_template (tree type)
9201 {
9202   tree ret;
9203   timevar_push (TV_TEMPLATE_INST);
9204   ret = instantiate_class_template_1 (type);
9205   timevar_pop (TV_TEMPLATE_INST);
9206   return ret;
9207 }
9208
9209 static tree
9210 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9211 {
9212   tree r;
9213
9214   if (!t)
9215     r = t;
9216   else if (TYPE_P (t))
9217     r = tsubst (t, args, complain, in_decl);
9218   else
9219     {
9220       if (!(complain & tf_warning))
9221         ++c_inhibit_evaluation_warnings;
9222       r = tsubst_expr (t, args, complain, in_decl,
9223                        /*integral_constant_expression_p=*/true);
9224       if (!(complain & tf_warning))
9225         --c_inhibit_evaluation_warnings;
9226       /* Preserve the raw-reference nature of T.  */
9227       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9228           && REFERENCE_REF_P (r))
9229         r = TREE_OPERAND (r, 0);
9230     }
9231   return r;
9232 }
9233
9234 /* Given a function parameter pack TMPL_PARM and some function parameters
9235    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9236    and set *SPEC_P to point at the next point in the list.  */
9237
9238 static tree
9239 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9240 {
9241   /* Collect all of the extra "packed" parameters into an
9242      argument pack.  */
9243   tree parmvec;
9244   tree parmtypevec;
9245   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9246   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9247   tree spec_parm = *spec_p;
9248   int i, len;
9249
9250   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9251     if (tmpl_parm
9252         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9253       break;
9254
9255   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9256   parmvec = make_tree_vec (len);
9257   parmtypevec = make_tree_vec (len);
9258   spec_parm = *spec_p;
9259   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9260     {
9261       TREE_VEC_ELT (parmvec, i) = spec_parm;
9262       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9263     }
9264
9265   /* Build the argument packs.  */
9266   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9267   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9268   TREE_TYPE (argpack) = argtypepack;
9269   *spec_p = spec_parm;
9270
9271   return argpack;
9272 }
9273
9274 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9275    NONTYPE_ARGUMENT_PACK.  */
9276
9277 static tree
9278 make_fnparm_pack (tree spec_parm)
9279 {
9280   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9281 }
9282
9283 /* Substitute ARGS into T, which is an pack expansion
9284    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9285    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9286    (if only a partial substitution could be performed) or
9287    ERROR_MARK_NODE if there was an error.  */
9288 tree
9289 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9290                        tree in_decl)
9291 {
9292   tree pattern;
9293   tree pack, packs = NULL_TREE;
9294   bool unsubstituted_packs = false;
9295   bool real_packs = false;
9296   int missing_level = 0;
9297   int i, len = -1;
9298   tree result;
9299   htab_t saved_local_specializations = NULL;
9300   bool need_local_specializations = false;
9301   int levels;
9302
9303   gcc_assert (PACK_EXPANSION_P (t));
9304   pattern = PACK_EXPANSION_PATTERN (t);
9305
9306   /* Add in any args remembered from an earlier partial instantiation.  */
9307   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9308
9309   levels = TMPL_ARGS_DEPTH (args);
9310
9311   /* Determine the argument packs that will instantiate the parameter
9312      packs used in the expansion expression. While we're at it,
9313      compute the number of arguments to be expanded and make sure it
9314      is consistent.  */
9315   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9316        pack = TREE_CHAIN (pack))
9317     {
9318       tree parm_pack = TREE_VALUE (pack);
9319       tree arg_pack = NULL_TREE;
9320       tree orig_arg = NULL_TREE;
9321       int level = 0;
9322
9323       if (TREE_CODE (parm_pack) == BASES)
9324        {
9325          if (BASES_DIRECT (parm_pack))
9326            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9327                                                         args, complain, in_decl, false));
9328          else
9329            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9330                                                  args, complain, in_decl, false));
9331        }
9332       if (TREE_CODE (parm_pack) == PARM_DECL)
9333         {
9334           if (at_function_scope_p ())
9335             arg_pack = retrieve_local_specialization (parm_pack);
9336           else
9337             {
9338               /* We can't rely on local_specializations for a parameter
9339                  name used later in a function declaration (such as in a
9340                  late-specified return type).  Even if it exists, it might
9341                  have the wrong value for a recursive call.  Just make a
9342                  dummy decl, since it's only used for its type.  */
9343               arg_pack = tsubst_decl (parm_pack, args, complain);
9344               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9345                 /* Partial instantiation of the parm_pack, we can't build
9346                    up an argument pack yet.  */
9347                 arg_pack = NULL_TREE;
9348               else
9349                 arg_pack = make_fnparm_pack (arg_pack);
9350               need_local_specializations = true;
9351             }
9352         }
9353       else
9354         {
9355           int idx;
9356           template_parm_level_and_index (parm_pack, &level, &idx);
9357
9358           if (level <= levels)
9359             arg_pack = TMPL_ARG (args, level, idx);
9360         }
9361
9362       orig_arg = arg_pack;
9363       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9364         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9365       
9366       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9367         /* This can only happen if we forget to expand an argument
9368            pack somewhere else. Just return an error, silently.  */
9369         {
9370           result = make_tree_vec (1);
9371           TREE_VEC_ELT (result, 0) = error_mark_node;
9372           return result;
9373         }
9374
9375       if (arg_from_parm_pack_p (arg_pack, parm_pack))
9376         /* The argument pack that the parameter maps to is just an
9377            expansion of the parameter itself, such as one would find
9378            in the implicit typedef of a class inside the class itself.
9379            Consider this parameter "unsubstituted", so that we will
9380            maintain the outer pack expansion.  */
9381         arg_pack = NULL_TREE;
9382           
9383       if (arg_pack)
9384         {
9385           int my_len = 
9386             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9387
9388           /* Don't bother trying to do a partial substitution with
9389              incomplete packs; we'll try again after deduction.  */
9390           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9391             return t;
9392
9393           if (len < 0)
9394             len = my_len;
9395           else if (len != my_len)
9396             {
9397               if (!(complain & tf_error))
9398                 /* Fail quietly.  */;
9399               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9400                 error ("mismatched argument pack lengths while expanding "
9401                        "%<%T%>",
9402                        pattern);
9403               else
9404                 error ("mismatched argument pack lengths while expanding "
9405                        "%<%E%>",
9406                        pattern);
9407               return error_mark_node;
9408             }
9409
9410           if (TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9411               && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack),
9412                                                  0)))
9413             /* This isn't a real argument pack yet.  */;
9414           else
9415             real_packs = true;
9416
9417           /* Keep track of the parameter packs and their corresponding
9418              argument packs.  */
9419           packs = tree_cons (parm_pack, arg_pack, packs);
9420           TREE_TYPE (packs) = orig_arg;
9421         }
9422       else
9423         {
9424           /* We can't substitute for this parameter pack.  We use a flag as
9425              well as the missing_level counter because function parameter
9426              packs don't have a level.  */
9427           unsubstituted_packs = true;
9428           if (!missing_level || missing_level > level)
9429             missing_level = level;
9430         }
9431     }
9432
9433   /* We cannot expand this expansion expression, because we don't have
9434      all of the argument packs we need.  */
9435   if (unsubstituted_packs)
9436     {
9437       if (real_packs)
9438         {
9439           /* We got some full packs, but we can't substitute them in until we
9440              have values for all the packs.  So remember these until then.  */
9441           tree save_args;
9442
9443           t = make_pack_expansion (pattern);
9444
9445           /* The call to add_to_template_args above assumes no overlap
9446              between saved args and new args, so prune away any fake
9447              args, i.e. those that satisfied arg_from_parm_pack_p above.  */
9448           if (missing_level && levels >= missing_level)
9449             {
9450               gcc_assert (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args)
9451                           && missing_level > 1);
9452               TREE_VEC_LENGTH (args) = missing_level - 1;
9453               save_args = copy_node (args);
9454               TREE_VEC_LENGTH (args) = levels;
9455             }
9456           else
9457             save_args = args;
9458
9459           PACK_EXPANSION_EXTRA_ARGS (t) = save_args;
9460         }
9461       else
9462         {
9463           /* There were no real arguments, we're just replacing a parameter
9464              pack with another version of itself. Substitute into the
9465              pattern and return a PACK_EXPANSION_*. The caller will need to
9466              deal with that.  */
9467           if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9468             t = tsubst_expr (pattern, args, complain, in_decl,
9469                              /*integral_constant_expression_p=*/false);
9470           else
9471             t = tsubst (pattern, args, complain, in_decl);
9472           t = make_pack_expansion (t);
9473         }
9474       return t;
9475     }
9476
9477   /* We could not find any argument packs that work.  */
9478   if (len < 0)
9479     return error_mark_node;
9480
9481   if (need_local_specializations)
9482     {
9483       /* We're in a late-specified return type, so create our own local
9484          specializations table; the current table is either NULL or (in the
9485          case of recursive unification) might have bindings that we don't
9486          want to use or alter.  */
9487       saved_local_specializations = local_specializations;
9488       local_specializations = htab_create (37,
9489                                            hash_local_specialization,
9490                                            eq_local_specializations,
9491                                            NULL);
9492     }
9493
9494   /* For each argument in each argument pack, substitute into the
9495      pattern.  */
9496   result = make_tree_vec (len);
9497   for (i = 0; i < len; ++i)
9498     {
9499       /* For parameter pack, change the substitution of the parameter
9500          pack to the ith argument in its argument pack, then expand
9501          the pattern.  */
9502       for (pack = packs; pack; pack = TREE_CHAIN (pack))
9503         {
9504           tree parm = TREE_PURPOSE (pack);
9505           tree arg;
9506
9507           /* Select the Ith argument from the pack.  */
9508           if (TREE_CODE (parm) == PARM_DECL)
9509             {
9510               if (i == 0)
9511                 {
9512                   arg = make_node (ARGUMENT_PACK_SELECT);
9513                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9514                   mark_used (parm);
9515                   register_local_specialization (arg, parm);
9516                 }
9517               else
9518                 arg = retrieve_local_specialization (parm);
9519             }
9520           else
9521             {
9522               int idx, level;
9523               template_parm_level_and_index (parm, &level, &idx);
9524
9525               if (i == 0)
9526                 {
9527                   arg = make_node (ARGUMENT_PACK_SELECT);
9528                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9529                   /* Update the corresponding argument.  */
9530                   TMPL_ARG (args, level, idx) = arg;
9531                 }
9532               else
9533                 /* Re-use the ARGUMENT_PACK_SELECT.  */
9534                 arg = TMPL_ARG (args, level, idx);
9535             }
9536           ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9537         }
9538
9539       /* Substitute into the PATTERN with the altered arguments.  */
9540       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9541         TREE_VEC_ELT (result, i) = 
9542           tsubst_expr (pattern, args, complain, in_decl,
9543                        /*integral_constant_expression_p=*/false);
9544       else
9545         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9546
9547       if (TREE_VEC_ELT (result, i) == error_mark_node)
9548         {
9549           result = error_mark_node;
9550           break;
9551         }
9552     }
9553
9554   /* Update ARGS to restore the substitution from parameter packs to
9555      their argument packs.  */
9556   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9557     {
9558       tree parm = TREE_PURPOSE (pack);
9559
9560       if (TREE_CODE (parm) == PARM_DECL)
9561         register_local_specialization (TREE_TYPE (pack), parm);
9562       else
9563         {
9564           int idx, level;
9565           template_parm_level_and_index (parm, &level, &idx);
9566           
9567           /* Update the corresponding argument.  */
9568           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9569             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9570               TREE_TYPE (pack);
9571           else
9572             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9573         }
9574     }
9575
9576   if (saved_local_specializations)
9577     {
9578       htab_delete (local_specializations);
9579       local_specializations = saved_local_specializations;
9580     }
9581   
9582   return result;
9583 }
9584
9585 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9586    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9587    parameter packs; all parms generated from a function parameter pack will
9588    have the same DECL_PARM_INDEX.  */
9589
9590 tree
9591 get_pattern_parm (tree parm, tree tmpl)
9592 {
9593   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9594   tree patparm;
9595
9596   if (DECL_ARTIFICIAL (parm))
9597     {
9598       for (patparm = DECL_ARGUMENTS (pattern);
9599            patparm; patparm = DECL_CHAIN (patparm))
9600         if (DECL_ARTIFICIAL (patparm)
9601             && DECL_NAME (parm) == DECL_NAME (patparm))
9602           break;
9603     }
9604   else
9605     {
9606       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9607       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9608       gcc_assert (DECL_PARM_INDEX (patparm)
9609                   == DECL_PARM_INDEX (parm));
9610     }
9611
9612   return patparm;
9613 }
9614
9615 /* Substitute ARGS into the vector or list of template arguments T.  */
9616
9617 static tree
9618 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9619 {
9620   tree orig_t = t;
9621   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9622   tree *elts;
9623
9624   if (t == error_mark_node)
9625     return error_mark_node;
9626
9627   len = TREE_VEC_LENGTH (t);
9628   elts = XALLOCAVEC (tree, len);
9629
9630   for (i = 0; i < len; i++)
9631     {
9632       tree orig_arg = TREE_VEC_ELT (t, i);
9633       tree new_arg;
9634
9635       if (TREE_CODE (orig_arg) == TREE_VEC)
9636         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9637       else if (PACK_EXPANSION_P (orig_arg))
9638         {
9639           /* Substitute into an expansion expression.  */
9640           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9641
9642           if (TREE_CODE (new_arg) == TREE_VEC)
9643             /* Add to the expanded length adjustment the number of
9644                expanded arguments. We subtract one from this
9645                measurement, because the argument pack expression
9646                itself is already counted as 1 in
9647                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9648                the argument pack is empty.  */
9649             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9650         }
9651       else if (ARGUMENT_PACK_P (orig_arg))
9652         {
9653           /* Substitute into each of the arguments.  */
9654           new_arg = TYPE_P (orig_arg)
9655             ? cxx_make_type (TREE_CODE (orig_arg))
9656             : make_node (TREE_CODE (orig_arg));
9657           
9658           SET_ARGUMENT_PACK_ARGS (
9659             new_arg,
9660             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9661                                   args, complain, in_decl));
9662
9663           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9664             new_arg = error_mark_node;
9665
9666           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9667             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9668                                           complain, in_decl);
9669             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9670
9671             if (TREE_TYPE (new_arg) == error_mark_node)
9672               new_arg = error_mark_node;
9673           }
9674         }
9675       else
9676         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9677
9678       if (new_arg == error_mark_node)
9679         return error_mark_node;
9680
9681       elts[i] = new_arg;
9682       if (new_arg != orig_arg)
9683         need_new = 1;
9684     }
9685
9686   if (!need_new)
9687     return t;
9688
9689   /* Make space for the expanded arguments coming from template
9690      argument packs.  */
9691   t = make_tree_vec (len + expanded_len_adjust);
9692   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9693      arguments for a member template.
9694      In that case each TREE_VEC in ORIG_T represents a level of template
9695      arguments, and ORIG_T won't carry any non defaulted argument count.
9696      It will rather be the nested TREE_VECs that will carry one.
9697      In other words, ORIG_T carries a non defaulted argument count only
9698      if it doesn't contain any nested TREE_VEC.  */
9699   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9700     {
9701       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9702       count += expanded_len_adjust;
9703       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9704     }
9705   for (i = 0, out = 0; i < len; i++)
9706     {
9707       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9708            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9709           && TREE_CODE (elts[i]) == TREE_VEC)
9710         {
9711           int idx;
9712
9713           /* Now expand the template argument pack "in place".  */
9714           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9715             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9716         }
9717       else
9718         {
9719           TREE_VEC_ELT (t, out) = elts[i];
9720           out++;
9721         }
9722     }
9723
9724   return t;
9725 }
9726
9727 /* Return the result of substituting ARGS into the template parameters
9728    given by PARMS.  If there are m levels of ARGS and m + n levels of
9729    PARMS, then the result will contain n levels of PARMS.  For
9730    example, if PARMS is `template <class T> template <class U>
9731    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9732    result will be `template <int*, double, class V>'.  */
9733
9734 static tree
9735 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9736 {
9737   tree r = NULL_TREE;
9738   tree* new_parms;
9739
9740   /* When substituting into a template, we must set
9741      PROCESSING_TEMPLATE_DECL as the template parameters may be
9742      dependent if they are based on one-another, and the dependency
9743      predicates are short-circuit outside of templates.  */
9744   ++processing_template_decl;
9745
9746   for (new_parms = &r;
9747        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9748        new_parms = &(TREE_CHAIN (*new_parms)),
9749          parms = TREE_CHAIN (parms))
9750     {
9751       tree new_vec =
9752         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9753       int i;
9754
9755       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9756         {
9757           tree tuple;
9758
9759           if (parms == error_mark_node)
9760             continue;
9761
9762           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9763
9764           if (tuple == error_mark_node)
9765             continue;
9766
9767           TREE_VEC_ELT (new_vec, i) =
9768             tsubst_template_parm (tuple, args, complain);
9769         }
9770
9771       *new_parms =
9772         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9773                              - TMPL_ARGS_DEPTH (args)),
9774                    new_vec, NULL_TREE);
9775     }
9776
9777   --processing_template_decl;
9778
9779   return r;
9780 }
9781
9782 /* Return the result of substituting ARGS into one template parameter
9783    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9784    parameter and which TREE_PURPOSE is the default argument of the
9785    template parameter.  */
9786
9787 static tree
9788 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9789 {
9790   tree default_value, parm_decl;
9791
9792   if (args == NULL_TREE
9793       || t == NULL_TREE
9794       || t == error_mark_node)
9795     return t;
9796
9797   gcc_assert (TREE_CODE (t) == TREE_LIST);
9798
9799   default_value = TREE_PURPOSE (t);
9800   parm_decl = TREE_VALUE (t);
9801
9802   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9803   if (TREE_CODE (parm_decl) == PARM_DECL
9804       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9805     parm_decl = error_mark_node;
9806   default_value = tsubst_template_arg (default_value, args,
9807                                        complain, NULL_TREE);
9808
9809   return build_tree_list (default_value, parm_decl);
9810 }
9811
9812 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9813    type T.  If T is not an aggregate or enumeration type, it is
9814    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9815    ENTERING_SCOPE is nonzero, T is the context for a template which
9816    we are presently tsubst'ing.  Return the substituted value.  */
9817
9818 static tree
9819 tsubst_aggr_type (tree t,
9820                   tree args,
9821                   tsubst_flags_t complain,
9822                   tree in_decl,
9823                   int entering_scope)
9824 {
9825   if (t == NULL_TREE)
9826     return NULL_TREE;
9827
9828   switch (TREE_CODE (t))
9829     {
9830     case RECORD_TYPE:
9831       if (TYPE_PTRMEMFUNC_P (t))
9832         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9833
9834       /* Else fall through.  */
9835     case ENUMERAL_TYPE:
9836     case UNION_TYPE:
9837       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9838         {
9839           tree argvec;
9840           tree context;
9841           tree r;
9842           int saved_unevaluated_operand;
9843           int saved_inhibit_evaluation_warnings;
9844
9845           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9846           saved_unevaluated_operand = cp_unevaluated_operand;
9847           cp_unevaluated_operand = 0;
9848           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9849           c_inhibit_evaluation_warnings = 0;
9850
9851           /* First, determine the context for the type we are looking
9852              up.  */
9853           context = TYPE_CONTEXT (t);
9854           if (context && TYPE_P (context))
9855             {
9856               context = tsubst_aggr_type (context, args, complain,
9857                                           in_decl, /*entering_scope=*/1);
9858               /* If context is a nested class inside a class template,
9859                  it may still need to be instantiated (c++/33959).  */
9860               context = complete_type (context);
9861             }
9862
9863           /* Then, figure out what arguments are appropriate for the
9864              type we are trying to find.  For example, given:
9865
9866                template <class T> struct S;
9867                template <class T, class U> void f(T, U) { S<U> su; }
9868
9869              and supposing that we are instantiating f<int, double>,
9870              then our ARGS will be {int, double}, but, when looking up
9871              S we only want {double}.  */
9872           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9873                                          complain, in_decl);
9874           if (argvec == error_mark_node)
9875             r = error_mark_node;
9876           else
9877             {
9878               r = lookup_template_class (t, argvec, in_decl, context,
9879                                          entering_scope, complain);
9880               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9881             }
9882
9883           cp_unevaluated_operand = saved_unevaluated_operand;
9884           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9885
9886           return r;
9887         }
9888       else
9889         /* This is not a template type, so there's nothing to do.  */
9890         return t;
9891
9892     default:
9893       return tsubst (t, args, complain, in_decl);
9894     }
9895 }
9896
9897 /* Substitute into the default argument ARG (a default argument for
9898    FN), which has the indicated TYPE.  */
9899
9900 tree
9901 tsubst_default_argument (tree fn, tree type, tree arg)
9902 {
9903   tree saved_class_ptr = NULL_TREE;
9904   tree saved_class_ref = NULL_TREE;
9905
9906   /* This can happen in invalid code.  */
9907   if (TREE_CODE (arg) == DEFAULT_ARG)
9908     return arg;
9909
9910   /* This default argument came from a template.  Instantiate the
9911      default argument here, not in tsubst.  In the case of
9912      something like:
9913
9914        template <class T>
9915        struct S {
9916          static T t();
9917          void f(T = t());
9918        };
9919
9920      we must be careful to do name lookup in the scope of S<T>,
9921      rather than in the current class.  */
9922   push_access_scope (fn);
9923   /* The "this" pointer is not valid in a default argument.  */
9924   if (cfun)
9925     {
9926       saved_class_ptr = current_class_ptr;
9927       cp_function_chain->x_current_class_ptr = NULL_TREE;
9928       saved_class_ref = current_class_ref;
9929       cp_function_chain->x_current_class_ref = NULL_TREE;
9930     }
9931
9932   push_deferring_access_checks(dk_no_deferred);
9933   /* The default argument expression may cause implicitly defined
9934      member functions to be synthesized, which will result in garbage
9935      collection.  We must treat this situation as if we were within
9936      the body of function so as to avoid collecting live data on the
9937      stack.  */
9938   ++function_depth;
9939   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9940                      tf_warning_or_error, NULL_TREE,
9941                      /*integral_constant_expression_p=*/false);
9942   --function_depth;
9943   pop_deferring_access_checks();
9944
9945   /* Restore the "this" pointer.  */
9946   if (cfun)
9947     {
9948       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9949       cp_function_chain->x_current_class_ref = saved_class_ref;
9950     }
9951
9952   /* Make sure the default argument is reasonable.  */
9953   arg = check_default_argument (type, arg);
9954
9955   pop_access_scope (fn);
9956
9957   return arg;
9958 }
9959
9960 /* Substitute into all the default arguments for FN.  */
9961
9962 static void
9963 tsubst_default_arguments (tree fn)
9964 {
9965   tree arg;
9966   tree tmpl_args;
9967
9968   tmpl_args = DECL_TI_ARGS (fn);
9969
9970   /* If this function is not yet instantiated, we certainly don't need
9971      its default arguments.  */
9972   if (uses_template_parms (tmpl_args))
9973     return;
9974   /* Don't do this again for clones.  */
9975   if (DECL_CLONED_FUNCTION_P (fn))
9976     return;
9977
9978   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9979        arg;
9980        arg = TREE_CHAIN (arg))
9981     if (TREE_PURPOSE (arg))
9982       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9983                                                     TREE_VALUE (arg),
9984                                                     TREE_PURPOSE (arg));
9985 }
9986
9987 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9988    result of the substitution.  Issue error and warning messages under
9989    control of COMPLAIN.  */
9990
9991 static tree
9992 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9993 {
9994 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9995   location_t saved_loc;
9996   tree r = NULL_TREE;
9997   tree in_decl = t;
9998   hashval_t hash = 0;
9999
10000   /* Set the filename and linenumber to improve error-reporting.  */
10001   saved_loc = input_location;
10002   input_location = DECL_SOURCE_LOCATION (t);
10003
10004   switch (TREE_CODE (t))
10005     {
10006     case TEMPLATE_DECL:
10007       {
10008         /* We can get here when processing a member function template,
10009            member class template, or template template parameter.  */
10010         tree decl = DECL_TEMPLATE_RESULT (t);
10011         tree spec;
10012         tree tmpl_args;
10013         tree full_args;
10014
10015         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10016           {
10017             /* Template template parameter is treated here.  */
10018             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10019             if (new_type == error_mark_node)
10020               RETURN (error_mark_node);
10021
10022             r = copy_decl (t);
10023             DECL_CHAIN (r) = NULL_TREE;
10024             TREE_TYPE (r) = new_type;
10025             DECL_TEMPLATE_RESULT (r)
10026               = build_decl (DECL_SOURCE_LOCATION (decl),
10027                             TYPE_DECL, DECL_NAME (decl), new_type);
10028             DECL_TEMPLATE_PARMS (r)
10029               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10030                                        complain);
10031             TYPE_NAME (new_type) = r;
10032             break;
10033           }
10034
10035         /* We might already have an instance of this template.
10036            The ARGS are for the surrounding class type, so the
10037            full args contain the tsubst'd args for the context,
10038            plus the innermost args from the template decl.  */
10039         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10040           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10041           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10042         /* Because this is a template, the arguments will still be
10043            dependent, even after substitution.  If
10044            PROCESSING_TEMPLATE_DECL is not set, the dependency
10045            predicates will short-circuit.  */
10046         ++processing_template_decl;
10047         full_args = tsubst_template_args (tmpl_args, args,
10048                                           complain, in_decl);
10049         --processing_template_decl;
10050         if (full_args == error_mark_node)
10051           RETURN (error_mark_node);
10052
10053         /* If this is a default template template argument,
10054            tsubst might not have changed anything.  */
10055         if (full_args == tmpl_args)
10056           RETURN (t);
10057
10058         hash = hash_tmpl_and_args (t, full_args);
10059         spec = retrieve_specialization (t, full_args, hash);
10060         if (spec != NULL_TREE)
10061           {
10062             r = spec;
10063             break;
10064           }
10065
10066         /* Make a new template decl.  It will be similar to the
10067            original, but will record the current template arguments.
10068            We also create a new function declaration, which is just
10069            like the old one, but points to this new template, rather
10070            than the old one.  */
10071         r = copy_decl (t);
10072         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10073         DECL_CHAIN (r) = NULL_TREE;
10074
10075         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10076
10077         if (TREE_CODE (decl) == TYPE_DECL
10078             && !TYPE_DECL_ALIAS_P (decl))
10079           {
10080             tree new_type;
10081             ++processing_template_decl;
10082             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10083             --processing_template_decl;
10084             if (new_type == error_mark_node)
10085               RETURN (error_mark_node);
10086
10087             TREE_TYPE (r) = new_type;
10088             CLASSTYPE_TI_TEMPLATE (new_type) = r;
10089             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10090             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10091             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10092           }
10093         else
10094           {
10095             tree new_decl;
10096             ++processing_template_decl;
10097             new_decl = tsubst (decl, args, complain, in_decl);
10098             --processing_template_decl;
10099             if (new_decl == error_mark_node)
10100               RETURN (error_mark_node);
10101
10102             DECL_TEMPLATE_RESULT (r) = new_decl;
10103             DECL_TI_TEMPLATE (new_decl) = r;
10104             TREE_TYPE (r) = TREE_TYPE (new_decl);
10105             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10106             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10107           }
10108
10109         SET_DECL_IMPLICIT_INSTANTIATION (r);
10110         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10111         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10112
10113         /* The template parameters for this new template are all the
10114            template parameters for the old template, except the
10115            outermost level of parameters.  */
10116         DECL_TEMPLATE_PARMS (r)
10117           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10118                                    complain);
10119
10120         if (PRIMARY_TEMPLATE_P (t))
10121           DECL_PRIMARY_TEMPLATE (r) = r;
10122
10123         if (TREE_CODE (decl) != TYPE_DECL)
10124           /* Record this non-type partial instantiation.  */
10125           register_specialization (r, t,
10126                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10127                                    false, hash);
10128       }
10129       break;
10130
10131     case FUNCTION_DECL:
10132       {
10133         tree ctx;
10134         tree argvec = NULL_TREE;
10135         tree *friends;
10136         tree gen_tmpl;
10137         tree type;
10138         int member;
10139         int args_depth;
10140         int parms_depth;
10141
10142         /* Nobody should be tsubst'ing into non-template functions.  */
10143         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10144
10145         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10146           {
10147             tree spec;
10148             bool dependent_p;
10149
10150             /* If T is not dependent, just return it.  We have to
10151                increment PROCESSING_TEMPLATE_DECL because
10152                value_dependent_expression_p assumes that nothing is
10153                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10154             ++processing_template_decl;
10155             dependent_p = value_dependent_expression_p (t);
10156             --processing_template_decl;
10157             if (!dependent_p)
10158               RETURN (t);
10159
10160             /* Calculate the most general template of which R is a
10161                specialization, and the complete set of arguments used to
10162                specialize R.  */
10163             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10164             argvec = tsubst_template_args (DECL_TI_ARGS
10165                                           (DECL_TEMPLATE_RESULT
10166                                                  (DECL_TI_TEMPLATE (t))),
10167                                            args, complain, in_decl);
10168             if (argvec == error_mark_node)
10169               RETURN (error_mark_node);
10170
10171             /* Check to see if we already have this specialization.  */
10172             hash = hash_tmpl_and_args (gen_tmpl, argvec);
10173             spec = retrieve_specialization (gen_tmpl, argvec, hash);
10174
10175             if (spec)
10176               {
10177                 r = spec;
10178                 break;
10179               }
10180
10181             /* We can see more levels of arguments than parameters if
10182                there was a specialization of a member template, like
10183                this:
10184
10185                  template <class T> struct S { template <class U> void f(); }
10186                  template <> template <class U> void S<int>::f(U);
10187
10188                Here, we'll be substituting into the specialization,
10189                because that's where we can find the code we actually
10190                want to generate, but we'll have enough arguments for
10191                the most general template.
10192
10193                We also deal with the peculiar case:
10194
10195                  template <class T> struct S {
10196                    template <class U> friend void f();
10197                  };
10198                  template <class U> void f() {}
10199                  template S<int>;
10200                  template void f<double>();
10201
10202                Here, the ARGS for the instantiation of will be {int,
10203                double}.  But, we only need as many ARGS as there are
10204                levels of template parameters in CODE_PATTERN.  We are
10205                careful not to get fooled into reducing the ARGS in
10206                situations like:
10207
10208                  template <class T> struct S { template <class U> void f(U); }
10209                  template <class T> template <> void S<T>::f(int) {}
10210
10211                which we can spot because the pattern will be a
10212                specialization in this case.  */
10213             args_depth = TMPL_ARGS_DEPTH (args);
10214             parms_depth =
10215               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10216             if (args_depth > parms_depth
10217                 && !DECL_TEMPLATE_SPECIALIZATION (t))
10218               args = get_innermost_template_args (args, parms_depth);
10219           }
10220         else
10221           {
10222             /* This special case arises when we have something like this:
10223
10224                  template <class T> struct S {
10225                    friend void f<int>(int, double);
10226                  };
10227
10228                Here, the DECL_TI_TEMPLATE for the friend declaration
10229                will be an IDENTIFIER_NODE.  We are being called from
10230                tsubst_friend_function, and we want only to create a
10231                new decl (R) with appropriate types so that we can call
10232                determine_specialization.  */
10233             gen_tmpl = NULL_TREE;
10234           }
10235
10236         if (DECL_CLASS_SCOPE_P (t))
10237           {
10238             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10239               member = 2;
10240             else
10241               member = 1;
10242             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10243                                     complain, t, /*entering_scope=*/1);
10244           }
10245         else
10246           {
10247             member = 0;
10248             ctx = DECL_CONTEXT (t);
10249           }
10250         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10251         if (type == error_mark_node)
10252           RETURN (error_mark_node);
10253
10254         /* We do NOT check for matching decls pushed separately at this
10255            point, as they may not represent instantiations of this
10256            template, and in any case are considered separate under the
10257            discrete model.  */
10258         r = copy_decl (t);
10259         DECL_USE_TEMPLATE (r) = 0;
10260         TREE_TYPE (r) = type;
10261         /* Clear out the mangled name and RTL for the instantiation.  */
10262         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10263         SET_DECL_RTL (r, NULL);
10264         /* Leave DECL_INITIAL set on deleted instantiations.  */
10265         if (!DECL_DELETED_FN (r))
10266           DECL_INITIAL (r) = NULL_TREE;
10267         DECL_CONTEXT (r) = ctx;
10268
10269         if (member && DECL_CONV_FN_P (r))
10270           /* Type-conversion operator.  Reconstruct the name, in
10271              case it's the name of one of the template's parameters.  */
10272           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10273
10274         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10275                                      complain, t);
10276         DECL_RESULT (r) = NULL_TREE;
10277
10278         TREE_STATIC (r) = 0;
10279         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10280         DECL_EXTERNAL (r) = 1;
10281         /* If this is an instantiation of a function with internal
10282            linkage, we already know what object file linkage will be
10283            assigned to the instantiation.  */
10284         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10285         DECL_DEFER_OUTPUT (r) = 0;
10286         DECL_CHAIN (r) = NULL_TREE;
10287         DECL_PENDING_INLINE_INFO (r) = 0;
10288         DECL_PENDING_INLINE_P (r) = 0;
10289         DECL_SAVED_TREE (r) = NULL_TREE;
10290         DECL_STRUCT_FUNCTION (r) = NULL;
10291         TREE_USED (r) = 0;
10292         /* We'll re-clone as appropriate in instantiate_template.  */
10293         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10294
10295         /* If we aren't complaining now, return on error before we register
10296            the specialization so that we'll complain eventually.  */
10297         if ((complain & tf_error) == 0
10298             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10299             && !grok_op_properties (r, /*complain=*/false))
10300           RETURN (error_mark_node);
10301
10302         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10303            this in the special friend case mentioned above where
10304            GEN_TMPL is NULL.  */
10305         if (gen_tmpl)
10306           {
10307             DECL_TEMPLATE_INFO (r)
10308               = build_template_info (gen_tmpl, argvec);
10309             SET_DECL_IMPLICIT_INSTANTIATION (r);
10310             register_specialization (r, gen_tmpl, argvec, false, hash);
10311
10312             /* We're not supposed to instantiate default arguments
10313                until they are called, for a template.  But, for a
10314                declaration like:
10315
10316                  template <class T> void f ()
10317                  { extern void g(int i = T()); }
10318
10319                we should do the substitution when the template is
10320                instantiated.  We handle the member function case in
10321                instantiate_class_template since the default arguments
10322                might refer to other members of the class.  */
10323             if (!member
10324                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10325                 && !uses_template_parms (argvec))
10326               tsubst_default_arguments (r);
10327           }
10328         else
10329           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10330
10331         /* Copy the list of befriending classes.  */
10332         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10333              *friends;
10334              friends = &TREE_CHAIN (*friends))
10335           {
10336             *friends = copy_node (*friends);
10337             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10338                                             args, complain,
10339                                             in_decl);
10340           }
10341
10342         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10343           {
10344             maybe_retrofit_in_chrg (r);
10345             if (DECL_CONSTRUCTOR_P (r))
10346               grok_ctor_properties (ctx, r);
10347             /* If this is an instantiation of a member template, clone it.
10348                If it isn't, that'll be handled by
10349                clone_constructors_and_destructors.  */
10350             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10351               clone_function_decl (r, /*update_method_vec_p=*/0);
10352           }
10353         else if ((complain & tf_error) != 0
10354                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10355                  && !grok_op_properties (r, /*complain=*/true))
10356           RETURN (error_mark_node);
10357
10358         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10359           SET_DECL_FRIEND_CONTEXT (r,
10360                                    tsubst (DECL_FRIEND_CONTEXT (t),
10361                                             args, complain, in_decl));
10362
10363         /* Possibly limit visibility based on template args.  */
10364         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10365         if (DECL_VISIBILITY_SPECIFIED (t))
10366           {
10367             DECL_VISIBILITY_SPECIFIED (r) = 0;
10368             DECL_ATTRIBUTES (r)
10369               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10370           }
10371         determine_visibility (r);
10372         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10373             && !processing_template_decl)
10374           defaulted_late_check (r);
10375
10376         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10377                                         args, complain, in_decl);
10378       }
10379       break;
10380
10381     case PARM_DECL:
10382       {
10383         tree type = NULL_TREE;
10384         int i, len = 1;
10385         tree expanded_types = NULL_TREE;
10386         tree prev_r = NULL_TREE;
10387         tree first_r = NULL_TREE;
10388
10389         if (FUNCTION_PARAMETER_PACK_P (t))
10390           {
10391             /* If there is a local specialization that isn't a
10392                parameter pack, it means that we're doing a "simple"
10393                substitution from inside tsubst_pack_expansion. Just
10394                return the local specialization (which will be a single
10395                parm).  */
10396             tree spec = retrieve_local_specialization (t);
10397             if (spec 
10398                 && TREE_CODE (spec) == PARM_DECL
10399                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10400               RETURN (spec);
10401
10402             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10403                the parameters in this function parameter pack.  */
10404             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10405                                                     complain, in_decl);
10406             if (TREE_CODE (expanded_types) == TREE_VEC)
10407               {
10408                 len = TREE_VEC_LENGTH (expanded_types);
10409
10410                 /* Zero-length parameter packs are boring. Just substitute
10411                    into the chain.  */
10412                 if (len == 0)
10413                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10414                                   TREE_CHAIN (t)));
10415               }
10416             else
10417               {
10418                 /* All we did was update the type. Make a note of that.  */
10419                 type = expanded_types;
10420                 expanded_types = NULL_TREE;
10421               }
10422           }
10423
10424         /* Loop through all of the parameter's we'll build. When T is
10425            a function parameter pack, LEN is the number of expanded
10426            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10427         r = NULL_TREE;
10428         for (i = 0; i < len; ++i)
10429           {
10430             prev_r = r;
10431             r = copy_node (t);
10432             if (DECL_TEMPLATE_PARM_P (t))
10433               SET_DECL_TEMPLATE_PARM_P (r);
10434
10435             if (expanded_types)
10436               /* We're on the Ith parameter of the function parameter
10437                  pack.  */
10438               {
10439                 /* An argument of a function parameter pack is not a parameter
10440                    pack.  */
10441                 FUNCTION_PARAMETER_PACK_P (r) = false;
10442
10443                 /* Get the Ith type.  */
10444                 type = TREE_VEC_ELT (expanded_types, i);
10445
10446                 if (DECL_NAME (r))
10447                   /* Rename the parameter to include the index.  */
10448                   DECL_NAME (r) =
10449                     make_ith_pack_parameter_name (DECL_NAME (r), i);
10450               }
10451             else if (!type)
10452               /* We're dealing with a normal parameter.  */
10453               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10454
10455             type = type_decays_to (type);
10456             TREE_TYPE (r) = type;
10457             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10458
10459             if (DECL_INITIAL (r))
10460               {
10461                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10462                   DECL_INITIAL (r) = TREE_TYPE (r);
10463                 else
10464                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10465                                              complain, in_decl);
10466               }
10467
10468             DECL_CONTEXT (r) = NULL_TREE;
10469
10470             if (!DECL_TEMPLATE_PARM_P (r))
10471               DECL_ARG_TYPE (r) = type_passed_as (type);
10472
10473             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10474                                             args, complain, in_decl);
10475
10476             /* Keep track of the first new parameter we
10477                generate. That's what will be returned to the
10478                caller.  */
10479             if (!first_r)
10480               first_r = r;
10481
10482             /* Build a proper chain of parameters when substituting
10483                into a function parameter pack.  */
10484             if (prev_r)
10485               DECL_CHAIN (prev_r) = r;
10486           }
10487
10488         if (DECL_CHAIN (t))
10489           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10490                                    complain, DECL_CHAIN (t));
10491
10492         /* FIRST_R contains the start of the chain we've built.  */
10493         r = first_r;
10494       }
10495       break;
10496
10497     case FIELD_DECL:
10498       {
10499         tree type;
10500
10501         r = copy_decl (t);
10502         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10503         if (type == error_mark_node)
10504           RETURN (error_mark_node);
10505         TREE_TYPE (r) = type;
10506         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10507
10508         if (DECL_C_BIT_FIELD (r))
10509           /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10510              non-bit-fields DECL_INITIAL is a non-static data member
10511              initializer, which gets deferred instantiation.  */
10512           DECL_INITIAL (r)
10513             = tsubst_expr (DECL_INITIAL (t), args,
10514                            complain, in_decl,
10515                            /*integral_constant_expression_p=*/true);
10516         else if (DECL_INITIAL (t))
10517           {
10518             /* Set up DECL_TEMPLATE_INFO so that we can get at the
10519                NSDMI in perform_member_init.  Still set DECL_INITIAL
10520                so that we know there is one.  */
10521             DECL_INITIAL (r) = void_zero_node;
10522             gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10523             retrofit_lang_decl (r);
10524             DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10525           }
10526         /* We don't have to set DECL_CONTEXT here; it is set by
10527            finish_member_declaration.  */
10528         DECL_CHAIN (r) = NULL_TREE;
10529         if (VOID_TYPE_P (type))
10530           error ("instantiation of %q+D as type %qT", r, type);
10531
10532         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10533                                         args, complain, in_decl);
10534       }
10535       break;
10536
10537     case USING_DECL:
10538       /* We reach here only for member using decls.  */
10539       if (DECL_DEPENDENT_P (t))
10540         {
10541           r = do_class_using_decl
10542             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10543              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10544           if (!r)
10545             r = error_mark_node;
10546           else
10547             {
10548               TREE_PROTECTED (r) = TREE_PROTECTED (t);
10549               TREE_PRIVATE (r) = TREE_PRIVATE (t);
10550             }
10551         }
10552       else
10553         {
10554           r = copy_node (t);
10555           DECL_CHAIN (r) = NULL_TREE;
10556         }
10557       break;
10558
10559     case TYPE_DECL:
10560     case VAR_DECL:
10561       {
10562         tree argvec = NULL_TREE;
10563         tree gen_tmpl = NULL_TREE;
10564         tree spec;
10565         tree tmpl = NULL_TREE;
10566         tree ctx;
10567         tree type = NULL_TREE;
10568         bool local_p;
10569
10570         if (TREE_CODE (t) == TYPE_DECL
10571             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10572           {
10573             /* If this is the canonical decl, we don't have to
10574                mess with instantiations, and often we can't (for
10575                typename, template type parms and such).  Note that
10576                TYPE_NAME is not correct for the above test if
10577                we've copied the type for a typedef.  */
10578             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10579             if (type == error_mark_node)
10580               RETURN (error_mark_node);
10581             r = TYPE_NAME (type);
10582             break;
10583           }
10584
10585         /* Check to see if we already have the specialization we
10586            need.  */
10587         spec = NULL_TREE;
10588         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10589           {
10590             /* T is a static data member or namespace-scope entity.
10591                We have to substitute into namespace-scope variables
10592                (even though such entities are never templates) because
10593                of cases like:
10594                
10595                  template <class T> void f() { extern T t; }
10596
10597                where the entity referenced is not known until
10598                instantiation time.  */
10599             local_p = false;
10600             ctx = DECL_CONTEXT (t);
10601             if (DECL_CLASS_SCOPE_P (t))
10602               {
10603                 ctx = tsubst_aggr_type (ctx, args,
10604                                         complain,
10605                                         in_decl, /*entering_scope=*/1);
10606                 /* If CTX is unchanged, then T is in fact the
10607                    specialization we want.  That situation occurs when
10608                    referencing a static data member within in its own
10609                    class.  We can use pointer equality, rather than
10610                    same_type_p, because DECL_CONTEXT is always
10611                    canonical...  */
10612                 if (ctx == DECL_CONTEXT (t)
10613                     && (TREE_CODE (t) != TYPE_DECL
10614                         /* ... unless T is a member template; in which
10615                            case our caller can be willing to create a
10616                            specialization of that template represented
10617                            by T.  */
10618                         || !(DECL_TI_TEMPLATE (t)
10619                              && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
10620                   spec = t;
10621               }
10622
10623             if (!spec)
10624               {
10625                 tmpl = DECL_TI_TEMPLATE (t);
10626                 gen_tmpl = most_general_template (tmpl);
10627                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10628                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10629                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10630               }
10631           }
10632         else
10633           {
10634             /* A local variable.  */
10635             local_p = true;
10636             /* Subsequent calls to pushdecl will fill this in.  */
10637             ctx = NULL_TREE;
10638             spec = retrieve_local_specialization (t);
10639           }
10640         /* If we already have the specialization we need, there is
10641            nothing more to do.  */ 
10642         if (spec)
10643           {
10644             r = spec;
10645             break;
10646           }
10647
10648         /* Create a new node for the specialization we need.  */
10649         r = copy_decl (t);
10650         if (type == NULL_TREE)
10651           {
10652             if (is_typedef_decl (t))
10653               type = DECL_ORIGINAL_TYPE (t);
10654             else
10655               type = TREE_TYPE (t);
10656             if (TREE_CODE (t) == VAR_DECL
10657                 && VAR_HAD_UNKNOWN_BOUND (t)
10658                 && type != error_mark_node)
10659               type = strip_array_domain (type);
10660             type = tsubst (type, args, complain, in_decl);
10661           }
10662         if (TREE_CODE (r) == VAR_DECL)
10663           {
10664             /* Even if the original location is out of scope, the
10665                newly substituted one is not.  */
10666             DECL_DEAD_FOR_LOCAL (r) = 0;
10667             DECL_INITIALIZED_P (r) = 0;
10668             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10669             if (type == error_mark_node)
10670               RETURN (error_mark_node);
10671             if (TREE_CODE (type) == FUNCTION_TYPE)
10672               {
10673                 /* It may seem that this case cannot occur, since:
10674
10675                      typedef void f();
10676                      void g() { f x; }
10677
10678                    declares a function, not a variable.  However:
10679       
10680                      typedef void f();
10681                      template <typename T> void g() { T t; }
10682                      template void g<f>();
10683
10684                    is an attempt to declare a variable with function
10685                    type.  */
10686                 error ("variable %qD has function type",
10687                        /* R is not yet sufficiently initialized, so we
10688                           just use its name.  */
10689                        DECL_NAME (r));
10690                 RETURN (error_mark_node);
10691               }
10692             type = complete_type (type);
10693             /* Wait until cp_finish_decl to set this again, to handle
10694                circular dependency (template/instantiate6.C). */
10695             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10696             type = check_var_type (DECL_NAME (r), type);
10697
10698             if (DECL_HAS_VALUE_EXPR_P (t))
10699               {
10700                 tree ve = DECL_VALUE_EXPR (t);
10701                 ve = tsubst_expr (ve, args, complain, in_decl,
10702                                   /*constant_expression_p=*/false);
10703                 if (REFERENCE_REF_P (ve))
10704                   {
10705                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10706                     ve = TREE_OPERAND (ve, 0);
10707                   }
10708                 SET_DECL_VALUE_EXPR (r, ve);
10709               }
10710           }
10711         else if (DECL_SELF_REFERENCE_P (t))
10712           SET_DECL_SELF_REFERENCE_P (r);
10713         TREE_TYPE (r) = type;
10714         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10715         DECL_CONTEXT (r) = ctx;
10716         /* Clear out the mangled name and RTL for the instantiation.  */
10717         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10718         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10719           SET_DECL_RTL (r, NULL);
10720         /* The initializer must not be expanded until it is required;
10721            see [temp.inst].  */
10722         DECL_INITIAL (r) = NULL_TREE;
10723         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10724           SET_DECL_RTL (r, NULL);
10725         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10726         if (TREE_CODE (r) == VAR_DECL)
10727           {
10728             /* Possibly limit visibility based on template args.  */
10729             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10730             if (DECL_VISIBILITY_SPECIFIED (t))
10731               {
10732                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10733                 DECL_ATTRIBUTES (r)
10734                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10735               }
10736             determine_visibility (r);
10737           }
10738
10739         if (!local_p)
10740           {
10741             /* A static data member declaration is always marked
10742                external when it is declared in-class, even if an
10743                initializer is present.  We mimic the non-template
10744                processing here.  */
10745             DECL_EXTERNAL (r) = 1;
10746
10747             register_specialization (r, gen_tmpl, argvec, false, hash);
10748             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10749             SET_DECL_IMPLICIT_INSTANTIATION (r);
10750           }
10751         else if (cp_unevaluated_operand)
10752           {
10753             /* We're substituting this var in a decltype outside of its
10754                scope, such as for a lambda return type.  Don't add it to
10755                local_specializations, do perform auto deduction.  */
10756             tree auto_node = type_uses_auto (type);
10757             if (auto_node)
10758               {
10759                 tree init
10760                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10761                                  /*constant_expression_p=*/false);
10762                 init = resolve_nondeduced_context (init);
10763                 TREE_TYPE (r) = type
10764                   = do_auto_deduction (type, init, auto_node);
10765               }
10766           }
10767         else
10768           register_local_specialization (r, t);
10769
10770         DECL_CHAIN (r) = NULL_TREE;
10771
10772         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10773                                         /*flags=*/0,
10774                                         args, complain, in_decl);
10775
10776         /* Preserve a typedef that names a type.  */
10777         if (is_typedef_decl (r))
10778           {
10779             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10780             set_underlying_type (r);
10781           }
10782
10783         layout_decl (r, 0);
10784       }
10785       break;
10786
10787     default:
10788       gcc_unreachable ();
10789     }
10790 #undef RETURN
10791
10792  out:
10793   /* Restore the file and line information.  */
10794   input_location = saved_loc;
10795
10796   return r;
10797 }
10798
10799 /* Substitute into the ARG_TYPES of a function type.  */
10800
10801 static tree
10802 tsubst_arg_types (tree arg_types,
10803                   tree args,
10804                   tsubst_flags_t complain,
10805                   tree in_decl)
10806 {
10807   tree remaining_arg_types;
10808   tree type = NULL_TREE;
10809   int i = 1;
10810   tree expanded_args = NULL_TREE;
10811   tree default_arg;
10812
10813   if (!arg_types || arg_types == void_list_node)
10814     return arg_types;
10815
10816   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10817                                           args, complain, in_decl);
10818   if (remaining_arg_types == error_mark_node)
10819     return error_mark_node;
10820
10821   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10822     {
10823       /* For a pack expansion, perform substitution on the
10824          entire expression. Later on, we'll handle the arguments
10825          one-by-one.  */
10826       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10827                                             args, complain, in_decl);
10828
10829       if (TREE_CODE (expanded_args) == TREE_VEC)
10830         /* So that we'll spin through the parameters, one by one.  */
10831         i = TREE_VEC_LENGTH (expanded_args);
10832       else
10833         {
10834           /* We only partially substituted into the parameter
10835              pack. Our type is TYPE_PACK_EXPANSION.  */
10836           type = expanded_args;
10837           expanded_args = NULL_TREE;
10838         }
10839     }
10840
10841   while (i > 0) {
10842     --i;
10843     
10844     if (expanded_args)
10845       type = TREE_VEC_ELT (expanded_args, i);
10846     else if (!type)
10847       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10848
10849     if (type == error_mark_node)
10850       return error_mark_node;
10851     if (VOID_TYPE_P (type))
10852       {
10853         if (complain & tf_error)
10854           {
10855             error ("invalid parameter type %qT", type);
10856             if (in_decl)
10857               error ("in declaration %q+D", in_decl);
10858           }
10859         return error_mark_node;
10860     }
10861     
10862     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10863        top-level qualifiers as required.  */
10864     type = cv_unqualified (type_decays_to (type));
10865
10866     /* We do not substitute into default arguments here.  The standard
10867        mandates that they be instantiated only when needed, which is
10868        done in build_over_call.  */
10869     default_arg = TREE_PURPOSE (arg_types);
10870
10871     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10872       {
10873         /* We've instantiated a template before its default arguments
10874            have been parsed.  This can happen for a nested template
10875            class, and is not an error unless we require the default
10876            argument in a call of this function.  */
10877         remaining_arg_types = 
10878           tree_cons (default_arg, type, remaining_arg_types);
10879         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10880                        remaining_arg_types);
10881       }
10882     else
10883       remaining_arg_types = 
10884         hash_tree_cons (default_arg, type, remaining_arg_types);
10885   }
10886         
10887   return remaining_arg_types;
10888 }
10889
10890 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10891    *not* handle the exception-specification for FNTYPE, because the
10892    initial substitution of explicitly provided template parameters
10893    during argument deduction forbids substitution into the
10894    exception-specification:
10895
10896      [temp.deduct]
10897
10898      All references in the function type of the function template to  the
10899      corresponding template parameters are replaced by the specified tem-
10900      plate argument values.  If a substitution in a template parameter or
10901      in  the function type of the function template results in an invalid
10902      type, type deduction fails.  [Note: The equivalent  substitution  in
10903      exception specifications is done only when the function is instanti-
10904      ated, at which point a program is  ill-formed  if  the  substitution
10905      results in an invalid type.]  */
10906
10907 static tree
10908 tsubst_function_type (tree t,
10909                       tree args,
10910                       tsubst_flags_t complain,
10911                       tree in_decl)
10912 {
10913   tree return_type;
10914   tree arg_types;
10915   tree fntype;
10916
10917   /* The TYPE_CONTEXT is not used for function/method types.  */
10918   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10919
10920   /* Substitute the return type.  */
10921   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10922   if (return_type == error_mark_node)
10923     return error_mark_node;
10924   /* The standard does not presently indicate that creation of a
10925      function type with an invalid return type is a deduction failure.
10926      However, that is clearly analogous to creating an array of "void"
10927      or a reference to a reference.  This is core issue #486.  */
10928   if (TREE_CODE (return_type) == ARRAY_TYPE
10929       || TREE_CODE (return_type) == FUNCTION_TYPE)
10930     {
10931       if (complain & tf_error)
10932         {
10933           if (TREE_CODE (return_type) == ARRAY_TYPE)
10934             error ("function returning an array");
10935           else
10936             error ("function returning a function");
10937         }
10938       return error_mark_node;
10939     }
10940
10941   /* Substitute the argument types.  */
10942   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10943                                 complain, in_decl);
10944   if (arg_types == error_mark_node)
10945     return error_mark_node;
10946
10947   /* Construct a new type node and return it.  */
10948   if (TREE_CODE (t) == FUNCTION_TYPE)
10949     {
10950       fntype = build_function_type (return_type, arg_types);
10951       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10952     }
10953   else
10954     {
10955       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10956       if (! MAYBE_CLASS_TYPE_P (r))
10957         {
10958           /* [temp.deduct]
10959
10960              Type deduction may fail for any of the following
10961              reasons:
10962
10963              -- Attempting to create "pointer to member of T" when T
10964              is not a class type.  */
10965           if (complain & tf_error)
10966             error ("creating pointer to member function of non-class type %qT",
10967                       r);
10968           return error_mark_node;
10969         }
10970
10971       fntype = build_method_type_directly (r, return_type,
10972                                            TREE_CHAIN (arg_types));
10973     }
10974   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10975
10976   return fntype;
10977 }
10978
10979 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10980    ARGS into that specification, and return the substituted
10981    specification.  If there is no specification, return NULL_TREE.  */
10982
10983 static tree
10984 tsubst_exception_specification (tree fntype,
10985                                 tree args,
10986                                 tsubst_flags_t complain,
10987                                 tree in_decl,
10988                                 bool defer_ok)
10989 {
10990   tree specs;
10991   tree new_specs;
10992
10993   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10994   new_specs = NULL_TREE;
10995   if (specs && TREE_PURPOSE (specs))
10996     {
10997       /* A noexcept-specifier.  */
10998       tree expr = TREE_PURPOSE (specs);
10999       if (expr == boolean_true_node || expr == boolean_false_node)
11000         new_specs = expr;
11001       else if (defer_ok)
11002         {
11003           /* Defer instantiation of noexcept-specifiers to avoid
11004              excessive instantiations (c++/49107).  */
11005           new_specs = make_node (DEFERRED_NOEXCEPT);
11006           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11007             {
11008               /* We already partially instantiated this member template,
11009                  so combine the new args with the old.  */
11010               DEFERRED_NOEXCEPT_PATTERN (new_specs)
11011                 = DEFERRED_NOEXCEPT_PATTERN (expr);
11012               DEFERRED_NOEXCEPT_ARGS (new_specs)
11013                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11014             }
11015           else
11016             {
11017               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11018               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11019             }
11020         }
11021       else
11022         new_specs = tsubst_copy_and_build
11023           (expr, args, complain, in_decl, /*function_p=*/false,
11024            /*integral_constant_expression_p=*/true);
11025       new_specs = build_noexcept_spec (new_specs, complain);
11026     }
11027   else if (specs)
11028     {
11029       if (! TREE_VALUE (specs))
11030         new_specs = specs;
11031       else
11032         while (specs)
11033           {
11034             tree spec;
11035             int i, len = 1;
11036             tree expanded_specs = NULL_TREE;
11037
11038             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11039               {
11040                 /* Expand the pack expansion type.  */
11041                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11042                                                        args, complain,
11043                                                        in_decl);
11044
11045                 if (expanded_specs == error_mark_node)
11046                   return error_mark_node;
11047                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11048                   len = TREE_VEC_LENGTH (expanded_specs);
11049                 else
11050                   {
11051                     /* We're substituting into a member template, so
11052                        we got a TYPE_PACK_EXPANSION back.  Add that
11053                        expansion and move on.  */
11054                     gcc_assert (TREE_CODE (expanded_specs) 
11055                                 == TYPE_PACK_EXPANSION);
11056                     new_specs = add_exception_specifier (new_specs,
11057                                                          expanded_specs,
11058                                                          complain);
11059                     specs = TREE_CHAIN (specs);
11060                     continue;
11061                   }
11062               }
11063
11064             for (i = 0; i < len; ++i)
11065               {
11066                 if (expanded_specs)
11067                   spec = TREE_VEC_ELT (expanded_specs, i);
11068                 else
11069                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11070                 if (spec == error_mark_node)
11071                   return spec;
11072                 new_specs = add_exception_specifier (new_specs, spec, 
11073                                                      complain);
11074               }
11075
11076             specs = TREE_CHAIN (specs);
11077           }
11078     }
11079   return new_specs;
11080 }
11081
11082 /* Take the tree structure T and replace template parameters used
11083    therein with the argument vector ARGS.  IN_DECL is an associated
11084    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11085    Issue error and warning messages under control of COMPLAIN.  Note
11086    that we must be relatively non-tolerant of extensions here, in
11087    order to preserve conformance; if we allow substitutions that
11088    should not be allowed, we may allow argument deductions that should
11089    not succeed, and therefore report ambiguous overload situations
11090    where there are none.  In theory, we could allow the substitution,
11091    but indicate that it should have failed, and allow our caller to
11092    make sure that the right thing happens, but we don't try to do this
11093    yet.
11094
11095    This function is used for dealing with types, decls and the like;
11096    for expressions, use tsubst_expr or tsubst_copy.  */
11097
11098 tree
11099 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11100 {
11101   enum tree_code code;
11102   tree type, r = NULL_TREE;
11103
11104   if (t == NULL_TREE || t == error_mark_node
11105       || t == integer_type_node
11106       || t == void_type_node
11107       || t == char_type_node
11108       || t == unknown_type_node
11109       || TREE_CODE (t) == NAMESPACE_DECL
11110       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11111     return t;
11112
11113   if (DECL_P (t))
11114     return tsubst_decl (t, args, complain);
11115
11116   if (args == NULL_TREE)
11117     return t;
11118
11119   code = TREE_CODE (t);
11120
11121   if (code == IDENTIFIER_NODE)
11122     type = IDENTIFIER_TYPE_VALUE (t);
11123   else
11124     type = TREE_TYPE (t);
11125
11126   gcc_assert (type != unknown_type_node);
11127
11128   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11129      such as attribute aligned.  */
11130   if (TYPE_P (t)
11131       && typedef_variant_p (t))
11132     {
11133       tree decl = TYPE_NAME (t);
11134
11135       if (TYPE_DECL_ALIAS_P (decl)
11136           && DECL_LANG_SPECIFIC (decl)
11137           && DECL_TEMPLATE_INFO (decl)
11138           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
11139         {
11140           /* DECL represents an alias template and we want to
11141              instantiate it.  Let's substitute our arguments for the
11142              template parameters into the declaration and get the
11143              resulting type.  */
11144           r = tsubst (decl, args, complain, decl);
11145         }
11146       else if (DECL_CLASS_SCOPE_P (decl)
11147                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11148                && uses_template_parms (DECL_CONTEXT (decl)))
11149         {
11150           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11151           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11152           r = retrieve_specialization (tmpl, gen_args, 0);
11153         }
11154       else if (DECL_FUNCTION_SCOPE_P (decl)
11155                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11156                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11157         r = retrieve_local_specialization (decl);
11158       else
11159         /* The typedef is from a non-template context.  */
11160         return t;
11161
11162       if (r)
11163         {
11164           r = TREE_TYPE (r);
11165           r = cp_build_qualified_type_real
11166             (r, cp_type_quals (t) | cp_type_quals (r),
11167              complain | tf_ignore_bad_quals);
11168           return r;
11169         }
11170       /* Else we must be instantiating the typedef, so fall through.  */
11171     }
11172
11173   if (type
11174       && code != TYPENAME_TYPE
11175       && code != TEMPLATE_TYPE_PARM
11176       && code != IDENTIFIER_NODE
11177       && code != FUNCTION_TYPE
11178       && code != METHOD_TYPE)
11179     type = tsubst (type, args, complain, in_decl);
11180   if (type == error_mark_node)
11181     return error_mark_node;
11182
11183   switch (code)
11184     {
11185     case RECORD_TYPE:
11186     case UNION_TYPE:
11187     case ENUMERAL_TYPE:
11188       return tsubst_aggr_type (t, args, complain, in_decl,
11189                                /*entering_scope=*/0);
11190
11191     case ERROR_MARK:
11192     case IDENTIFIER_NODE:
11193     case VOID_TYPE:
11194     case REAL_TYPE:
11195     case COMPLEX_TYPE:
11196     case VECTOR_TYPE:
11197     case BOOLEAN_TYPE:
11198     case NULLPTR_TYPE:
11199     case LANG_TYPE:
11200       return t;
11201
11202     case INTEGER_TYPE:
11203       if (t == integer_type_node)
11204         return t;
11205
11206       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11207           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11208         return t;
11209
11210       {
11211         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11212
11213         max = tsubst_expr (omax, args, complain, in_decl,
11214                            /*integral_constant_expression_p=*/false);
11215
11216         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11217            needed.  */
11218         if (TREE_CODE (max) == NOP_EXPR
11219             && TREE_SIDE_EFFECTS (omax)
11220             && !TREE_TYPE (max))
11221           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11222
11223         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11224            with TREE_SIDE_EFFECTS that indicates this is not an integral
11225            constant expression.  */
11226         if (processing_template_decl
11227             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11228           {
11229             gcc_assert (TREE_CODE (max) == NOP_EXPR);
11230             TREE_SIDE_EFFECTS (max) = 1;
11231           }
11232
11233         return compute_array_index_type (NULL_TREE, max, complain);
11234       }
11235
11236     case TEMPLATE_TYPE_PARM:
11237     case TEMPLATE_TEMPLATE_PARM:
11238     case BOUND_TEMPLATE_TEMPLATE_PARM:
11239     case TEMPLATE_PARM_INDEX:
11240       {
11241         int idx;
11242         int level;
11243         int levels;
11244         tree arg = NULL_TREE;
11245
11246         r = NULL_TREE;
11247
11248         gcc_assert (TREE_VEC_LENGTH (args) > 0);
11249         template_parm_level_and_index (t, &level, &idx); 
11250
11251         levels = TMPL_ARGS_DEPTH (args);
11252         if (level <= levels)
11253           {
11254             arg = TMPL_ARG (args, level, idx);
11255
11256             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11257               /* See through ARGUMENT_PACK_SELECT arguments. */
11258               arg = ARGUMENT_PACK_SELECT_ARG (arg);
11259           }
11260
11261         if (arg == error_mark_node)
11262           return error_mark_node;
11263         else if (arg != NULL_TREE)
11264           {
11265             if (ARGUMENT_PACK_P (arg))
11266               /* If ARG is an argument pack, we don't actually want to
11267                  perform a substitution here, because substitutions
11268                  for argument packs are only done
11269                  element-by-element. We can get to this point when
11270                  substituting the type of a non-type template
11271                  parameter pack, when that type actually contains
11272                  template parameter packs from an outer template, e.g.,
11273
11274                  template<typename... Types> struct A {
11275                    template<Types... Values> struct B { };
11276                  };  */
11277               return t;
11278
11279             if (code == TEMPLATE_TYPE_PARM)
11280               {
11281                 int quals;
11282                 gcc_assert (TYPE_P (arg));
11283
11284                 quals = cp_type_quals (arg) | cp_type_quals (t);
11285                   
11286                 return cp_build_qualified_type_real
11287                   (arg, quals, complain | tf_ignore_bad_quals);
11288               }
11289             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11290               {
11291                 /* We are processing a type constructed from a
11292                    template template parameter.  */
11293                 tree argvec = tsubst (TYPE_TI_ARGS (t),
11294                                       args, complain, in_decl);
11295                 if (argvec == error_mark_node)
11296                   return error_mark_node;
11297
11298                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11299                             || TREE_CODE (arg) == TEMPLATE_DECL
11300                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11301
11302                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11303                   /* Consider this code:
11304
11305                         template <template <class> class Template>
11306                         struct Internal {
11307                         template <class Arg> using Bind = Template<Arg>;
11308                         };
11309
11310                         template <template <class> class Template, class Arg>
11311                         using Instantiate = Template<Arg>; //#0
11312
11313                         template <template <class> class Template,
11314                                   class Argument>
11315                         using Bind =
11316                           Instantiate<Internal<Template>::template Bind,
11317                                       Argument>; //#1
11318
11319                      When #1 is parsed, the
11320                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
11321                      parameter `Template' in #0 matches the
11322                      UNBOUND_CLASS_TEMPLATE representing the argument
11323                      `Internal<Template>::template Bind'; We then want
11324                      to assemble the type `Bind<Argument>' that can't
11325                      be fully created right now, because
11326                      `Internal<Template>' not being complete, the Bind
11327                      template cannot be looked up in that context.  So
11328                      we need to "store" `Bind<Argument>' for later
11329                      when the context of Bind becomes complete.  Let's
11330                      store that in a TYPENAME_TYPE.  */
11331                   return make_typename_type (TYPE_CONTEXT (arg),
11332                                              build_nt (TEMPLATE_ID_EXPR,
11333                                                        TYPE_IDENTIFIER (arg),
11334                                                        argvec),
11335                                              typename_type,
11336                                              complain);
11337
11338                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11339                    are resolving nested-types in the signature of a
11340                    member function templates.  Otherwise ARG is a
11341                    TEMPLATE_DECL and is the real template to be
11342                    instantiated.  */
11343                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11344                   arg = TYPE_NAME (arg);
11345
11346                 r = lookup_template_class (arg,
11347                                            argvec, in_decl,
11348                                            DECL_CONTEXT (arg),
11349                                             /*entering_scope=*/0,
11350                                            complain);
11351                 return cp_build_qualified_type_real
11352                   (r, cp_type_quals (t), complain);
11353               }
11354             else
11355               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11356               return convert_from_reference (unshare_expr (arg));
11357           }
11358
11359         if (level == 1)
11360           /* This can happen during the attempted tsubst'ing in
11361              unify.  This means that we don't yet have any information
11362              about the template parameter in question.  */
11363           return t;
11364
11365         /* If we get here, we must have been looking at a parm for a
11366            more deeply nested template.  Make a new version of this
11367            template parameter, but with a lower level.  */
11368         switch (code)
11369           {
11370           case TEMPLATE_TYPE_PARM:
11371           case TEMPLATE_TEMPLATE_PARM:
11372           case BOUND_TEMPLATE_TEMPLATE_PARM:
11373             if (cp_type_quals (t))
11374               {
11375                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11376                 r = cp_build_qualified_type_real
11377                   (r, cp_type_quals (t),
11378                    complain | (code == TEMPLATE_TYPE_PARM
11379                                ? tf_ignore_bad_quals : 0));
11380               }
11381             else
11382               {
11383                 r = copy_type (t);
11384                 TEMPLATE_TYPE_PARM_INDEX (r)
11385                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11386                                                 r, levels, args, complain);
11387                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11388                 TYPE_MAIN_VARIANT (r) = r;
11389                 TYPE_POINTER_TO (r) = NULL_TREE;
11390                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11391
11392                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11393                   /* We have reduced the level of the template
11394                      template parameter, but not the levels of its
11395                      template parameters, so canonical_type_parameter
11396                      will not be able to find the canonical template
11397                      template parameter for this level. Thus, we
11398                      require structural equality checking to compare
11399                      TEMPLATE_TEMPLATE_PARMs. */
11400                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11401                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11402                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11403                 else
11404                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11405
11406                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11407                   {
11408                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11409                                           complain, in_decl);
11410                     if (argvec == error_mark_node)
11411                       return error_mark_node;
11412
11413                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11414                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11415                   }
11416               }
11417             break;
11418
11419           case TEMPLATE_PARM_INDEX:
11420             r = reduce_template_parm_level (t, type, levels, args, complain);
11421             break;
11422
11423           default:
11424             gcc_unreachable ();
11425           }
11426
11427         return r;
11428       }
11429
11430     case TREE_LIST:
11431       {
11432         tree purpose, value, chain;
11433
11434         if (t == void_list_node)
11435           return t;
11436
11437         purpose = TREE_PURPOSE (t);
11438         if (purpose)
11439           {
11440             purpose = tsubst (purpose, args, complain, in_decl);
11441             if (purpose == error_mark_node)
11442               return error_mark_node;
11443           }
11444         value = TREE_VALUE (t);
11445         if (value)
11446           {
11447             value = tsubst (value, args, complain, in_decl);
11448             if (value == error_mark_node)
11449               return error_mark_node;
11450           }
11451         chain = TREE_CHAIN (t);
11452         if (chain && chain != void_type_node)
11453           {
11454             chain = tsubst (chain, args, complain, in_decl);
11455             if (chain == error_mark_node)
11456               return error_mark_node;
11457           }
11458         if (purpose == TREE_PURPOSE (t)
11459             && value == TREE_VALUE (t)
11460             && chain == TREE_CHAIN (t))
11461           return t;
11462         return hash_tree_cons (purpose, value, chain);
11463       }
11464
11465     case TREE_BINFO:
11466       /* We should never be tsubsting a binfo.  */
11467       gcc_unreachable ();
11468
11469     case TREE_VEC:
11470       /* A vector of template arguments.  */
11471       gcc_assert (!type);
11472       return tsubst_template_args (t, args, complain, in_decl);
11473
11474     case POINTER_TYPE:
11475     case REFERENCE_TYPE:
11476       {
11477         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11478           return t;
11479
11480         /* [temp.deduct]
11481
11482            Type deduction may fail for any of the following
11483            reasons:
11484
11485            -- Attempting to create a pointer to reference type.
11486            -- Attempting to create a reference to a reference type or
11487               a reference to void.
11488
11489           Core issue 106 says that creating a reference to a reference
11490           during instantiation is no longer a cause for failure. We
11491           only enforce this check in strict C++98 mode.  */
11492         if ((TREE_CODE (type) == REFERENCE_TYPE
11493              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11494             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11495           {
11496             static location_t last_loc;
11497
11498             /* We keep track of the last time we issued this error
11499                message to avoid spewing a ton of messages during a
11500                single bad template instantiation.  */
11501             if (complain & tf_error
11502                 && last_loc != input_location)
11503               {
11504                 if (TREE_CODE (type) == VOID_TYPE)
11505                   error ("forming reference to void");
11506                else if (code == POINTER_TYPE)
11507                  error ("forming pointer to reference type %qT", type);
11508                else
11509                   error ("forming reference to reference type %qT", type);
11510                 last_loc = input_location;
11511               }
11512
11513             return error_mark_node;
11514           }
11515         else if (code == POINTER_TYPE)
11516           {
11517             r = build_pointer_type (type);
11518             if (TREE_CODE (type) == METHOD_TYPE)
11519               r = build_ptrmemfunc_type (r);
11520           }
11521         else if (TREE_CODE (type) == REFERENCE_TYPE)
11522           /* In C++0x, during template argument substitution, when there is an
11523              attempt to create a reference to a reference type, reference
11524              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11525
11526              "If a template-argument for a template-parameter T names a type
11527              that is a reference to a type A, an attempt to create the type
11528              'lvalue reference to cv T' creates the type 'lvalue reference to
11529              A,' while an attempt to create the type type rvalue reference to
11530              cv T' creates the type T"
11531           */
11532           r = cp_build_reference_type
11533               (TREE_TYPE (type),
11534                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11535         else
11536           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11537         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11538
11539         if (r != error_mark_node)
11540           /* Will this ever be needed for TYPE_..._TO values?  */
11541           layout_type (r);
11542
11543         return r;
11544       }
11545     case OFFSET_TYPE:
11546       {
11547         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11548         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11549           {
11550             /* [temp.deduct]
11551
11552                Type deduction may fail for any of the following
11553                reasons:
11554
11555                -- Attempting to create "pointer to member of T" when T
11556                   is not a class type.  */
11557             if (complain & tf_error)
11558               error ("creating pointer to member of non-class type %qT", r);
11559             return error_mark_node;
11560           }
11561         if (TREE_CODE (type) == REFERENCE_TYPE)
11562           {
11563             if (complain & tf_error)
11564               error ("creating pointer to member reference type %qT", type);
11565             return error_mark_node;
11566           }
11567         if (TREE_CODE (type) == VOID_TYPE)
11568           {
11569             if (complain & tf_error)
11570               error ("creating pointer to member of type void");
11571             return error_mark_node;
11572           }
11573         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11574         if (TREE_CODE (type) == FUNCTION_TYPE)
11575           {
11576             /* The type of the implicit object parameter gets its
11577                cv-qualifiers from the FUNCTION_TYPE. */
11578             tree memptr;
11579             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11580             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11581             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11582                                                  complain);
11583           }
11584         else
11585           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11586                                                cp_type_quals (t),
11587                                                complain);
11588       }
11589     case FUNCTION_TYPE:
11590     case METHOD_TYPE:
11591       {
11592         tree fntype;
11593         tree specs;
11594         fntype = tsubst_function_type (t, args, complain, in_decl);
11595         if (fntype == error_mark_node)
11596           return error_mark_node;
11597
11598         /* Substitute the exception specification.  */
11599         specs = tsubst_exception_specification (t, args, complain,
11600                                                 in_decl, /*defer_ok*/true);
11601         if (specs == error_mark_node)
11602           return error_mark_node;
11603         if (specs)
11604           fntype = build_exception_variant (fntype, specs);
11605         return fntype;
11606       }
11607     case ARRAY_TYPE:
11608       {
11609         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11610         if (domain == error_mark_node)
11611           return error_mark_node;
11612
11613         /* As an optimization, we avoid regenerating the array type if
11614            it will obviously be the same as T.  */
11615         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11616           return t;
11617
11618         /* These checks should match the ones in grokdeclarator.
11619
11620            [temp.deduct]
11621
11622            The deduction may fail for any of the following reasons:
11623
11624            -- Attempting to create an array with an element type that
11625               is void, a function type, or a reference type, or [DR337]
11626               an abstract class type.  */
11627         if (TREE_CODE (type) == VOID_TYPE
11628             || TREE_CODE (type) == FUNCTION_TYPE
11629             || TREE_CODE (type) == REFERENCE_TYPE)
11630           {
11631             if (complain & tf_error)
11632               error ("creating array of %qT", type);
11633             return error_mark_node;
11634           }
11635         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11636           {
11637             if (complain & tf_error)
11638               error ("creating array of %qT, which is an abstract class type",
11639                      type);
11640             return error_mark_node;
11641           }
11642
11643         r = build_cplus_array_type (type, domain);
11644
11645         if (TYPE_USER_ALIGN (t))
11646           {
11647             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11648             TYPE_USER_ALIGN (r) = 1;
11649           }
11650
11651         return r;
11652       }
11653
11654     case TYPENAME_TYPE:
11655       {
11656         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11657                                      in_decl, /*entering_scope=*/1);
11658         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11659                               complain, in_decl);
11660
11661         if (ctx == error_mark_node || f == error_mark_node)
11662           return error_mark_node;
11663
11664         if (!MAYBE_CLASS_TYPE_P (ctx))
11665           {
11666             if (complain & tf_error)
11667               error ("%qT is not a class, struct, or union type", ctx);
11668             return error_mark_node;
11669           }
11670         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11671           {
11672             /* Normally, make_typename_type does not require that the CTX
11673                have complete type in order to allow things like:
11674
11675                  template <class T> struct S { typename S<T>::X Y; };
11676
11677                But, such constructs have already been resolved by this
11678                point, so here CTX really should have complete type, unless
11679                it's a partial instantiation.  */
11680             ctx = complete_type (ctx);
11681             if (!COMPLETE_TYPE_P (ctx))
11682               {
11683                 if (complain & tf_error)
11684                   cxx_incomplete_type_error (NULL_TREE, ctx);
11685                 return error_mark_node;
11686               }
11687           }
11688
11689         f = make_typename_type (ctx, f, typename_type,
11690                                 (complain & tf_error) | tf_keep_type_decl);
11691         if (f == error_mark_node)
11692           return f;
11693         if (TREE_CODE (f) == TYPE_DECL)
11694           {
11695             complain |= tf_ignore_bad_quals;
11696             f = TREE_TYPE (f);
11697           }
11698
11699         if (TREE_CODE (f) != TYPENAME_TYPE)
11700           {
11701             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11702               {
11703                 if (complain & tf_error)
11704                   error ("%qT resolves to %qT, which is not an enumeration type",
11705                          t, f);
11706                 else
11707                   return error_mark_node;
11708               }
11709             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11710               {
11711                 if (complain & tf_error)
11712                   error ("%qT resolves to %qT, which is is not a class type",
11713                          t, f);
11714                 else
11715                   return error_mark_node;
11716               }
11717           }
11718
11719         return cp_build_qualified_type_real
11720           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11721       }
11722
11723     case UNBOUND_CLASS_TEMPLATE:
11724       {
11725         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11726                                      in_decl, /*entering_scope=*/1);
11727         tree name = TYPE_IDENTIFIER (t);
11728         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11729
11730         if (ctx == error_mark_node || name == error_mark_node)
11731           return error_mark_node;
11732
11733         if (parm_list)
11734           parm_list = tsubst_template_parms (parm_list, args, complain);
11735         return make_unbound_class_template (ctx, name, parm_list, complain);
11736       }
11737
11738     case TYPEOF_TYPE:
11739       {
11740         tree type;
11741
11742         ++cp_unevaluated_operand;
11743         ++c_inhibit_evaluation_warnings;
11744
11745         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11746                             complain, in_decl,
11747                             /*integral_constant_expression_p=*/false);
11748
11749         --cp_unevaluated_operand;
11750         --c_inhibit_evaluation_warnings;
11751
11752         type = finish_typeof (type);
11753         return cp_build_qualified_type_real (type,
11754                                              cp_type_quals (t)
11755                                              | cp_type_quals (type),
11756                                              complain);
11757       }
11758
11759     case DECLTYPE_TYPE:
11760       {
11761         tree type;
11762
11763         ++cp_unevaluated_operand;
11764         ++c_inhibit_evaluation_warnings;
11765
11766         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11767                             complain, in_decl,
11768                             /*integral_constant_expression_p=*/false);
11769
11770         --cp_unevaluated_operand;
11771         --c_inhibit_evaluation_warnings;
11772
11773         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11774           type = lambda_capture_field_type (type);
11775         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11776           type = lambda_proxy_type (type);
11777         else
11778           type = finish_decltype_type
11779             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11780         return cp_build_qualified_type_real (type,
11781                                              cp_type_quals (t)
11782                                              | cp_type_quals (type),
11783                                              complain);
11784       }
11785
11786     case UNDERLYING_TYPE:
11787       {
11788         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11789                             complain, in_decl);
11790         return finish_underlying_type (type);
11791       }
11792
11793     case TYPE_ARGUMENT_PACK:
11794     case NONTYPE_ARGUMENT_PACK:
11795       {
11796         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11797         tree packed_out = 
11798           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11799                                 args,
11800                                 complain,
11801                                 in_decl);
11802         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11803
11804         /* For template nontype argument packs, also substitute into
11805            the type.  */
11806         if (code == NONTYPE_ARGUMENT_PACK)
11807           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11808
11809         return r;
11810       }
11811       break;
11812
11813     case INTEGER_CST:
11814     case REAL_CST:
11815     case STRING_CST:
11816     case PLUS_EXPR:
11817     case MINUS_EXPR:
11818     case NEGATE_EXPR:
11819     case NOP_EXPR:
11820     case INDIRECT_REF:
11821     case ADDR_EXPR:
11822     case CALL_EXPR:
11823     case ARRAY_REF:
11824     case SCOPE_REF:
11825       /* We should use one of the expression tsubsts for these codes.  */
11826       gcc_unreachable ();
11827
11828     default:
11829       sorry ("use of %qs in template", tree_code_name [(int) code]);
11830       return error_mark_node;
11831     }
11832 }
11833
11834 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11835    type of the expression on the left-hand side of the "." or "->"
11836    operator.  */
11837
11838 static tree
11839 tsubst_baselink (tree baselink, tree object_type,
11840                  tree args, tsubst_flags_t complain, tree in_decl)
11841 {
11842     tree name;
11843     tree qualifying_scope;
11844     tree fns;
11845     tree optype;
11846     tree template_args = 0;
11847     bool template_id_p = false;
11848
11849     /* A baselink indicates a function from a base class.  Both the
11850        BASELINK_ACCESS_BINFO and the base class referenced may
11851        indicate bases of the template class, rather than the
11852        instantiated class.  In addition, lookups that were not
11853        ambiguous before may be ambiguous now.  Therefore, we perform
11854        the lookup again.  */
11855     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11856     qualifying_scope = tsubst (qualifying_scope, args,
11857                                complain, in_decl);
11858     fns = BASELINK_FUNCTIONS (baselink);
11859     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11860     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11861       {
11862         template_id_p = true;
11863         template_args = TREE_OPERAND (fns, 1);
11864         fns = TREE_OPERAND (fns, 0);
11865         if (template_args)
11866           template_args = tsubst_template_args (template_args, args,
11867                                                 complain, in_decl);
11868       }
11869     name = DECL_NAME (get_first_fn (fns));
11870     if (IDENTIFIER_TYPENAME_P (name))
11871       name = mangle_conv_op_name_for_type (optype);
11872     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11873     if (!baselink)
11874       return error_mark_node;
11875
11876     /* If lookup found a single function, mark it as used at this
11877        point.  (If it lookup found multiple functions the one selected
11878        later by overload resolution will be marked as used at that
11879        point.)  */
11880     if (BASELINK_P (baselink))
11881       fns = BASELINK_FUNCTIONS (baselink);
11882     if (!template_id_p && !really_overloaded_fn (fns))
11883       mark_used (OVL_CURRENT (fns));
11884
11885     /* Add back the template arguments, if present.  */
11886     if (BASELINK_P (baselink) && template_id_p)
11887       BASELINK_FUNCTIONS (baselink)
11888         = build_nt (TEMPLATE_ID_EXPR,
11889                     BASELINK_FUNCTIONS (baselink),
11890                     template_args);
11891     /* Update the conversion operator type.  */
11892     BASELINK_OPTYPE (baselink) = optype;
11893
11894     if (!object_type)
11895       object_type = current_class_type;
11896     return adjust_result_of_qualified_name_lookup (baselink,
11897                                                    qualifying_scope,
11898                                                    object_type);
11899 }
11900
11901 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11902    true if the qualified-id will be a postfix-expression in-and-of
11903    itself; false if more of the postfix-expression follows the
11904    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11905    of "&".  */
11906
11907 static tree
11908 tsubst_qualified_id (tree qualified_id, tree args,
11909                      tsubst_flags_t complain, tree in_decl,
11910                      bool done, bool address_p)
11911 {
11912   tree expr;
11913   tree scope;
11914   tree name;
11915   bool is_template;
11916   tree template_args;
11917
11918   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11919
11920   /* Figure out what name to look up.  */
11921   name = TREE_OPERAND (qualified_id, 1);
11922   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11923     {
11924       is_template = true;
11925       template_args = TREE_OPERAND (name, 1);
11926       if (template_args)
11927         template_args = tsubst_template_args (template_args, args,
11928                                               complain, in_decl);
11929       name = TREE_OPERAND (name, 0);
11930     }
11931   else
11932     {
11933       is_template = false;
11934       template_args = NULL_TREE;
11935     }
11936
11937   /* Substitute into the qualifying scope.  When there are no ARGS, we
11938      are just trying to simplify a non-dependent expression.  In that
11939      case the qualifying scope may be dependent, and, in any case,
11940      substituting will not help.  */
11941   scope = TREE_OPERAND (qualified_id, 0);
11942   if (args)
11943     {
11944       scope = tsubst (scope, args, complain, in_decl);
11945       expr = tsubst_copy (name, args, complain, in_decl);
11946     }
11947   else
11948     expr = name;
11949
11950   if (dependent_scope_p (scope))
11951     {
11952       if (is_template)
11953         expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11954       return build_qualified_name (NULL_TREE, scope, expr,
11955                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11956     }
11957
11958   if (!BASELINK_P (name) && !DECL_P (expr))
11959     {
11960       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11961         {
11962           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11963           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11964             {
11965               error ("qualifying type %qT does not match destructor name ~%qT",
11966                      scope, TREE_OPERAND (expr, 0));
11967               expr = error_mark_node;
11968             }
11969           else
11970             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11971                                           /*is_type_p=*/0, false);
11972         }
11973       else
11974         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11975       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11976                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11977         {
11978           if (complain & tf_error)
11979             {
11980               error ("dependent-name %qE is parsed as a non-type, but "
11981                      "instantiation yields a type", qualified_id);
11982               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11983             }
11984           return error_mark_node;
11985         }
11986     }
11987
11988   if (DECL_P (expr))
11989     {
11990       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11991                                            scope);
11992       /* Remember that there was a reference to this entity.  */
11993       mark_used (expr);
11994     }
11995
11996   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11997     {
11998       if (complain & tf_error)
11999         qualified_name_lookup_error (scope,
12000                                      TREE_OPERAND (qualified_id, 1),
12001                                      expr, input_location);
12002       return error_mark_node;
12003     }
12004
12005   if (is_template)
12006     expr = lookup_template_function (expr, template_args);
12007
12008   if (expr == error_mark_node && complain & tf_error)
12009     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12010                                  expr, input_location);
12011   else if (TYPE_P (scope))
12012     {
12013       expr = (adjust_result_of_qualified_name_lookup
12014               (expr, scope, current_class_type));
12015       expr = (finish_qualified_id_expr
12016               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12017                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12018                /*template_arg_p=*/false));
12019     }
12020
12021   /* Expressions do not generally have reference type.  */
12022   if (TREE_CODE (expr) != SCOPE_REF
12023       /* However, if we're about to form a pointer-to-member, we just
12024          want the referenced member referenced.  */
12025       && TREE_CODE (expr) != OFFSET_REF)
12026     expr = convert_from_reference (expr);
12027
12028   return expr;
12029 }
12030
12031 /* Like tsubst, but deals with expressions.  This function just replaces
12032    template parms; to finish processing the resultant expression, use
12033    tsubst_copy_and_build or tsubst_expr.  */
12034
12035 static tree
12036 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12037 {
12038   enum tree_code code;
12039   tree r;
12040
12041   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12042     return t;
12043
12044   code = TREE_CODE (t);
12045
12046   switch (code)
12047     {
12048     case PARM_DECL:
12049       r = retrieve_local_specialization (t);
12050
12051       if (r == NULL)
12052         {
12053           tree c;
12054
12055           /* We get here for a use of 'this' in an NSDMI.  */
12056           if (DECL_NAME (t) == this_identifier
12057               && at_function_scope_p ()
12058               && DECL_CONSTRUCTOR_P (current_function_decl))
12059             return current_class_ptr;
12060
12061           /* This can happen for a parameter name used later in a function
12062              declaration (such as in a late-specified return type).  Just
12063              make a dummy decl, since it's only used for its type.  */
12064           gcc_assert (cp_unevaluated_operand != 0);
12065           /* We copy T because want to tsubst the PARM_DECL only,
12066              not the following PARM_DECLs that are chained to T.  */
12067           c = copy_node (t);
12068           r = tsubst_decl (c, args, complain);
12069           /* Give it the template pattern as its context; its true context
12070              hasn't been instantiated yet and this is good enough for
12071              mangling.  */
12072           DECL_CONTEXT (r) = DECL_CONTEXT (t);
12073         }
12074       
12075       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12076         r = ARGUMENT_PACK_SELECT_ARG (r);
12077       mark_used (r);
12078       return r;
12079
12080     case CONST_DECL:
12081       {
12082         tree enum_type;
12083         tree v;
12084
12085         if (DECL_TEMPLATE_PARM_P (t))
12086           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12087         /* There is no need to substitute into namespace-scope
12088            enumerators.  */
12089         if (DECL_NAMESPACE_SCOPE_P (t))
12090           return t;
12091         /* If ARGS is NULL, then T is known to be non-dependent.  */
12092         if (args == NULL_TREE)
12093           return integral_constant_value (t);
12094
12095         /* Unfortunately, we cannot just call lookup_name here.
12096            Consider:
12097
12098              template <int I> int f() {
12099              enum E { a = I };
12100              struct S { void g() { E e = a; } };
12101              };
12102
12103            When we instantiate f<7>::S::g(), say, lookup_name is not
12104            clever enough to find f<7>::a.  */
12105         enum_type
12106           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
12107                               /*entering_scope=*/0);
12108
12109         for (v = TYPE_VALUES (enum_type);
12110              v != NULL_TREE;
12111              v = TREE_CHAIN (v))
12112           if (TREE_PURPOSE (v) == DECL_NAME (t))
12113             return TREE_VALUE (v);
12114
12115           /* We didn't find the name.  That should never happen; if
12116              name-lookup found it during preliminary parsing, we
12117              should find it again here during instantiation.  */
12118         gcc_unreachable ();
12119       }
12120       return t;
12121
12122     case FIELD_DECL:
12123       if (DECL_CONTEXT (t))
12124         {
12125           tree ctx;
12126
12127           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12128                                   /*entering_scope=*/1);
12129           if (ctx != DECL_CONTEXT (t))
12130             {
12131               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12132               if (!r)
12133                 {
12134                   if (complain & tf_error)
12135                     error ("using invalid field %qD", t);
12136                   return error_mark_node;
12137                 }
12138               return r;
12139             }
12140         }
12141
12142       return t;
12143
12144     case VAR_DECL:
12145     case FUNCTION_DECL:
12146       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12147           || local_variable_p (t))
12148         t = tsubst (t, args, complain, in_decl);
12149       mark_used (t);
12150       return t;
12151
12152     case NAMESPACE_DECL:
12153       return t;
12154
12155     case OVERLOAD:
12156       /* An OVERLOAD will always be a non-dependent overload set; an
12157          overload set from function scope will just be represented with an
12158          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12159       gcc_assert (!uses_template_parms (t));
12160       return t;
12161
12162     case BASELINK:
12163       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12164
12165     case TEMPLATE_DECL:
12166       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12167         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12168                        args, complain, in_decl);
12169       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12170         return tsubst (t, args, complain, in_decl);
12171       else if (DECL_CLASS_SCOPE_P (t)
12172                && uses_template_parms (DECL_CONTEXT (t)))
12173         {
12174           /* Template template argument like the following example need
12175              special treatment:
12176
12177                template <template <class> class TT> struct C {};
12178                template <class T> struct D {
12179                  template <class U> struct E {};
12180                  C<E> c;                                // #1
12181                };
12182                D<int> d;                                // #2
12183
12184              We are processing the template argument `E' in #1 for
12185              the template instantiation #2.  Originally, `E' is a
12186              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12187              have to substitute this with one having context `D<int>'.  */
12188
12189           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12190           return lookup_field (context, DECL_NAME(t), 0, false);
12191         }
12192       else
12193         /* Ordinary template template argument.  */
12194         return t;
12195
12196     case CAST_EXPR:
12197     case REINTERPRET_CAST_EXPR:
12198     case CONST_CAST_EXPR:
12199     case STATIC_CAST_EXPR:
12200     case DYNAMIC_CAST_EXPR:
12201     case IMPLICIT_CONV_EXPR:
12202     case CONVERT_EXPR:
12203     case NOP_EXPR:
12204       return build1
12205         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12206          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12207
12208     case SIZEOF_EXPR:
12209       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12210         {
12211
12212           tree expanded;
12213           int len = 0;
12214
12215           ++cp_unevaluated_operand;
12216           ++c_inhibit_evaluation_warnings;
12217           /* We only want to compute the number of arguments.  */
12218           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
12219                                             complain, in_decl);
12220           --cp_unevaluated_operand;
12221           --c_inhibit_evaluation_warnings;
12222
12223           if (TREE_CODE (expanded) == TREE_VEC)
12224             len = TREE_VEC_LENGTH (expanded);
12225
12226           if (expanded == error_mark_node)
12227             return error_mark_node;
12228           else if (PACK_EXPANSION_P (expanded)
12229                    || (TREE_CODE (expanded) == TREE_VEC
12230                        && len > 0
12231                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12232             {
12233               if (TREE_CODE (expanded) == TREE_VEC)
12234                 expanded = TREE_VEC_ELT (expanded, len - 1);
12235
12236               if (TYPE_P (expanded))
12237                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
12238                                                    complain & tf_error);
12239               else
12240                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12241                                                    complain & tf_error);
12242             }
12243           else
12244             return build_int_cst (size_type_node, len);
12245         }
12246       /* Fall through */
12247
12248     case INDIRECT_REF:
12249     case NEGATE_EXPR:
12250     case TRUTH_NOT_EXPR:
12251     case BIT_NOT_EXPR:
12252     case ADDR_EXPR:
12253     case UNARY_PLUS_EXPR:      /* Unary + */
12254     case ALIGNOF_EXPR:
12255     case AT_ENCODE_EXPR:
12256     case ARROW_EXPR:
12257     case THROW_EXPR:
12258     case TYPEID_EXPR:
12259     case REALPART_EXPR:
12260     case IMAGPART_EXPR:
12261       return build1
12262         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12263          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12264
12265     case COMPONENT_REF:
12266       {
12267         tree object;
12268         tree name;
12269
12270         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12271         name = TREE_OPERAND (t, 1);
12272         if (TREE_CODE (name) == BIT_NOT_EXPR)
12273           {
12274             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12275                                 complain, in_decl);
12276             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12277           }
12278         else if (TREE_CODE (name) == SCOPE_REF
12279                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12280           {
12281             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12282                                      complain, in_decl);
12283             name = TREE_OPERAND (name, 1);
12284             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12285                                 complain, in_decl);
12286             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12287             name = build_qualified_name (/*type=*/NULL_TREE,
12288                                          base, name,
12289                                          /*template_p=*/false);
12290           }
12291         else if (BASELINK_P (name))
12292           name = tsubst_baselink (name,
12293                                   non_reference (TREE_TYPE (object)),
12294                                   args, complain,
12295                                   in_decl);
12296         else
12297           name = tsubst_copy (name, args, complain, in_decl);
12298         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12299       }
12300
12301     case PLUS_EXPR:
12302     case MINUS_EXPR:
12303     case MULT_EXPR:
12304     case TRUNC_DIV_EXPR:
12305     case CEIL_DIV_EXPR:
12306     case FLOOR_DIV_EXPR:
12307     case ROUND_DIV_EXPR:
12308     case EXACT_DIV_EXPR:
12309     case BIT_AND_EXPR:
12310     case BIT_IOR_EXPR:
12311     case BIT_XOR_EXPR:
12312     case TRUNC_MOD_EXPR:
12313     case FLOOR_MOD_EXPR:
12314     case TRUTH_ANDIF_EXPR:
12315     case TRUTH_ORIF_EXPR:
12316     case TRUTH_AND_EXPR:
12317     case TRUTH_OR_EXPR:
12318     case RSHIFT_EXPR:
12319     case LSHIFT_EXPR:
12320     case RROTATE_EXPR:
12321     case LROTATE_EXPR:
12322     case EQ_EXPR:
12323     case NE_EXPR:
12324     case MAX_EXPR:
12325     case MIN_EXPR:
12326     case LE_EXPR:
12327     case GE_EXPR:
12328     case LT_EXPR:
12329     case GT_EXPR:
12330     case COMPOUND_EXPR:
12331     case DOTSTAR_EXPR:
12332     case MEMBER_REF:
12333     case PREDECREMENT_EXPR:
12334     case PREINCREMENT_EXPR:
12335     case POSTDECREMENT_EXPR:
12336     case POSTINCREMENT_EXPR:
12337       return build_nt
12338         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12339          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12340
12341     case SCOPE_REF:
12342       return build_qualified_name (/*type=*/NULL_TREE,
12343                                    tsubst_copy (TREE_OPERAND (t, 0),
12344                                                 args, complain, in_decl),
12345                                    tsubst_copy (TREE_OPERAND (t, 1),
12346                                                 args, complain, in_decl),
12347                                    QUALIFIED_NAME_IS_TEMPLATE (t));
12348
12349     case ARRAY_REF:
12350       return build_nt
12351         (ARRAY_REF,
12352          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12353          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12354          NULL_TREE, NULL_TREE);
12355
12356     case CALL_EXPR:
12357       {
12358         int n = VL_EXP_OPERAND_LENGTH (t);
12359         tree result = build_vl_exp (CALL_EXPR, n);
12360         int i;
12361         for (i = 0; i < n; i++)
12362           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12363                                              complain, in_decl);
12364         return result;
12365       }
12366
12367     case COND_EXPR:
12368     case MODOP_EXPR:
12369     case PSEUDO_DTOR_EXPR:
12370       {
12371         r = build_nt
12372           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12373            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12374            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12375         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12376         return r;
12377       }
12378
12379     case NEW_EXPR:
12380       {
12381         r = build_nt
12382         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12383          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12384          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12385         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12386         return r;
12387       }
12388
12389     case DELETE_EXPR:
12390       {
12391         r = build_nt
12392         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12393          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12394         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12395         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12396         return r;
12397       }
12398
12399     case TEMPLATE_ID_EXPR:
12400       {
12401         /* Substituted template arguments */
12402         tree fn = TREE_OPERAND (t, 0);
12403         tree targs = TREE_OPERAND (t, 1);
12404
12405         fn = tsubst_copy (fn, args, complain, in_decl);
12406         if (targs)
12407           targs = tsubst_template_args (targs, args, complain, in_decl);
12408
12409         return lookup_template_function (fn, targs);
12410       }
12411
12412     case TREE_LIST:
12413       {
12414         tree purpose, value, chain;
12415
12416         if (t == void_list_node)
12417           return t;
12418
12419         purpose = TREE_PURPOSE (t);
12420         if (purpose)
12421           purpose = tsubst_copy (purpose, args, complain, in_decl);
12422         value = TREE_VALUE (t);
12423         if (value)
12424           value = tsubst_copy (value, args, complain, in_decl);
12425         chain = TREE_CHAIN (t);
12426         if (chain && chain != void_type_node)
12427           chain = tsubst_copy (chain, args, complain, in_decl);
12428         if (purpose == TREE_PURPOSE (t)
12429             && value == TREE_VALUE (t)
12430             && chain == TREE_CHAIN (t))
12431           return t;
12432         return tree_cons (purpose, value, chain);
12433       }
12434
12435     case RECORD_TYPE:
12436     case UNION_TYPE:
12437     case ENUMERAL_TYPE:
12438     case INTEGER_TYPE:
12439     case TEMPLATE_TYPE_PARM:
12440     case TEMPLATE_TEMPLATE_PARM:
12441     case BOUND_TEMPLATE_TEMPLATE_PARM:
12442     case TEMPLATE_PARM_INDEX:
12443     case POINTER_TYPE:
12444     case REFERENCE_TYPE:
12445     case OFFSET_TYPE:
12446     case FUNCTION_TYPE:
12447     case METHOD_TYPE:
12448     case ARRAY_TYPE:
12449     case TYPENAME_TYPE:
12450     case UNBOUND_CLASS_TEMPLATE:
12451     case TYPEOF_TYPE:
12452     case DECLTYPE_TYPE:
12453     case TYPE_DECL:
12454       return tsubst (t, args, complain, in_decl);
12455
12456     case IDENTIFIER_NODE:
12457       if (IDENTIFIER_TYPENAME_P (t))
12458         {
12459           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12460           return mangle_conv_op_name_for_type (new_type);
12461         }
12462       else
12463         return t;
12464
12465     case CONSTRUCTOR:
12466       /* This is handled by tsubst_copy_and_build.  */
12467       gcc_unreachable ();
12468
12469     case VA_ARG_EXPR:
12470       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12471                                           in_decl),
12472                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12473
12474     case CLEANUP_POINT_EXPR:
12475       /* We shouldn't have built any of these during initial template
12476          generation.  Instead, they should be built during instantiation
12477          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12478       gcc_unreachable ();
12479
12480     case OFFSET_REF:
12481       r = build2
12482         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12483          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12484          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12485       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12486       mark_used (TREE_OPERAND (r, 1));
12487       return r;
12488
12489     case EXPR_PACK_EXPANSION:
12490       error ("invalid use of pack expansion expression");
12491       return error_mark_node;
12492
12493     case NONTYPE_ARGUMENT_PACK:
12494       error ("use %<...%> to expand argument pack");
12495       return error_mark_node;
12496
12497     case INTEGER_CST:
12498     case REAL_CST:
12499     case STRING_CST:
12500     case COMPLEX_CST:
12501       {
12502         /* Instantiate any typedefs in the type.  */
12503         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12504         r = fold_convert (type, t);
12505         gcc_assert (TREE_CODE (r) == code);
12506         return r;
12507       }
12508
12509     case PTRMEM_CST:
12510       /* These can sometimes show up in a partial instantiation, but never
12511          involve template parms.  */
12512       gcc_assert (!uses_template_parms (t));
12513       return t;
12514
12515     default:
12516       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12517       gcc_checking_assert (false);
12518       return t;
12519     }
12520 }
12521
12522 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12523
12524 static tree
12525 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12526                     tree in_decl)
12527 {
12528   tree new_clauses = NULL, nc, oc;
12529
12530   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12531     {
12532       nc = copy_node (oc);
12533       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12534       new_clauses = nc;
12535
12536       switch (OMP_CLAUSE_CODE (nc))
12537         {
12538         case OMP_CLAUSE_LASTPRIVATE:
12539           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12540             {
12541               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12542               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12543                            in_decl, /*integral_constant_expression_p=*/false);
12544               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12545                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12546             }
12547           /* FALLTHRU */
12548         case OMP_CLAUSE_PRIVATE:
12549         case OMP_CLAUSE_SHARED:
12550         case OMP_CLAUSE_FIRSTPRIVATE:
12551         case OMP_CLAUSE_REDUCTION:
12552         case OMP_CLAUSE_COPYIN:
12553         case OMP_CLAUSE_COPYPRIVATE:
12554         case OMP_CLAUSE_IF:
12555         case OMP_CLAUSE_NUM_THREADS:
12556         case OMP_CLAUSE_SCHEDULE:
12557         case OMP_CLAUSE_COLLAPSE:
12558         case OMP_CLAUSE_FINAL:
12559           OMP_CLAUSE_OPERAND (nc, 0)
12560             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12561                            in_decl, /*integral_constant_expression_p=*/false);
12562           break;
12563         case OMP_CLAUSE_NOWAIT:
12564         case OMP_CLAUSE_ORDERED:
12565         case OMP_CLAUSE_DEFAULT:
12566         case OMP_CLAUSE_UNTIED:
12567         case OMP_CLAUSE_MERGEABLE:
12568           break;
12569         default:
12570           gcc_unreachable ();
12571         }
12572     }
12573
12574   return finish_omp_clauses (nreverse (new_clauses));
12575 }
12576
12577 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12578
12579 static tree
12580 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12581                           tree in_decl)
12582 {
12583 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12584
12585   tree purpose, value, chain;
12586
12587   if (t == NULL)
12588     return t;
12589
12590   if (TREE_CODE (t) != TREE_LIST)
12591     return tsubst_copy_and_build (t, args, complain, in_decl,
12592                                   /*function_p=*/false,
12593                                   /*integral_constant_expression_p=*/false);
12594
12595   if (t == void_list_node)
12596     return t;
12597
12598   purpose = TREE_PURPOSE (t);
12599   if (purpose)
12600     purpose = RECUR (purpose);
12601   value = TREE_VALUE (t);
12602   if (value && TREE_CODE (value) != LABEL_DECL)
12603     value = RECUR (value);
12604   chain = TREE_CHAIN (t);
12605   if (chain && chain != void_type_node)
12606     chain = RECUR (chain);
12607   return tree_cons (purpose, value, chain);
12608 #undef RECUR
12609 }
12610
12611 /* Substitute one OMP_FOR iterator.  */
12612
12613 static void
12614 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12615                          tree condv, tree incrv, tree *clauses,
12616                          tree args, tsubst_flags_t complain, tree in_decl,
12617                          bool integral_constant_expression_p)
12618 {
12619 #define RECUR(NODE)                             \
12620   tsubst_expr ((NODE), args, complain, in_decl, \
12621                integral_constant_expression_p)
12622   tree decl, init, cond, incr, auto_node;
12623
12624   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12625   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12626   decl = RECUR (TREE_OPERAND (init, 0));
12627   init = TREE_OPERAND (init, 1);
12628   auto_node = type_uses_auto (TREE_TYPE (decl));
12629   if (auto_node && init)
12630     {
12631       tree init_expr = init;
12632       if (TREE_CODE (init_expr) == DECL_EXPR)
12633         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12634       init_expr = RECUR (init_expr);
12635       TREE_TYPE (decl)
12636         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12637     }
12638   gcc_assert (!type_dependent_expression_p (decl));
12639
12640   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12641     {
12642       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12643       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12644       if (TREE_CODE (incr) == MODIFY_EXPR)
12645         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12646                                     RECUR (TREE_OPERAND (incr, 1)),
12647                                     complain);
12648       else
12649         incr = RECUR (incr);
12650       TREE_VEC_ELT (declv, i) = decl;
12651       TREE_VEC_ELT (initv, i) = init;
12652       TREE_VEC_ELT (condv, i) = cond;
12653       TREE_VEC_ELT (incrv, i) = incr;
12654       return;
12655     }
12656
12657   if (init && TREE_CODE (init) != DECL_EXPR)
12658     {
12659       tree c;
12660       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12661         {
12662           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12663                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12664               && OMP_CLAUSE_DECL (c) == decl)
12665             break;
12666           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12667                    && OMP_CLAUSE_DECL (c) == decl)
12668             error ("iteration variable %qD should not be firstprivate", decl);
12669           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12670                    && OMP_CLAUSE_DECL (c) == decl)
12671             error ("iteration variable %qD should not be reduction", decl);
12672         }
12673       if (c == NULL)
12674         {
12675           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12676           OMP_CLAUSE_DECL (c) = decl;
12677           c = finish_omp_clauses (c);
12678           if (c)
12679             {
12680               OMP_CLAUSE_CHAIN (c) = *clauses;
12681               *clauses = c;
12682             }
12683         }
12684     }
12685   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12686   if (COMPARISON_CLASS_P (cond))
12687     cond = build2 (TREE_CODE (cond), boolean_type_node,
12688                    RECUR (TREE_OPERAND (cond, 0)),
12689                    RECUR (TREE_OPERAND (cond, 1)));
12690   else
12691     cond = RECUR (cond);
12692   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12693   switch (TREE_CODE (incr))
12694     {
12695     case PREINCREMENT_EXPR:
12696     case PREDECREMENT_EXPR:
12697     case POSTINCREMENT_EXPR:
12698     case POSTDECREMENT_EXPR:
12699       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12700                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12701       break;
12702     case MODIFY_EXPR:
12703       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12704           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12705         {
12706           tree rhs = TREE_OPERAND (incr, 1);
12707           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12708                          RECUR (TREE_OPERAND (incr, 0)),
12709                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12710                                  RECUR (TREE_OPERAND (rhs, 0)),
12711                                  RECUR (TREE_OPERAND (rhs, 1))));
12712         }
12713       else
12714         incr = RECUR (incr);
12715       break;
12716     case MODOP_EXPR:
12717       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12718           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12719         {
12720           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12721           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12722                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12723                                  TREE_TYPE (decl), lhs,
12724                                  RECUR (TREE_OPERAND (incr, 2))));
12725         }
12726       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12727                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12728                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12729         {
12730           tree rhs = TREE_OPERAND (incr, 2);
12731           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12732                          RECUR (TREE_OPERAND (incr, 0)),
12733                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12734                                  RECUR (TREE_OPERAND (rhs, 0)),
12735                                  RECUR (TREE_OPERAND (rhs, 1))));
12736         }
12737       else
12738         incr = RECUR (incr);
12739       break;
12740     default:
12741       incr = RECUR (incr);
12742       break;
12743     }
12744
12745   TREE_VEC_ELT (declv, i) = decl;
12746   TREE_VEC_ELT (initv, i) = init;
12747   TREE_VEC_ELT (condv, i) = cond;
12748   TREE_VEC_ELT (incrv, i) = incr;
12749 #undef RECUR
12750 }
12751
12752 /* Like tsubst_copy for expressions, etc. but also does semantic
12753    processing.  */
12754
12755 static tree
12756 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12757              bool integral_constant_expression_p)
12758 {
12759 #define RECUR(NODE)                             \
12760   tsubst_expr ((NODE), args, complain, in_decl, \
12761                integral_constant_expression_p)
12762
12763   tree stmt, tmp;
12764
12765   if (t == NULL_TREE || t == error_mark_node)
12766     return t;
12767
12768   if (EXPR_HAS_LOCATION (t))
12769     input_location = EXPR_LOCATION (t);
12770   if (STATEMENT_CODE_P (TREE_CODE (t)))
12771     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12772
12773   switch (TREE_CODE (t))
12774     {
12775     case STATEMENT_LIST:
12776       {
12777         tree_stmt_iterator i;
12778         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12779           RECUR (tsi_stmt (i));
12780         break;
12781       }
12782
12783     case CTOR_INITIALIZER:
12784       finish_mem_initializers (tsubst_initializer_list
12785                                (TREE_OPERAND (t, 0), args));
12786       break;
12787
12788     case RETURN_EXPR:
12789       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12790       break;
12791
12792     case EXPR_STMT:
12793       tmp = RECUR (EXPR_STMT_EXPR (t));
12794       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12795         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12796       else
12797         finish_expr_stmt (tmp);
12798       break;
12799
12800     case USING_STMT:
12801       do_using_directive (USING_STMT_NAMESPACE (t));
12802       break;
12803
12804     case DECL_EXPR:
12805       {
12806         tree decl, pattern_decl;
12807         tree init;
12808
12809         pattern_decl = decl = DECL_EXPR_DECL (t);
12810         if (TREE_CODE (decl) == LABEL_DECL)
12811           finish_label_decl (DECL_NAME (decl));
12812         else if (TREE_CODE (decl) == USING_DECL)
12813           {
12814             tree scope = USING_DECL_SCOPE (decl);
12815             tree name = DECL_NAME (decl);
12816             tree decl;
12817
12818             scope = tsubst (scope, args, complain, in_decl);
12819             decl = lookup_qualified_name (scope, name,
12820                                           /*is_type_p=*/false,
12821                                           /*complain=*/false);
12822             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12823               qualified_name_lookup_error (scope, name, decl, input_location);
12824             else
12825               do_local_using_decl (decl, scope, name);
12826           }
12827         else
12828           {
12829             init = DECL_INITIAL (decl);
12830             decl = tsubst (decl, args, complain, in_decl);
12831             if (decl != error_mark_node)
12832               {
12833                 /* By marking the declaration as instantiated, we avoid
12834                    trying to instantiate it.  Since instantiate_decl can't
12835                    handle local variables, and since we've already done
12836                    all that needs to be done, that's the right thing to
12837                    do.  */
12838                 if (TREE_CODE (decl) == VAR_DECL)
12839                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12840                 if (TREE_CODE (decl) == VAR_DECL
12841                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12842                   /* Anonymous aggregates are a special case.  */
12843                   finish_anon_union (decl);
12844                 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
12845                   {
12846                     DECL_CONTEXT (decl) = current_function_decl;
12847                     insert_capture_proxy (decl);
12848                   }
12849                 else
12850                   {
12851                     int const_init = false;
12852                     maybe_push_decl (decl);
12853                     if (TREE_CODE (decl) == VAR_DECL
12854                         && DECL_PRETTY_FUNCTION_P (decl))
12855                       {
12856                         /* For __PRETTY_FUNCTION__ we have to adjust the
12857                            initializer.  */
12858                         const char *const name
12859                           = cxx_printable_name (current_function_decl, 2);
12860                         init = cp_fname_init (name, &TREE_TYPE (decl));
12861                       }
12862                     else
12863                       {
12864                         tree t = RECUR (init);
12865
12866                         if (init && !t)
12867                           {
12868                             /* If we had an initializer but it
12869                                instantiated to nothing,
12870                                value-initialize the object.  This will
12871                                only occur when the initializer was a
12872                                pack expansion where the parameter packs
12873                                used in that expansion were of length
12874                                zero.  */
12875                             init = build_value_init (TREE_TYPE (decl),
12876                                                      complain);
12877                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12878                               init = get_target_expr_sfinae (init, complain);
12879                           }
12880                         else
12881                           init = t;
12882                       }
12883
12884                     if (TREE_CODE (decl) == VAR_DECL)
12885                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12886                                     (pattern_decl));
12887                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12888                   }
12889               }
12890           }
12891
12892         /* A DECL_EXPR can also be used as an expression, in the condition
12893            clause of an if/for/while construct.  */
12894         return decl;
12895       }
12896
12897     case FOR_STMT:
12898       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12899       RECUR (FOR_INIT_STMT (t));
12900       finish_for_init_stmt (stmt);
12901       tmp = RECUR (FOR_COND (t));
12902       finish_for_cond (tmp, stmt);
12903       tmp = RECUR (FOR_EXPR (t));
12904       finish_for_expr (tmp, stmt);
12905       RECUR (FOR_BODY (t));
12906       finish_for_stmt (stmt);
12907       break;
12908
12909     case RANGE_FOR_STMT:
12910       {
12911         tree decl, expr;
12912         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12913         decl = RANGE_FOR_DECL (t);
12914         decl = tsubst (decl, args, complain, in_decl);
12915         maybe_push_decl (decl);
12916         expr = RECUR (RANGE_FOR_EXPR (t));
12917         stmt = cp_convert_range_for (stmt, decl, expr);
12918         RECUR (RANGE_FOR_BODY (t));
12919         finish_for_stmt (stmt);
12920       }
12921       break;
12922
12923     case WHILE_STMT:
12924       stmt = begin_while_stmt ();
12925       tmp = RECUR (WHILE_COND (t));
12926       finish_while_stmt_cond (tmp, stmt);
12927       RECUR (WHILE_BODY (t));
12928       finish_while_stmt (stmt);
12929       break;
12930
12931     case DO_STMT:
12932       stmt = begin_do_stmt ();
12933       RECUR (DO_BODY (t));
12934       finish_do_body (stmt);
12935       tmp = RECUR (DO_COND (t));
12936       finish_do_stmt (tmp, stmt);
12937       break;
12938
12939     case IF_STMT:
12940       stmt = begin_if_stmt ();
12941       tmp = RECUR (IF_COND (t));
12942       finish_if_stmt_cond (tmp, stmt);
12943       RECUR (THEN_CLAUSE (t));
12944       finish_then_clause (stmt);
12945
12946       if (ELSE_CLAUSE (t))
12947         {
12948           begin_else_clause (stmt);
12949           RECUR (ELSE_CLAUSE (t));
12950           finish_else_clause (stmt);
12951         }
12952
12953       finish_if_stmt (stmt);
12954       break;
12955
12956     case BIND_EXPR:
12957       if (BIND_EXPR_BODY_BLOCK (t))
12958         stmt = begin_function_body ();
12959       else
12960         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12961                                     ? BCS_TRY_BLOCK : 0);
12962
12963       RECUR (BIND_EXPR_BODY (t));
12964
12965       if (BIND_EXPR_BODY_BLOCK (t))
12966         finish_function_body (stmt);
12967       else
12968         finish_compound_stmt (stmt);
12969       break;
12970
12971     case BREAK_STMT:
12972       finish_break_stmt ();
12973       break;
12974
12975     case CONTINUE_STMT:
12976       finish_continue_stmt ();
12977       break;
12978
12979     case SWITCH_STMT:
12980       stmt = begin_switch_stmt ();
12981       tmp = RECUR (SWITCH_STMT_COND (t));
12982       finish_switch_cond (tmp, stmt);
12983       RECUR (SWITCH_STMT_BODY (t));
12984       finish_switch_stmt (stmt);
12985       break;
12986
12987     case CASE_LABEL_EXPR:
12988       finish_case_label (EXPR_LOCATION (t),
12989                          RECUR (CASE_LOW (t)),
12990                          RECUR (CASE_HIGH (t)));
12991       break;
12992
12993     case LABEL_EXPR:
12994       {
12995         tree decl = LABEL_EXPR_LABEL (t);
12996         tree label;
12997
12998         label = finish_label_stmt (DECL_NAME (decl));
12999         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13000           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13001       }
13002       break;
13003
13004     case GOTO_EXPR:
13005       tmp = GOTO_DESTINATION (t);
13006       if (TREE_CODE (tmp) != LABEL_DECL)
13007         /* Computed goto's must be tsubst'd into.  On the other hand,
13008            non-computed gotos must not be; the identifier in question
13009            will have no binding.  */
13010         tmp = RECUR (tmp);
13011       else
13012         tmp = DECL_NAME (tmp);
13013       finish_goto_stmt (tmp);
13014       break;
13015
13016     case ASM_EXPR:
13017       tmp = finish_asm_stmt
13018         (ASM_VOLATILE_P (t),
13019          RECUR (ASM_STRING (t)),
13020          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
13021          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
13022          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
13023          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
13024       {
13025         tree asm_expr = tmp;
13026         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13027           asm_expr = TREE_OPERAND (asm_expr, 0);
13028         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13029       }
13030       break;
13031
13032     case TRY_BLOCK:
13033       if (CLEANUP_P (t))
13034         {
13035           stmt = begin_try_block ();
13036           RECUR (TRY_STMTS (t));
13037           finish_cleanup_try_block (stmt);
13038           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13039         }
13040       else
13041         {
13042           tree compound_stmt = NULL_TREE;
13043
13044           if (FN_TRY_BLOCK_P (t))
13045             stmt = begin_function_try_block (&compound_stmt);
13046           else
13047             stmt = begin_try_block ();
13048
13049           RECUR (TRY_STMTS (t));
13050
13051           if (FN_TRY_BLOCK_P (t))
13052             finish_function_try_block (stmt);
13053           else
13054             finish_try_block (stmt);
13055
13056           RECUR (TRY_HANDLERS (t));
13057           if (FN_TRY_BLOCK_P (t))
13058             finish_function_handler_sequence (stmt, compound_stmt);
13059           else
13060             finish_handler_sequence (stmt);
13061         }
13062       break;
13063
13064     case HANDLER:
13065       {
13066         tree decl = HANDLER_PARMS (t);
13067
13068         if (decl)
13069           {
13070             decl = tsubst (decl, args, complain, in_decl);
13071             /* Prevent instantiate_decl from trying to instantiate
13072                this variable.  We've already done all that needs to be
13073                done.  */
13074             if (decl != error_mark_node)
13075               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13076           }
13077         stmt = begin_handler ();
13078         finish_handler_parms (decl, stmt);
13079         RECUR (HANDLER_BODY (t));
13080         finish_handler (stmt);
13081       }
13082       break;
13083
13084     case TAG_DEFN:
13085       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13086       break;
13087
13088     case STATIC_ASSERT:
13089       {
13090         tree condition = 
13091           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
13092                        args,
13093                        complain, in_decl,
13094                        /*integral_constant_expression_p=*/true);
13095         finish_static_assert (condition,
13096                               STATIC_ASSERT_MESSAGE (t),
13097                               STATIC_ASSERT_SOURCE_LOCATION (t),
13098                               /*member_p=*/false);
13099       }
13100       break;
13101
13102     case OMP_PARALLEL:
13103       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
13104                                 args, complain, in_decl);
13105       stmt = begin_omp_parallel ();
13106       RECUR (OMP_PARALLEL_BODY (t));
13107       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13108         = OMP_PARALLEL_COMBINED (t);
13109       break;
13110
13111     case OMP_TASK:
13112       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
13113                                 args, complain, in_decl);
13114       stmt = begin_omp_task ();
13115       RECUR (OMP_TASK_BODY (t));
13116       finish_omp_task (tmp, stmt);
13117       break;
13118
13119     case OMP_FOR:
13120       {
13121         tree clauses, body, pre_body;
13122         tree declv, initv, condv, incrv;
13123         int i;
13124
13125         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
13126                                       args, complain, in_decl);
13127         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13128         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13129         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13130         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13131
13132         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13133           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13134                                    &clauses, args, complain, in_decl,
13135                                    integral_constant_expression_p);
13136
13137         stmt = begin_omp_structured_block ();
13138
13139         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
13140           if (TREE_VEC_ELT (initv, i) == NULL
13141               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
13142             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
13143           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
13144             {
13145               tree init = RECUR (TREE_VEC_ELT (initv, i));
13146               gcc_assert (init == TREE_VEC_ELT (declv, i));
13147               TREE_VEC_ELT (initv, i) = NULL_TREE;
13148             }
13149           else
13150             {
13151               tree decl_expr = TREE_VEC_ELT (initv, i);
13152               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13153               gcc_assert (init != NULL);
13154               TREE_VEC_ELT (initv, i) = RECUR (init);
13155               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
13156               RECUR (decl_expr);
13157               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
13158             }
13159
13160         pre_body = push_stmt_list ();
13161         RECUR (OMP_FOR_PRE_BODY (t));
13162         pre_body = pop_stmt_list (pre_body);
13163
13164         body = push_stmt_list ();
13165         RECUR (OMP_FOR_BODY (t));
13166         body = pop_stmt_list (body);
13167
13168         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13169                             body, pre_body, clauses);
13170
13171         add_stmt (finish_omp_structured_block (stmt));
13172       }
13173       break;
13174
13175     case OMP_SECTIONS:
13176     case OMP_SINGLE:
13177       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13178       stmt = push_stmt_list ();
13179       RECUR (OMP_BODY (t));
13180       stmt = pop_stmt_list (stmt);
13181
13182       t = copy_node (t);
13183       OMP_BODY (t) = stmt;
13184       OMP_CLAUSES (t) = tmp;
13185       add_stmt (t);
13186       break;
13187
13188     case OMP_SECTION:
13189     case OMP_CRITICAL:
13190     case OMP_MASTER:
13191     case OMP_ORDERED:
13192       stmt = push_stmt_list ();
13193       RECUR (OMP_BODY (t));
13194       stmt = pop_stmt_list (stmt);
13195
13196       t = copy_node (t);
13197       OMP_BODY (t) = stmt;
13198       add_stmt (t);
13199       break;
13200
13201     case OMP_ATOMIC:
13202       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13203       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13204         {
13205           tree op1 = TREE_OPERAND (t, 1);
13206           tree rhs1 = NULL_TREE;
13207           tree lhs, rhs;
13208           if (TREE_CODE (op1) == COMPOUND_EXPR)
13209             {
13210               rhs1 = RECUR (TREE_OPERAND (op1, 0));
13211               op1 = TREE_OPERAND (op1, 1);
13212             }
13213           lhs = RECUR (TREE_OPERAND (op1, 0));
13214           rhs = RECUR (TREE_OPERAND (op1, 1));
13215           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13216                              NULL_TREE, NULL_TREE, rhs1);
13217         }
13218       else
13219         {
13220           tree op1 = TREE_OPERAND (t, 1);
13221           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13222           tree rhs1 = NULL_TREE;
13223           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13224           enum tree_code opcode = NOP_EXPR;
13225           if (code == OMP_ATOMIC_READ)
13226             {
13227               v = RECUR (TREE_OPERAND (op1, 0));
13228               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13229             }
13230           else if (code == OMP_ATOMIC_CAPTURE_OLD
13231                    || code == OMP_ATOMIC_CAPTURE_NEW)
13232             {
13233               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13234               v = RECUR (TREE_OPERAND (op1, 0));
13235               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13236               if (TREE_CODE (op11) == COMPOUND_EXPR)
13237                 {
13238                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
13239                   op11 = TREE_OPERAND (op11, 1);
13240                 }
13241               lhs = RECUR (TREE_OPERAND (op11, 0));
13242               rhs = RECUR (TREE_OPERAND (op11, 1));
13243               opcode = TREE_CODE (op11);
13244             }
13245           else
13246             {
13247               code = OMP_ATOMIC;
13248               lhs = RECUR (TREE_OPERAND (op1, 0));
13249               rhs = RECUR (TREE_OPERAND (op1, 1));
13250             }
13251           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13252         }
13253       break;
13254
13255     case TRANSACTION_EXPR:
13256       {
13257         int flags = 0;
13258         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13259         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13260
13261         if (TRANSACTION_EXPR_IS_STMT (t))
13262           {
13263             tree body = TRANSACTION_EXPR_BODY (t);
13264             tree noex = NULL_TREE;
13265             if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
13266               {
13267                 noex = MUST_NOT_THROW_COND (body);
13268                 if (noex == NULL_TREE)
13269                   noex = boolean_true_node;
13270                 body = TREE_OPERAND (body, 0);
13271               }
13272             stmt = begin_transaction_stmt (input_location, NULL, flags);
13273             RECUR (body);
13274             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
13275           }
13276         else
13277           {
13278             stmt = build_transaction_expr (EXPR_LOCATION (t),
13279                                            RECUR (TRANSACTION_EXPR_BODY (t)),
13280                                            flags, NULL_TREE);
13281             return stmt;
13282           }
13283       }
13284       break;
13285
13286     case MUST_NOT_THROW_EXPR:
13287       return build_must_not_throw_expr (RECUR (TREE_OPERAND (t, 0)),
13288                                         RECUR (MUST_NOT_THROW_COND (t)));
13289
13290     case EXPR_PACK_EXPANSION:
13291       error ("invalid use of pack expansion expression");
13292       return error_mark_node;
13293
13294     case NONTYPE_ARGUMENT_PACK:
13295       error ("use %<...%> to expand argument pack");
13296       return error_mark_node;
13297
13298     default:
13299       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13300
13301       return tsubst_copy_and_build (t, args, complain, in_decl,
13302                                     /*function_p=*/false,
13303                                     integral_constant_expression_p);
13304     }
13305
13306   return NULL_TREE;
13307 #undef RECUR
13308 }
13309
13310 /* T is a postfix-expression that is not being used in a function
13311    call.  Return the substituted version of T.  */
13312
13313 static tree
13314 tsubst_non_call_postfix_expression (tree t, tree args,
13315                                     tsubst_flags_t complain,
13316                                     tree in_decl)
13317 {
13318   if (TREE_CODE (t) == SCOPE_REF)
13319     t = tsubst_qualified_id (t, args, complain, in_decl,
13320                              /*done=*/false, /*address_p=*/false);
13321   else
13322     t = tsubst_copy_and_build (t, args, complain, in_decl,
13323                                /*function_p=*/false,
13324                                /*integral_constant_expression_p=*/false);
13325
13326   return t;
13327 }
13328
13329 /* Like tsubst but deals with expressions and performs semantic
13330    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
13331
13332 tree
13333 tsubst_copy_and_build (tree t,
13334                        tree args,
13335                        tsubst_flags_t complain,
13336                        tree in_decl,
13337                        bool function_p,
13338                        bool integral_constant_expression_p)
13339 {
13340 #define RECUR(NODE)                                             \
13341   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
13342                          /*function_p=*/false,                  \
13343                          integral_constant_expression_p)
13344
13345   tree op1;
13346
13347   if (t == NULL_TREE || t == error_mark_node)
13348     return t;
13349
13350   switch (TREE_CODE (t))
13351     {
13352     case USING_DECL:
13353       t = DECL_NAME (t);
13354       /* Fall through.  */
13355     case IDENTIFIER_NODE:
13356       {
13357         tree decl;
13358         cp_id_kind idk;
13359         bool non_integral_constant_expression_p;
13360         const char *error_msg;
13361
13362         if (IDENTIFIER_TYPENAME_P (t))
13363           {
13364             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13365             t = mangle_conv_op_name_for_type (new_type);
13366           }
13367
13368         /* Look up the name.  */
13369         decl = lookup_name (t);
13370
13371         /* By convention, expressions use ERROR_MARK_NODE to indicate
13372            failure, not NULL_TREE.  */
13373         if (decl == NULL_TREE)
13374           decl = error_mark_node;
13375
13376         decl = finish_id_expression (t, decl, NULL_TREE,
13377                                      &idk,
13378                                      integral_constant_expression_p,
13379           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx0x),
13380                                      &non_integral_constant_expression_p,
13381                                      /*template_p=*/false,
13382                                      /*done=*/true,
13383                                      /*address_p=*/false,
13384                                      /*template_arg_p=*/false,
13385                                      &error_msg,
13386                                      input_location);
13387         if (error_msg)
13388           error (error_msg);
13389         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13390           {
13391             if (complain & tf_error)
13392               unqualified_name_lookup_error (decl);
13393             decl = error_mark_node;
13394           }
13395         return decl;
13396       }
13397
13398     case TEMPLATE_ID_EXPR:
13399       {
13400         tree object;
13401         tree templ = RECUR (TREE_OPERAND (t, 0));
13402         tree targs = TREE_OPERAND (t, 1);
13403
13404         if (targs)
13405           targs = tsubst_template_args (targs, args, complain, in_decl);
13406
13407         if (TREE_CODE (templ) == COMPONENT_REF)
13408           {
13409             object = TREE_OPERAND (templ, 0);
13410             templ = TREE_OPERAND (templ, 1);
13411           }
13412         else
13413           object = NULL_TREE;
13414         templ = lookup_template_function (templ, targs);
13415
13416         if (object)
13417           return build3 (COMPONENT_REF, TREE_TYPE (templ),
13418                          object, templ, NULL_TREE);
13419         else
13420           return baselink_for_fns (templ);
13421       }
13422
13423     case INDIRECT_REF:
13424       {
13425         tree r = RECUR (TREE_OPERAND (t, 0));
13426
13427         if (REFERENCE_REF_P (t))
13428           {
13429             /* A type conversion to reference type will be enclosed in
13430                such an indirect ref, but the substitution of the cast
13431                will have also added such an indirect ref.  */
13432             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13433               r = convert_from_reference (r);
13434           }
13435         else
13436           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13437         return r;
13438       }
13439
13440     case NOP_EXPR:
13441       return build_nop
13442         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13443          RECUR (TREE_OPERAND (t, 0)));
13444
13445     case IMPLICIT_CONV_EXPR:
13446       {
13447         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13448         tree expr = RECUR (TREE_OPERAND (t, 0));
13449         int flags = LOOKUP_IMPLICIT;
13450         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13451           flags = LOOKUP_NORMAL;
13452         return perform_implicit_conversion_flags (type, expr, complain,
13453                                                   flags);
13454       }
13455
13456     case CONVERT_EXPR:
13457       return build1
13458         (CONVERT_EXPR,
13459          tsubst (TREE_TYPE (t), args, complain, in_decl),
13460          RECUR (TREE_OPERAND (t, 0)));
13461
13462     case CAST_EXPR:
13463     case REINTERPRET_CAST_EXPR:
13464     case CONST_CAST_EXPR:
13465     case DYNAMIC_CAST_EXPR:
13466     case STATIC_CAST_EXPR:
13467       {
13468         tree type;
13469         tree op;
13470
13471         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13472         if (integral_constant_expression_p
13473             && !cast_valid_in_integral_constant_expression_p (type))
13474           {
13475             if (complain & tf_error)
13476               error ("a cast to a type other than an integral or "
13477                      "enumeration type cannot appear in a constant-expression");
13478             return error_mark_node; 
13479           }
13480
13481         op = RECUR (TREE_OPERAND (t, 0));
13482
13483         switch (TREE_CODE (t))
13484           {
13485           case CAST_EXPR:
13486             return build_functional_cast (type, op, complain);
13487           case REINTERPRET_CAST_EXPR:
13488             return build_reinterpret_cast (type, op, complain);
13489           case CONST_CAST_EXPR:
13490             return build_const_cast (type, op, complain);
13491           case DYNAMIC_CAST_EXPR:
13492             return build_dynamic_cast (type, op, complain);
13493           case STATIC_CAST_EXPR:
13494             return build_static_cast (type, op, complain);
13495           default:
13496             gcc_unreachable ();
13497           }
13498       }
13499
13500     case POSTDECREMENT_EXPR:
13501     case POSTINCREMENT_EXPR:
13502       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13503                                                 args, complain, in_decl);
13504       return build_x_unary_op (TREE_CODE (t), op1, complain);
13505
13506     case PREDECREMENT_EXPR:
13507     case PREINCREMENT_EXPR:
13508     case NEGATE_EXPR:
13509     case BIT_NOT_EXPR:
13510     case ABS_EXPR:
13511     case TRUTH_NOT_EXPR:
13512     case UNARY_PLUS_EXPR:  /* Unary + */
13513     case REALPART_EXPR:
13514     case IMAGPART_EXPR:
13515       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13516                                complain);
13517
13518     case FIX_TRUNC_EXPR:
13519       return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
13520                                 0, complain);
13521
13522     case ADDR_EXPR:
13523       op1 = TREE_OPERAND (t, 0);
13524       if (TREE_CODE (op1) == LABEL_DECL)
13525         return finish_label_address_expr (DECL_NAME (op1),
13526                                           EXPR_LOCATION (op1));
13527       if (TREE_CODE (op1) == SCOPE_REF)
13528         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13529                                    /*done=*/true, /*address_p=*/true);
13530       else
13531         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13532                                                   in_decl);
13533       return build_x_unary_op (ADDR_EXPR, op1, complain);
13534
13535     case PLUS_EXPR:
13536     case MINUS_EXPR:
13537     case MULT_EXPR:
13538     case TRUNC_DIV_EXPR:
13539     case CEIL_DIV_EXPR:
13540     case FLOOR_DIV_EXPR:
13541     case ROUND_DIV_EXPR:
13542     case EXACT_DIV_EXPR:
13543     case BIT_AND_EXPR:
13544     case BIT_IOR_EXPR:
13545     case BIT_XOR_EXPR:
13546     case TRUNC_MOD_EXPR:
13547     case FLOOR_MOD_EXPR:
13548     case TRUTH_ANDIF_EXPR:
13549     case TRUTH_ORIF_EXPR:
13550     case TRUTH_AND_EXPR:
13551     case TRUTH_OR_EXPR:
13552     case RSHIFT_EXPR:
13553     case LSHIFT_EXPR:
13554     case RROTATE_EXPR:
13555     case LROTATE_EXPR:
13556     case EQ_EXPR:
13557     case NE_EXPR:
13558     case MAX_EXPR:
13559     case MIN_EXPR:
13560     case LE_EXPR:
13561     case GE_EXPR:
13562     case LT_EXPR:
13563     case GT_EXPR:
13564     case MEMBER_REF:
13565     case DOTSTAR_EXPR:
13566       {
13567         tree r = build_x_binary_op
13568           (TREE_CODE (t),
13569            RECUR (TREE_OPERAND (t, 0)),
13570            (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13571             ? ERROR_MARK
13572             : TREE_CODE (TREE_OPERAND (t, 0))),
13573            RECUR (TREE_OPERAND (t, 1)),
13574            (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13575             ? ERROR_MARK
13576             : TREE_CODE (TREE_OPERAND (t, 1))),
13577            /*overload=*/NULL,
13578            complain);
13579         if (EXPR_P (r) && TREE_NO_WARNING (t))
13580           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13581         return r;
13582       }
13583
13584     case SCOPE_REF:
13585       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13586                                   /*address_p=*/false);
13587     case ARRAY_REF:
13588       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13589                                                 args, complain, in_decl);
13590       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13591
13592     case SIZEOF_EXPR:
13593       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13594         return tsubst_copy (t, args, complain, in_decl);
13595       /* Fall through */
13596       
13597     case ALIGNOF_EXPR:
13598       op1 = TREE_OPERAND (t, 0);
13599       if (!args)
13600         {
13601           /* When there are no ARGS, we are trying to evaluate a
13602              non-dependent expression from the parser.  Trying to do
13603              the substitutions may not work.  */
13604           if (!TYPE_P (op1))
13605             op1 = TREE_TYPE (op1);
13606         }
13607       else
13608         {
13609           ++cp_unevaluated_operand;
13610           ++c_inhibit_evaluation_warnings;
13611           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13612                                        /*function_p=*/false,
13613                                        /*integral_constant_expression_p=*/false);
13614           --cp_unevaluated_operand;
13615           --c_inhibit_evaluation_warnings;
13616         }
13617       if (TYPE_P (op1))
13618         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
13619                                            complain & tf_error);
13620       else
13621         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
13622                                            complain & tf_error);
13623
13624     case AT_ENCODE_EXPR:
13625       {
13626         op1 = TREE_OPERAND (t, 0);
13627         ++cp_unevaluated_operand;
13628         ++c_inhibit_evaluation_warnings;
13629         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13630                                      /*function_p=*/false,
13631                                      /*integral_constant_expression_p=*/false);
13632         --cp_unevaluated_operand;
13633         --c_inhibit_evaluation_warnings;
13634         return objc_build_encode_expr (op1);
13635       }
13636
13637     case NOEXCEPT_EXPR:
13638       op1 = TREE_OPERAND (t, 0);
13639       ++cp_unevaluated_operand;
13640       ++c_inhibit_evaluation_warnings;
13641       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13642                                    /*function_p=*/false,
13643                                    /*integral_constant_expression_p=*/false);
13644       --cp_unevaluated_operand;
13645       --c_inhibit_evaluation_warnings;
13646       return finish_noexcept_expr (op1, complain);
13647
13648     case MODOP_EXPR:
13649       {
13650         tree r = build_x_modify_expr
13651           (RECUR (TREE_OPERAND (t, 0)),
13652            TREE_CODE (TREE_OPERAND (t, 1)),
13653            RECUR (TREE_OPERAND (t, 2)),
13654            complain);
13655         /* TREE_NO_WARNING must be set if either the expression was
13656            parenthesized or it uses an operator such as >>= rather
13657            than plain assignment.  In the former case, it was already
13658            set and must be copied.  In the latter case,
13659            build_x_modify_expr sets it and it must not be reset
13660            here.  */
13661         if (TREE_NO_WARNING (t))
13662           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13663         return r;
13664       }
13665
13666     case ARROW_EXPR:
13667       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13668                                                 args, complain, in_decl);
13669       /* Remember that there was a reference to this entity.  */
13670       if (DECL_P (op1))
13671         mark_used (op1);
13672       return build_x_arrow (op1);
13673
13674     case NEW_EXPR:
13675       {
13676         tree placement = RECUR (TREE_OPERAND (t, 0));
13677         tree init = RECUR (TREE_OPERAND (t, 3));
13678         VEC(tree,gc) *placement_vec;
13679         VEC(tree,gc) *init_vec;
13680         tree ret;
13681
13682         if (placement == NULL_TREE)
13683           placement_vec = NULL;
13684         else
13685           {
13686             placement_vec = make_tree_vector ();
13687             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13688               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13689           }
13690
13691         /* If there was an initializer in the original tree, but it
13692            instantiated to an empty list, then we should pass a
13693            non-NULL empty vector to tell build_new that it was an
13694            empty initializer() rather than no initializer.  This can
13695            only happen when the initializer is a pack expansion whose
13696            parameter packs are of length zero.  */
13697         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13698           init_vec = NULL;
13699         else
13700           {
13701             init_vec = make_tree_vector ();
13702             if (init == void_zero_node)
13703               gcc_assert (init_vec != NULL);
13704             else
13705               {
13706                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13707                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13708               }
13709           }
13710
13711         ret = build_new (&placement_vec,
13712                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13713                          RECUR (TREE_OPERAND (t, 2)),
13714                          &init_vec,
13715                          NEW_EXPR_USE_GLOBAL (t),
13716                          complain);
13717
13718         if (placement_vec != NULL)
13719           release_tree_vector (placement_vec);
13720         if (init_vec != NULL)
13721           release_tree_vector (init_vec);
13722
13723         return ret;
13724       }
13725
13726     case DELETE_EXPR:
13727      return delete_sanity
13728        (RECUR (TREE_OPERAND (t, 0)),
13729         RECUR (TREE_OPERAND (t, 1)),
13730         DELETE_EXPR_USE_VEC (t),
13731         DELETE_EXPR_USE_GLOBAL (t),
13732         complain);
13733
13734     case COMPOUND_EXPR:
13735       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13736                                     RECUR (TREE_OPERAND (t, 1)),
13737                                     complain);
13738
13739     case CALL_EXPR:
13740       {
13741         tree function;
13742         VEC(tree,gc) *call_args;
13743         unsigned int nargs, i;
13744         bool qualified_p;
13745         bool koenig_p;
13746         tree ret;
13747
13748         function = CALL_EXPR_FN (t);
13749         /* When we parsed the expression,  we determined whether or
13750            not Koenig lookup should be performed.  */
13751         koenig_p = KOENIG_LOOKUP_P (t);
13752         if (TREE_CODE (function) == SCOPE_REF)
13753           {
13754             qualified_p = true;
13755             function = tsubst_qualified_id (function, args, complain, in_decl,
13756                                             /*done=*/false,
13757                                             /*address_p=*/false);
13758           }
13759         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13760           {
13761             /* Do nothing; calling tsubst_copy_and_build on an identifier
13762                would incorrectly perform unqualified lookup again.
13763
13764                Note that we can also have an IDENTIFIER_NODE if the earlier
13765                unqualified lookup found a member function; in that case
13766                koenig_p will be false and we do want to do the lookup
13767                again to find the instantiated member function.
13768
13769                FIXME but doing that causes c++/15272, so we need to stop
13770                using IDENTIFIER_NODE in that situation.  */
13771             qualified_p = false;
13772           }
13773         else
13774           {
13775             if (TREE_CODE (function) == COMPONENT_REF)
13776               {
13777                 tree op = TREE_OPERAND (function, 1);
13778
13779                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13780                                || (BASELINK_P (op)
13781                                    && BASELINK_QUALIFIED_P (op)));
13782               }
13783             else
13784               qualified_p = false;
13785
13786             function = tsubst_copy_and_build (function, args, complain,
13787                                               in_decl,
13788                                               !qualified_p,
13789                                               integral_constant_expression_p);
13790
13791             if (BASELINK_P (function))
13792               qualified_p = true;
13793           }
13794
13795         nargs = call_expr_nargs (t);
13796         call_args = make_tree_vector ();
13797         for (i = 0; i < nargs; ++i)
13798           {
13799             tree arg = CALL_EXPR_ARG (t, i);
13800
13801             if (!PACK_EXPANSION_P (arg))
13802               VEC_safe_push (tree, gc, call_args,
13803                              RECUR (CALL_EXPR_ARG (t, i)));
13804             else
13805               {
13806                 /* Expand the pack expansion and push each entry onto
13807                    CALL_ARGS.  */
13808                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13809                 if (TREE_CODE (arg) == TREE_VEC)
13810                   {
13811                     unsigned int len, j;
13812
13813                     len = TREE_VEC_LENGTH (arg);
13814                     for (j = 0; j < len; ++j)
13815                       {
13816                         tree value = TREE_VEC_ELT (arg, j);
13817                         if (value != NULL_TREE)
13818                           value = convert_from_reference (value);
13819                         VEC_safe_push (tree, gc, call_args, value);
13820                       }
13821                   }
13822                 else
13823                   {
13824                     /* A partial substitution.  Add one entry.  */
13825                     VEC_safe_push (tree, gc, call_args, arg);
13826                   }
13827               }
13828           }
13829
13830         /* We do not perform argument-dependent lookup if normal
13831            lookup finds a non-function, in accordance with the
13832            expected resolution of DR 218.  */
13833         if (koenig_p
13834             && ((is_overloaded_fn (function)
13835                  /* If lookup found a member function, the Koenig lookup is
13836                     not appropriate, even if an unqualified-name was used
13837                     to denote the function.  */
13838                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13839                 || TREE_CODE (function) == IDENTIFIER_NODE)
13840             /* Only do this when substitution turns a dependent call
13841                into a non-dependent call.  */
13842             && type_dependent_expression_p_push (t)
13843             && !any_type_dependent_arguments_p (call_args))
13844           function = perform_koenig_lookup (function, call_args, false,
13845                                             tf_none);
13846
13847         if (TREE_CODE (function) == IDENTIFIER_NODE
13848             && !any_type_dependent_arguments_p (call_args))
13849           {
13850             if (koenig_p && (complain & tf_warning_or_error))
13851               {
13852                 /* For backwards compatibility and good diagnostics, try
13853                    the unqualified lookup again if we aren't in SFINAE
13854                    context.  */
13855                 tree unq = (tsubst_copy_and_build
13856                             (function, args, complain, in_decl, true,
13857                              integral_constant_expression_p));
13858                 if (unq == error_mark_node)
13859                   return error_mark_node;
13860
13861                 if (unq != function)
13862                   {
13863                     tree fn = unq;
13864                     if (TREE_CODE (fn) == INDIRECT_REF)
13865                       fn = TREE_OPERAND (fn, 0);
13866                     if (TREE_CODE (fn) == COMPONENT_REF)
13867                       fn = TREE_OPERAND (fn, 1);
13868                     if (is_overloaded_fn (fn))
13869                       fn = get_first_fn (fn);
13870                     permerror (EXPR_LOC_OR_HERE (t),
13871                                "%qD was not declared in this scope, "
13872                                "and no declarations were found by "
13873                                "argument-dependent lookup at the point "
13874                                "of instantiation", function);
13875                     if (!DECL_P (fn))
13876                       /* Can't say anything more.  */;
13877                     else if (DECL_CLASS_SCOPE_P (fn))
13878                       {
13879                         inform (EXPR_LOC_OR_HERE (t),
13880                                 "declarations in dependent base %qT are "
13881                                 "not found by unqualified lookup",
13882                                 DECL_CLASS_CONTEXT (fn));
13883                         if (current_class_ptr)
13884                           inform (EXPR_LOC_OR_HERE (t),
13885                                   "use %<this->%D%> instead", function);
13886                         else
13887                           inform (EXPR_LOC_OR_HERE (t),
13888                                   "use %<%T::%D%> instead",
13889                                   current_class_name, function);
13890                       }
13891                     else
13892                       inform (0, "%q+D declared here, later in the "
13893                                 "translation unit", fn);
13894                     function = unq;
13895                   }
13896               }
13897             if (TREE_CODE (function) == IDENTIFIER_NODE)
13898               {
13899                 unqualified_name_lookup_error (function);
13900                 release_tree_vector (call_args);
13901                 return error_mark_node;
13902               }
13903           }
13904
13905         /* Remember that there was a reference to this entity.  */
13906         if (DECL_P (function))
13907           mark_used (function);
13908
13909         if (TREE_CODE (function) == OFFSET_REF)
13910           ret = build_offset_ref_call_from_tree (function, &call_args);
13911         else if (TREE_CODE (function) == COMPONENT_REF)
13912           {
13913             tree instance = TREE_OPERAND (function, 0);
13914             tree fn = TREE_OPERAND (function, 1);
13915
13916             if (processing_template_decl
13917                 && (type_dependent_expression_p (instance)
13918                     || (!BASELINK_P (fn)
13919                         && TREE_CODE (fn) != FIELD_DECL)
13920                     || type_dependent_expression_p (fn)
13921                     || any_type_dependent_arguments_p (call_args)))
13922               ret = build_nt_call_vec (function, call_args);
13923             else if (!BASELINK_P (fn))
13924               ret = finish_call_expr (function, &call_args,
13925                                        /*disallow_virtual=*/false,
13926                                        /*koenig_p=*/false,
13927                                        complain);
13928             else
13929               ret = (build_new_method_call
13930                       (instance, fn,
13931                        &call_args, NULL_TREE,
13932                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13933                        /*fn_p=*/NULL,
13934                        complain));
13935           }
13936         else
13937           ret = finish_call_expr (function, &call_args,
13938                                   /*disallow_virtual=*/qualified_p,
13939                                   koenig_p,
13940                                   complain);
13941
13942         release_tree_vector (call_args);
13943
13944         return ret;
13945       }
13946
13947     case COND_EXPR:
13948       return build_x_conditional_expr
13949         (RECUR (TREE_OPERAND (t, 0)),
13950          RECUR (TREE_OPERAND (t, 1)),
13951          RECUR (TREE_OPERAND (t, 2)),
13952          complain);
13953
13954     case PSEUDO_DTOR_EXPR:
13955       return finish_pseudo_destructor_expr
13956         (RECUR (TREE_OPERAND (t, 0)),
13957          RECUR (TREE_OPERAND (t, 1)),
13958          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13959
13960     case TREE_LIST:
13961       {
13962         tree purpose, value, chain;
13963
13964         if (t == void_list_node)
13965           return t;
13966
13967         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13968             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13969           {
13970             /* We have pack expansions, so expand those and
13971                create a new list out of it.  */
13972             tree purposevec = NULL_TREE;
13973             tree valuevec = NULL_TREE;
13974             tree chain;
13975             int i, len = -1;
13976
13977             /* Expand the argument expressions.  */
13978             if (TREE_PURPOSE (t))
13979               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13980                                                  complain, in_decl);
13981             if (TREE_VALUE (t))
13982               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13983                                                complain, in_decl);
13984
13985             /* Build the rest of the list.  */
13986             chain = TREE_CHAIN (t);
13987             if (chain && chain != void_type_node)
13988               chain = RECUR (chain);
13989
13990             /* Determine the number of arguments.  */
13991             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13992               {
13993                 len = TREE_VEC_LENGTH (purposevec);
13994                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13995               }
13996             else if (TREE_CODE (valuevec) == TREE_VEC)
13997               len = TREE_VEC_LENGTH (valuevec);
13998             else
13999               {
14000                 /* Since we only performed a partial substitution into
14001                    the argument pack, we only return a single list
14002                    node.  */
14003                 if (purposevec == TREE_PURPOSE (t)
14004                     && valuevec == TREE_VALUE (t)
14005                     && chain == TREE_CHAIN (t))
14006                   return t;
14007
14008                 return tree_cons (purposevec, valuevec, chain);
14009               }
14010             
14011             /* Convert the argument vectors into a TREE_LIST */
14012             i = len;
14013             while (i > 0)
14014               {
14015                 /* Grab the Ith values.  */
14016                 i--;
14017                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
14018                                      : NULL_TREE;
14019                 value 
14020                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
14021                              : NULL_TREE;
14022
14023                 /* Build the list (backwards).  */
14024                 chain = tree_cons (purpose, value, chain);
14025               }
14026
14027             return chain;
14028           }
14029
14030         purpose = TREE_PURPOSE (t);
14031         if (purpose)
14032           purpose = RECUR (purpose);
14033         value = TREE_VALUE (t);
14034         if (value)
14035           value = RECUR (value);
14036         chain = TREE_CHAIN (t);
14037         if (chain && chain != void_type_node)
14038           chain = RECUR (chain);
14039         if (purpose == TREE_PURPOSE (t)
14040             && value == TREE_VALUE (t)
14041             && chain == TREE_CHAIN (t))
14042           return t;
14043         return tree_cons (purpose, value, chain);
14044       }
14045
14046     case COMPONENT_REF:
14047       {
14048         tree object;
14049         tree object_type;
14050         tree member;
14051
14052         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14053                                                      args, complain, in_decl);
14054         /* Remember that there was a reference to this entity.  */
14055         if (DECL_P (object))
14056           mark_used (object);
14057         object_type = TREE_TYPE (object);
14058
14059         member = TREE_OPERAND (t, 1);
14060         if (BASELINK_P (member))
14061           member = tsubst_baselink (member,
14062                                     non_reference (TREE_TYPE (object)),
14063                                     args, complain, in_decl);
14064         else
14065           member = tsubst_copy (member, args, complain, in_decl);
14066         if (member == error_mark_node)
14067           return error_mark_node;
14068
14069         if (type_dependent_expression_p (object))
14070           /* We can't do much here.  */;
14071         else if (!CLASS_TYPE_P (object_type))
14072           {
14073             if (SCALAR_TYPE_P (object_type))
14074               {
14075                 tree s = NULL_TREE;
14076                 tree dtor = member;
14077
14078                 if (TREE_CODE (dtor) == SCOPE_REF)
14079                   {
14080                     s = TREE_OPERAND (dtor, 0);
14081                     dtor = TREE_OPERAND (dtor, 1);
14082                   }
14083                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
14084                   {
14085                     dtor = TREE_OPERAND (dtor, 0);
14086                     if (TYPE_P (dtor))
14087                       return finish_pseudo_destructor_expr (object, s, dtor);
14088                   }
14089               }
14090           }
14091         else if (TREE_CODE (member) == SCOPE_REF
14092                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
14093           {
14094             /* Lookup the template functions now that we know what the
14095                scope is.  */
14096             tree scope = TREE_OPERAND (member, 0);
14097             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
14098             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
14099             member = lookup_qualified_name (scope, tmpl,
14100                                             /*is_type_p=*/false,
14101                                             /*complain=*/false);
14102             if (BASELINK_P (member))
14103               {
14104                 BASELINK_FUNCTIONS (member)
14105                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
14106                               args);
14107                 member = (adjust_result_of_qualified_name_lookup
14108                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
14109                            object_type));
14110               }
14111             else
14112               {
14113                 qualified_name_lookup_error (scope, tmpl, member,
14114                                              input_location);
14115                 return error_mark_node;
14116               }
14117           }
14118         else if (TREE_CODE (member) == SCOPE_REF
14119                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
14120                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
14121           {
14122             if (complain & tf_error)
14123               {
14124                 if (TYPE_P (TREE_OPERAND (member, 0)))
14125                   error ("%qT is not a class or namespace",
14126                          TREE_OPERAND (member, 0));
14127                 else
14128                   error ("%qD is not a class or namespace",
14129                          TREE_OPERAND (member, 0));
14130               }
14131             return error_mark_node;
14132           }
14133         else if (TREE_CODE (member) == FIELD_DECL)
14134           return finish_non_static_data_member (member, object, NULL_TREE);
14135
14136         return finish_class_member_access_expr (object, member,
14137                                                 /*template_p=*/false,
14138                                                 complain);
14139       }
14140
14141     case THROW_EXPR:
14142       return build_throw
14143         (RECUR (TREE_OPERAND (t, 0)));
14144
14145     case CONSTRUCTOR:
14146       {
14147         VEC(constructor_elt,gc) *n;
14148         constructor_elt *ce;
14149         unsigned HOST_WIDE_INT idx;
14150         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14151         bool process_index_p;
14152         int newlen;
14153         bool need_copy_p = false;
14154         tree r;
14155
14156         if (type == error_mark_node)
14157           return error_mark_node;
14158
14159         /* digest_init will do the wrong thing if we let it.  */
14160         if (type && TYPE_PTRMEMFUNC_P (type))
14161           return t;
14162
14163         /* We do not want to process the index of aggregate
14164            initializers as they are identifier nodes which will be
14165            looked up by digest_init.  */
14166         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
14167
14168         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
14169         newlen = VEC_length (constructor_elt, n);
14170         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
14171           {
14172             if (ce->index && process_index_p)
14173               ce->index = RECUR (ce->index);
14174
14175             if (PACK_EXPANSION_P (ce->value))
14176               {
14177                 /* Substitute into the pack expansion.  */
14178                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
14179                                                   in_decl);
14180
14181                 if (ce->value == error_mark_node
14182                     || PACK_EXPANSION_P (ce->value))
14183                   ;
14184                 else if (TREE_VEC_LENGTH (ce->value) == 1)
14185                   /* Just move the argument into place.  */
14186                   ce->value = TREE_VEC_ELT (ce->value, 0);
14187                 else
14188                   {
14189                     /* Update the length of the final CONSTRUCTOR
14190                        arguments vector, and note that we will need to
14191                        copy.*/
14192                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14193                     need_copy_p = true;
14194                   }
14195               }
14196             else
14197               ce->value = RECUR (ce->value);
14198           }
14199
14200         if (need_copy_p)
14201           {
14202             VEC(constructor_elt,gc) *old_n = n;
14203
14204             n = VEC_alloc (constructor_elt, gc, newlen);
14205             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
14206               {
14207                 if (TREE_CODE (ce->value) == TREE_VEC)
14208                   {
14209                     int i, len = TREE_VEC_LENGTH (ce->value);
14210                     for (i = 0; i < len; ++i)
14211                       CONSTRUCTOR_APPEND_ELT (n, 0,
14212                                               TREE_VEC_ELT (ce->value, i));
14213                   }
14214                 else
14215                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14216               }
14217           }
14218
14219         r = build_constructor (init_list_type_node, n);
14220         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14221
14222         if (TREE_HAS_CONSTRUCTOR (t))
14223           return finish_compound_literal (type, r, complain);
14224
14225         TREE_TYPE (r) = type;
14226         return r;
14227       }
14228
14229     case TYPEID_EXPR:
14230       {
14231         tree operand_0 = TREE_OPERAND (t, 0);
14232         if (TYPE_P (operand_0))
14233           {
14234             operand_0 = tsubst (operand_0, args, complain, in_decl);
14235             return get_typeid (operand_0);
14236           }
14237         else
14238           {
14239             operand_0 = RECUR (operand_0);
14240             return build_typeid (operand_0);
14241           }
14242       }
14243
14244     case VAR_DECL:
14245       if (!args)
14246         return t;
14247       /* Fall through */
14248
14249     case PARM_DECL:
14250       {
14251         tree r = tsubst_copy (t, args, complain, in_decl);
14252
14253         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14254           /* If the original type was a reference, we'll be wrapped in
14255              the appropriate INDIRECT_REF.  */
14256           r = convert_from_reference (r);
14257         return r;
14258       }
14259
14260     case VA_ARG_EXPR:
14261       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
14262                              tsubst (TREE_TYPE (t), args, complain, in_decl));
14263
14264     case OFFSETOF_EXPR:
14265       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
14266
14267     case TRAIT_EXPR:
14268       {
14269         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14270                                   complain, in_decl);
14271
14272         tree type2 = TRAIT_EXPR_TYPE2 (t);
14273         if (type2)
14274           type2 = tsubst_copy (type2, args, complain, in_decl);
14275         
14276         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
14277       }
14278
14279     case STMT_EXPR:
14280       {
14281         tree old_stmt_expr = cur_stmt_expr;
14282         tree stmt_expr = begin_stmt_expr ();
14283
14284         cur_stmt_expr = stmt_expr;
14285         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14286                      integral_constant_expression_p);
14287         stmt_expr = finish_stmt_expr (stmt_expr, false);
14288         cur_stmt_expr = old_stmt_expr;
14289
14290         /* If the resulting list of expression statement is empty,
14291            fold it further into void_zero_node.  */
14292         if (empty_expr_stmt_p (stmt_expr))
14293           stmt_expr = void_zero_node;
14294
14295         return stmt_expr;
14296       }
14297
14298     case CONST_DECL:
14299       t = tsubst_copy (t, args, complain, in_decl);
14300       /* As in finish_id_expression, we resolve enumeration constants
14301          to their underlying values.  */
14302       if (TREE_CODE (t) == CONST_DECL && !processing_template_decl)
14303         {
14304           used_types_insert (TREE_TYPE (t));
14305           return DECL_INITIAL (t);
14306         }
14307       return t;
14308
14309     case LAMBDA_EXPR:
14310       {
14311         tree r = build_lambda_expr ();
14312
14313         tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14314         LAMBDA_EXPR_CLOSURE (r) = type;
14315         CLASSTYPE_LAMBDA_EXPR (type) = r;
14316
14317         LAMBDA_EXPR_LOCATION (r)
14318           = LAMBDA_EXPR_LOCATION (t);
14319         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14320           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14321         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14322         LAMBDA_EXPR_DISCRIMINATOR (r)
14323           = (LAMBDA_EXPR_DISCRIMINATOR (t));
14324         LAMBDA_EXPR_EXTRA_SCOPE (r)
14325           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
14326         if (LAMBDA_EXPR_RETURN_TYPE (t) == dependent_lambda_return_type_node)
14327           {
14328             LAMBDA_EXPR_RETURN_TYPE (r) = dependent_lambda_return_type_node;
14329             LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (r) = true;
14330           }
14331         else
14332           LAMBDA_EXPR_RETURN_TYPE (r)
14333             = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14334
14335         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14336                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14337
14338         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
14339         determine_visibility (TYPE_NAME (type));
14340         /* Now that we know visibility, instantiate the type so we have a
14341            declaration of the op() for later calls to lambda_function.  */
14342         complete_type (type);
14343
14344         /* The capture list refers to closure members, so this needs to
14345            wait until after we finish instantiating the type.  */
14346         LAMBDA_EXPR_CAPTURE_LIST (r)
14347           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
14348
14349         return build_lambda_object (r);
14350       }
14351
14352     case TARGET_EXPR:
14353       /* We can get here for a constant initializer of non-dependent type.
14354          FIXME stop folding in cp_parser_initializer_clause.  */
14355       gcc_assert (TREE_CONSTANT (t));
14356       {
14357         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
14358         TREE_CONSTANT (r) = true;
14359         return r;
14360       }
14361
14362     case TRANSACTION_EXPR:
14363       return tsubst_expr(t, args, complain, in_decl,
14364              integral_constant_expression_p);
14365
14366     default:
14367       /* Handle Objective-C++ constructs, if appropriate.  */
14368       {
14369         tree subst
14370           = objcp_tsubst_copy_and_build (t, args, complain,
14371                                          in_decl, /*function_p=*/false);
14372         if (subst)
14373           return subst;
14374       }
14375       return tsubst_copy (t, args, complain, in_decl);
14376     }
14377
14378 #undef RECUR
14379 }
14380
14381 /* Verify that the instantiated ARGS are valid. For type arguments,
14382    make sure that the type's linkage is ok. For non-type arguments,
14383    make sure they are constants if they are integral or enumerations.
14384    Emit an error under control of COMPLAIN, and return TRUE on error.  */
14385
14386 static bool
14387 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14388 {
14389   if (ARGUMENT_PACK_P (t))
14390     {
14391       tree vec = ARGUMENT_PACK_ARGS (t);
14392       int len = TREE_VEC_LENGTH (vec);
14393       bool result = false;
14394       int i;
14395
14396       for (i = 0; i < len; ++i)
14397         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14398           result = true;
14399       return result;
14400     }
14401   else if (TYPE_P (t))
14402     {
14403       /* [basic.link]: A name with no linkage (notably, the name
14404          of a class or enumeration declared in a local scope)
14405          shall not be used to declare an entity with linkage.
14406          This implies that names with no linkage cannot be used as
14407          template arguments
14408
14409          DR 757 relaxes this restriction for C++0x.  */
14410       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14411                  : no_linkage_check (t, /*relaxed_p=*/false));
14412
14413       if (nt)
14414         {
14415           /* DR 488 makes use of a type with no linkage cause
14416              type deduction to fail.  */
14417           if (complain & tf_error)
14418             {
14419               if (TYPE_ANONYMOUS_P (nt))
14420                 error ("%qT is/uses anonymous type", t);
14421               else
14422                 error ("template argument for %qD uses local type %qT",
14423                        tmpl, t);
14424             }
14425           return true;
14426         }
14427       /* In order to avoid all sorts of complications, we do not
14428          allow variably-modified types as template arguments.  */
14429       else if (variably_modified_type_p (t, NULL_TREE))
14430         {
14431           if (complain & tf_error)
14432             error ("%qT is a variably modified type", t);
14433           return true;
14434         }
14435     }
14436   /* A non-type argument of integral or enumerated type must be a
14437      constant.  */
14438   else if (TREE_TYPE (t)
14439            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14440            && !TREE_CONSTANT (t))
14441     {
14442       if (complain & tf_error)
14443         error ("integral expression %qE is not constant", t);
14444       return true;
14445     }
14446   return false;
14447 }
14448
14449 static bool
14450 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14451 {
14452   int ix, len = DECL_NTPARMS (tmpl);
14453   bool result = false;
14454
14455   for (ix = 0; ix != len; ix++)
14456     {
14457       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14458         result = true;
14459     }
14460   if (result && (complain & tf_error))
14461     error ("  trying to instantiate %qD", tmpl);
14462   return result;
14463 }
14464
14465 /* In C++0x, it's possible to have a function template whose type depends
14466    on itself recursively.  This is most obvious with decltype, but can also
14467    occur with enumeration scope (c++/48969).  So we need to catch infinite
14468    recursion and reject the substitution at deduction time; this function
14469    will return error_mark_node for any repeated substitution.
14470
14471    This also catches excessive recursion such as when f<N> depends on
14472    f<N-1> across all integers, and returns error_mark_node for all the
14473    substitutions back up to the initial one.
14474
14475    This is, of course, not reentrant.  */
14476
14477 static tree
14478 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14479 {
14480   static bool excessive_deduction_depth;
14481   static int deduction_depth;
14482   struct pending_template *old_last_pend = last_pending_template;
14483   struct tinst_level *old_error_tinst = last_error_tinst_level;
14484
14485   tree fntype = TREE_TYPE (fn);
14486   tree tinst;
14487   tree r;
14488
14489   if (excessive_deduction_depth)
14490     return error_mark_node;
14491
14492   tinst = build_tree_list (fn, targs);
14493   if (!push_tinst_level (tinst))
14494     {
14495       excessive_deduction_depth = true;
14496       ggc_free (tinst);
14497       return error_mark_node;
14498     }
14499
14500   input_location = DECL_SOURCE_LOCATION (fn);
14501   ++deduction_depth;
14502   push_deduction_access_scope (fn);
14503   r = tsubst (fntype, targs, complain, NULL_TREE);
14504   pop_deduction_access_scope (fn);
14505   --deduction_depth;
14506
14507   if (excessive_deduction_depth)
14508     {
14509       r = error_mark_node;
14510       if (deduction_depth == 0)
14511         /* Reset once we're all the way out.  */
14512         excessive_deduction_depth = false;
14513     }
14514
14515   pop_tinst_level ();
14516   /* We can't free this if a pending_template entry or last_error_tinst_level
14517      is pointing at it.  */
14518   if (last_pending_template == old_last_pend
14519       && last_error_tinst_level == old_error_tinst)
14520     ggc_free (tinst);
14521   return r;
14522 }
14523
14524 /* Instantiate the indicated variable or function template TMPL with
14525    the template arguments in TARG_PTR.  */
14526
14527 static tree
14528 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14529 {
14530   tree targ_ptr = orig_args;
14531   tree fndecl;
14532   tree gen_tmpl;
14533   tree spec;
14534
14535   if (tmpl == error_mark_node)
14536     return error_mark_node;
14537
14538   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14539
14540   /* If this function is a clone, handle it specially.  */
14541   if (DECL_CLONED_FUNCTION_P (tmpl))
14542     {
14543       tree spec;
14544       tree clone;
14545
14546       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14547          DECL_CLONED_FUNCTION.  */
14548       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14549                                    targ_ptr, complain);
14550       if (spec == error_mark_node)
14551         return error_mark_node;
14552
14553       /* Look for the clone.  */
14554       FOR_EACH_CLONE (clone, spec)
14555         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14556           return clone;
14557       /* We should always have found the clone by now.  */
14558       gcc_unreachable ();
14559       return NULL_TREE;
14560     }
14561
14562   /* Check to see if we already have this specialization.  */
14563   gen_tmpl = most_general_template (tmpl);
14564   if (tmpl != gen_tmpl)
14565     /* The TMPL is a partial instantiation.  To get a full set of
14566        arguments we must add the arguments used to perform the
14567        partial instantiation.  */
14568     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14569                                             targ_ptr);
14570
14571   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14572      but it doesn't seem to be on the hot path.  */
14573   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14574
14575   gcc_assert (tmpl == gen_tmpl
14576               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14577                   == spec)
14578               || fndecl == NULL_TREE);
14579
14580   if (spec != NULL_TREE)
14581     return spec;
14582
14583   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14584                                complain))
14585     return error_mark_node;
14586
14587   /* We are building a FUNCTION_DECL, during which the access of its
14588      parameters and return types have to be checked.  However this
14589      FUNCTION_DECL which is the desired context for access checking
14590      is not built yet.  We solve this chicken-and-egg problem by
14591      deferring all checks until we have the FUNCTION_DECL.  */
14592   push_deferring_access_checks (dk_deferred);
14593
14594   /* Instantiation of the function happens in the context of the function
14595      template, not the context of the overload resolution we're doing.  */
14596   push_to_top_level ();
14597   if (DECL_CLASS_SCOPE_P (gen_tmpl))
14598     {
14599       tree ctx = tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
14600                          complain, gen_tmpl);
14601       push_nested_class (ctx);
14602     }
14603   /* Substitute template parameters to obtain the specialization.  */
14604   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14605                    targ_ptr, complain, gen_tmpl);
14606   if (DECL_CLASS_SCOPE_P (gen_tmpl))
14607     pop_nested_class ();
14608   pop_from_top_level ();
14609
14610   if (fndecl == error_mark_node)
14611     return error_mark_node;
14612
14613   /* Now we know the specialization, compute access previously
14614      deferred.  */
14615   push_access_scope (fndecl);
14616
14617   /* Some typedefs referenced from within the template code need to be access
14618      checked at template instantiation time, i.e now. These types were
14619      added to the template at parsing time. Let's get those and perfom
14620      the acces checks then.  */
14621   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14622   perform_deferred_access_checks ();
14623   pop_access_scope (fndecl);
14624   pop_deferring_access_checks ();
14625
14626   /* The DECL_TI_TEMPLATE should always be the immediate parent
14627      template, not the most general template.  */
14628   DECL_TI_TEMPLATE (fndecl) = tmpl;
14629
14630   /* If we've just instantiated the main entry point for a function,
14631      instantiate all the alternate entry points as well.  We do this
14632      by cloning the instantiation of the main entry point, not by
14633      instantiating the template clones.  */
14634   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14635     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14636
14637   return fndecl;
14638 }
14639
14640 /* Wrapper for instantiate_template_1.  */
14641
14642 tree
14643 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14644 {
14645   tree ret;
14646   timevar_push (TV_TEMPLATE_INST);
14647   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14648   timevar_pop (TV_TEMPLATE_INST);
14649   return ret;
14650 }
14651
14652 /* We're going to do deduction substitution on the type of TMPL, a function
14653    template.  In C++11 mode, push into that access scope.  In C++03 mode,
14654    disable access checking.  */
14655
14656 static void
14657 push_deduction_access_scope (tree tmpl)
14658 {
14659   if (cxx_dialect >= cxx0x)
14660     {
14661       int ptd = processing_template_decl;
14662       push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14663       /* Preserve processing_template_decl across push_to_top_level.  */
14664       if (ptd && !processing_template_decl)
14665         ++processing_template_decl;
14666     }
14667   else
14668     push_deferring_access_checks (dk_no_check);
14669 }
14670
14671 /* And pop back out.  */
14672
14673 static void
14674 pop_deduction_access_scope (tree tmpl)
14675 {
14676   if (cxx_dialect >= cxx0x)
14677     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14678   else
14679     pop_deferring_access_checks ();
14680 }
14681
14682 /* PARM is a template parameter pack for FN.  Returns true iff
14683    PARM is used in a deducible way in the argument list of FN.  */
14684
14685 static bool
14686 pack_deducible_p (tree parm, tree fn)
14687 {
14688   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14689   for (; t; t = TREE_CHAIN (t))
14690     {
14691       tree type = TREE_VALUE (t);
14692       tree packs;
14693       if (!PACK_EXPANSION_P (type))
14694         continue;
14695       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14696            packs; packs = TREE_CHAIN (packs))
14697         if (TREE_VALUE (packs) == parm)
14698           {
14699             /* The template parameter pack is used in a function parameter
14700                pack.  If this is the end of the parameter list, the
14701                template parameter pack is deducible.  */
14702             if (TREE_CHAIN (t) == void_list_node)
14703               return true;
14704             else
14705               /* Otherwise, not.  Well, it could be deduced from
14706                  a non-pack parameter, but doing so would end up with
14707                  a deduction mismatch, so don't bother.  */
14708               return false;
14709           }
14710     }
14711   /* The template parameter pack isn't used in any function parameter
14712      packs, but it might be used deeper, e.g. tuple<Args...>.  */
14713   return true;
14714 }
14715
14716 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14717    NARGS elements of the arguments that are being used when calling
14718    it.  TARGS is a vector into which the deduced template arguments
14719    are placed.
14720
14721    Return zero for success, 2 for an incomplete match that doesn't resolve
14722    all the types, and 1 for complete failure.  An error message will be
14723    printed only for an incomplete match.
14724
14725    If FN is a conversion operator, or we are trying to produce a specific
14726    specialization, RETURN_TYPE is the return type desired.
14727
14728    The EXPLICIT_TARGS are explicit template arguments provided via a
14729    template-id.
14730
14731    The parameter STRICT is one of:
14732
14733    DEDUCE_CALL:
14734      We are deducing arguments for a function call, as in
14735      [temp.deduct.call].
14736
14737    DEDUCE_CONV:
14738      We are deducing arguments for a conversion function, as in
14739      [temp.deduct.conv].
14740
14741    DEDUCE_EXACT:
14742      We are deducing arguments when doing an explicit instantiation
14743      as in [temp.explicit], when determining an explicit specialization
14744      as in [temp.expl.spec], or when taking the address of a function
14745      template, as in [temp.deduct.funcaddr].  */
14746
14747 int
14748 fn_type_unification (tree fn,
14749                      tree explicit_targs,
14750                      tree targs,
14751                      const tree *args,
14752                      unsigned int nargs,
14753                      tree return_type,
14754                      unification_kind_t strict,
14755                      int flags,
14756                      bool explain_p)
14757 {
14758   tree parms;
14759   tree fntype;
14760   int result;
14761
14762   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14763
14764   fntype = TREE_TYPE (fn);
14765   if (explicit_targs)
14766     {
14767       /* [temp.deduct]
14768
14769          The specified template arguments must match the template
14770          parameters in kind (i.e., type, nontype, template), and there
14771          must not be more arguments than there are parameters;
14772          otherwise type deduction fails.
14773
14774          Nontype arguments must match the types of the corresponding
14775          nontype template parameters, or must be convertible to the
14776          types of the corresponding nontype parameters as specified in
14777          _temp.arg.nontype_, otherwise type deduction fails.
14778
14779          All references in the function type of the function template
14780          to the corresponding template parameters are replaced by the
14781          specified template argument values.  If a substitution in a
14782          template parameter or in the function type of the function
14783          template results in an invalid type, type deduction fails.  */
14784       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14785       int i, len = TREE_VEC_LENGTH (tparms);
14786       tree converted_args;
14787       bool incomplete = false;
14788
14789       if (explicit_targs == error_mark_node)
14790         return unify_invalid (explain_p);
14791
14792       converted_args
14793         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14794                                   (explain_p
14795                                    ? tf_warning_or_error
14796                                    : tf_none),
14797                                    /*require_all_args=*/false,
14798                                    /*use_default_args=*/false));
14799       if (converted_args == error_mark_node)
14800         return 1;
14801
14802       /* Substitute the explicit args into the function type.  This is
14803          necessary so that, for instance, explicitly declared function
14804          arguments can match null pointed constants.  If we were given
14805          an incomplete set of explicit args, we must not do semantic
14806          processing during substitution as we could create partial
14807          instantiations.  */
14808       for (i = 0; i < len; i++)
14809         {
14810           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14811           bool parameter_pack = false;
14812           tree targ = TREE_VEC_ELT (converted_args, i);
14813
14814           /* Dig out the actual parm.  */
14815           if (TREE_CODE (parm) == TYPE_DECL
14816               || TREE_CODE (parm) == TEMPLATE_DECL)
14817             {
14818               parm = TREE_TYPE (parm);
14819               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14820             }
14821           else if (TREE_CODE (parm) == PARM_DECL)
14822             {
14823               parm = DECL_INITIAL (parm);
14824               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14825             }
14826
14827           if (!parameter_pack && targ == NULL_TREE)
14828             /* No explicit argument for this template parameter.  */
14829             incomplete = true;
14830
14831           if (parameter_pack && pack_deducible_p (parm, fn))
14832             {
14833               /* Mark the argument pack as "incomplete". We could
14834                  still deduce more arguments during unification.
14835                  We remove this mark in type_unification_real.  */
14836               if (targ)
14837                 {
14838                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14839                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14840                     = ARGUMENT_PACK_ARGS (targ);
14841                 }
14842
14843               /* We have some incomplete argument packs.  */
14844               incomplete = true;
14845             }
14846         }
14847
14848       processing_template_decl += incomplete;
14849       fntype = deduction_tsubst_fntype (fn, converted_args,
14850                                         (explain_p
14851                                          ? tf_warning_or_error
14852                                          : tf_none));
14853       processing_template_decl -= incomplete;
14854
14855       if (fntype == error_mark_node)
14856         return 1;
14857
14858       /* Place the explicitly specified arguments in TARGS.  */
14859       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14860         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14861     }
14862
14863   /* Never do unification on the 'this' parameter.  */
14864   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14865
14866   if (return_type)
14867     {
14868       tree *new_args;
14869
14870       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14871       new_args = XALLOCAVEC (tree, nargs + 1);
14872       new_args[0] = return_type;
14873       memcpy (new_args + 1, args, nargs * sizeof (tree));
14874       args = new_args;
14875       ++nargs;
14876     }
14877
14878   /* We allow incomplete unification without an error message here
14879      because the standard doesn't seem to explicitly prohibit it.  Our
14880      callers must be ready to deal with unification failures in any
14881      event.  */
14882   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14883                                   targs, parms, args, nargs, /*subr=*/0,
14884                                   strict, flags, explain_p);
14885
14886   /* Now that we have bindings for all of the template arguments,
14887      ensure that the arguments deduced for the template template
14888      parameters have compatible template parameter lists.  We cannot
14889      check this property before we have deduced all template
14890      arguments, because the template parameter types of a template
14891      template parameter might depend on prior template parameters
14892      deduced after the template template parameter.  The following
14893      ill-formed example illustrates this issue:
14894
14895        template<typename T, template<T> class C> void f(C<5>, T);
14896
14897        template<int N> struct X {};
14898
14899        void g() {
14900          f(X<5>(), 5l); // error: template argument deduction fails
14901        }
14902
14903      The template parameter list of 'C' depends on the template type
14904      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14905      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14906      time that we deduce 'C'.  */
14907   if (result == 0
14908       && !template_template_parm_bindings_ok_p 
14909            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14910     return unify_inconsistent_template_template_parameters (explain_p);
14911
14912   if (result == 0)
14913     /* All is well so far.  Now, check:
14914
14915        [temp.deduct]
14916
14917        When all template arguments have been deduced, all uses of
14918        template parameters in nondeduced contexts are replaced with
14919        the corresponding deduced argument values.  If the
14920        substitution results in an invalid type, as described above,
14921        type deduction fails.  */
14922     {
14923       tree substed = deduction_tsubst_fntype (fn, targs,
14924                                               (explain_p
14925                                                ? tf_warning_or_error
14926                                                : tf_none));
14927       if (substed == error_mark_node)
14928         return 1;
14929
14930       /* If we're looking for an exact match, check that what we got
14931          is indeed an exact match.  It might not be if some template
14932          parameters are used in non-deduced contexts.  */
14933       if (strict == DEDUCE_EXACT)
14934         {
14935           unsigned int i;
14936
14937           tree sarg
14938             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14939           if (return_type)
14940             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14941           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14942             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14943               return unify_type_mismatch (explain_p, args[i],
14944                                           TREE_VALUE (sarg));
14945         }
14946     }
14947
14948   return result;
14949 }
14950
14951 /* Adjust types before performing type deduction, as described in
14952    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14953    sections are symmetric.  PARM is the type of a function parameter
14954    or the return type of the conversion function.  ARG is the type of
14955    the argument passed to the call, or the type of the value
14956    initialized with the result of the conversion function.
14957    ARG_EXPR is the original argument expression, which may be null.  */
14958
14959 static int
14960 maybe_adjust_types_for_deduction (unification_kind_t strict,
14961                                   tree* parm,
14962                                   tree* arg,
14963                                   tree arg_expr)
14964 {
14965   int result = 0;
14966
14967   switch (strict)
14968     {
14969     case DEDUCE_CALL:
14970       break;
14971
14972     case DEDUCE_CONV:
14973       {
14974         /* Swap PARM and ARG throughout the remainder of this
14975            function; the handling is precisely symmetric since PARM
14976            will initialize ARG rather than vice versa.  */
14977         tree* temp = parm;
14978         parm = arg;
14979         arg = temp;
14980         break;
14981       }
14982
14983     case DEDUCE_EXACT:
14984       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14985          too, but here handle it by stripping the reference from PARM
14986          rather than by adding it to ARG.  */
14987       if (TREE_CODE (*parm) == REFERENCE_TYPE
14988           && TYPE_REF_IS_RVALUE (*parm)
14989           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14990           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14991           && TREE_CODE (*arg) == REFERENCE_TYPE
14992           && !TYPE_REF_IS_RVALUE (*arg))
14993         *parm = TREE_TYPE (*parm);
14994       /* Nothing else to do in this case.  */
14995       return 0;
14996
14997     default:
14998       gcc_unreachable ();
14999     }
15000
15001   if (TREE_CODE (*parm) != REFERENCE_TYPE)
15002     {
15003       /* [temp.deduct.call]
15004
15005          If P is not a reference type:
15006
15007          --If A is an array type, the pointer type produced by the
15008          array-to-pointer standard conversion (_conv.array_) is
15009          used in place of A for type deduction; otherwise,
15010
15011          --If A is a function type, the pointer type produced by
15012          the function-to-pointer standard conversion
15013          (_conv.func_) is used in place of A for type deduction;
15014          otherwise,
15015
15016          --If A is a cv-qualified type, the top level
15017          cv-qualifiers of A's type are ignored for type
15018          deduction.  */
15019       if (TREE_CODE (*arg) == ARRAY_TYPE)
15020         *arg = build_pointer_type (TREE_TYPE (*arg));
15021       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
15022         *arg = build_pointer_type (*arg);
15023       else
15024         *arg = TYPE_MAIN_VARIANT (*arg);
15025     }
15026
15027   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
15028      of the form T&&, where T is a template parameter, and the argument
15029      is an lvalue, T is deduced as A& */
15030   if (TREE_CODE (*parm) == REFERENCE_TYPE
15031       && TYPE_REF_IS_RVALUE (*parm)
15032       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15033       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15034       && (arg_expr ? real_lvalue_p (arg_expr)
15035           /* try_one_overload doesn't provide an arg_expr, but
15036              functions are always lvalues.  */
15037           : TREE_CODE (*arg) == FUNCTION_TYPE))
15038     *arg = build_reference_type (*arg);
15039
15040   /* [temp.deduct.call]
15041
15042      If P is a cv-qualified type, the top level cv-qualifiers
15043      of P's type are ignored for type deduction.  If P is a
15044      reference type, the type referred to by P is used for
15045      type deduction.  */
15046   *parm = TYPE_MAIN_VARIANT (*parm);
15047   if (TREE_CODE (*parm) == REFERENCE_TYPE)
15048     {
15049       *parm = TREE_TYPE (*parm);
15050       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15051     }
15052
15053   /* DR 322. For conversion deduction, remove a reference type on parm
15054      too (which has been swapped into ARG).  */
15055   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
15056     *arg = TREE_TYPE (*arg);
15057
15058   return result;
15059 }
15060
15061 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
15062    template which does contain any deducible template parameters; check if
15063    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
15064    unify_one_argument.  */
15065
15066 static int
15067 check_non_deducible_conversion (tree parm, tree arg, int strict,
15068                                 int flags, bool explain_p)
15069 {
15070   tree type;
15071
15072   if (!TYPE_P (arg))
15073     type = TREE_TYPE (arg);
15074   else
15075     type = arg;
15076
15077   if (same_type_p (parm, type))
15078     return unify_success (explain_p);
15079
15080   if (strict == DEDUCE_CONV)
15081     {
15082       if (can_convert_arg (type, parm, NULL_TREE, flags))
15083         return unify_success (explain_p);
15084     }
15085   else if (strict != DEDUCE_EXACT)
15086     {
15087       if (can_convert_arg (parm, type,
15088                            TYPE_P (arg) ? NULL_TREE : arg,
15089                            flags))
15090         return unify_success (explain_p);
15091     }
15092
15093   if (strict == DEDUCE_EXACT)
15094     return unify_type_mismatch (explain_p, parm, arg);
15095   else
15096     return unify_arg_conversion (explain_p, parm, type, arg);
15097 }
15098
15099 /* Subroutine of type_unification_real and unify_pack_expansion to
15100    handle unification of a single P/A pair.  Parameters are as
15101    for those functions.  */
15102
15103 static int
15104 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
15105                     int subr, unification_kind_t strict, int flags,
15106                     bool explain_p)
15107 {
15108   tree arg_expr = NULL_TREE;
15109   int arg_strict;
15110
15111   if (arg == error_mark_node || parm == error_mark_node)
15112     return unify_invalid (explain_p);
15113   if (arg == unknown_type_node)
15114     /* We can't deduce anything from this, but we might get all the
15115        template args from other function args.  */
15116     return unify_success (explain_p);
15117
15118   /* FIXME uses_deducible_template_parms */
15119   if (TYPE_P (parm) && !uses_template_parms (parm))
15120     return check_non_deducible_conversion (parm, arg, strict, flags,
15121                                            explain_p);
15122
15123   switch (strict)
15124     {
15125     case DEDUCE_CALL:
15126       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
15127                     | UNIFY_ALLOW_MORE_CV_QUAL
15128                     | UNIFY_ALLOW_DERIVED);
15129       break;
15130
15131     case DEDUCE_CONV:
15132       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15133       break;
15134
15135     case DEDUCE_EXACT:
15136       arg_strict = UNIFY_ALLOW_NONE;
15137       break;
15138
15139     default:
15140       gcc_unreachable ();
15141     }
15142
15143   /* We only do these transformations if this is the top-level
15144      parameter_type_list in a call or declaration matching; in other
15145      situations (nested function declarators, template argument lists) we
15146      won't be comparing a type to an expression, and we don't do any type
15147      adjustments.  */
15148   if (!subr)
15149     {
15150       if (!TYPE_P (arg))
15151         {
15152           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15153           if (type_unknown_p (arg))
15154             {
15155               /* [temp.deduct.type] A template-argument can be
15156                  deduced from a pointer to function or pointer
15157                  to member function argument if the set of
15158                  overloaded functions does not contain function
15159                  templates and at most one of a set of
15160                  overloaded functions provides a unique
15161                  match.  */
15162
15163               if (resolve_overloaded_unification
15164                   (tparms, targs, parm, arg, strict,
15165                    arg_strict, explain_p))
15166                 return unify_success (explain_p);
15167               return unify_overload_resolution_failure (explain_p, arg);
15168             }
15169
15170           arg_expr = arg;
15171           arg = unlowered_expr_type (arg);
15172           if (arg == error_mark_node)
15173             return unify_invalid (explain_p);
15174         }
15175
15176       arg_strict |=
15177         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
15178     }
15179   else
15180     gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
15181                 == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
15182
15183   /* For deduction from an init-list we need the actual list.  */
15184   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15185     arg = arg_expr;
15186   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
15187 }
15188
15189 /* Most parms like fn_type_unification.
15190
15191    If SUBR is 1, we're being called recursively (to unify the
15192    arguments of a function or method parameter of a function
15193    template). */
15194
15195 static int
15196 type_unification_real (tree tparms,
15197                        tree targs,
15198                        tree xparms,
15199                        const tree *xargs,
15200                        unsigned int xnargs,
15201                        int subr,
15202                        unification_kind_t strict,
15203                        int flags,
15204                        bool explain_p)
15205 {
15206   tree parm, arg;
15207   int i;
15208   int ntparms = TREE_VEC_LENGTH (tparms);
15209   int saw_undeduced = 0;
15210   tree parms;
15211   const tree *args;
15212   unsigned int nargs;
15213   unsigned int ia;
15214
15215   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15216   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15217   gcc_assert (ntparms > 0);
15218
15219   /* Reset the number of non-defaulted template arguments contained
15220      in TARGS.  */
15221   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15222
15223  again:
15224   parms = xparms;
15225   args = xargs;
15226   nargs = xnargs;
15227
15228   ia = 0;
15229   while (parms && parms != void_list_node
15230          && ia < nargs)
15231     {
15232       parm = TREE_VALUE (parms);
15233
15234       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15235           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15236         /* For a function parameter pack that occurs at the end of the
15237            parameter-declaration-list, the type A of each remaining
15238            argument of the call is compared with the type P of the
15239            declarator-id of the function parameter pack.  */
15240         break;
15241
15242       parms = TREE_CHAIN (parms);
15243
15244       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15245         /* For a function parameter pack that does not occur at the
15246            end of the parameter-declaration-list, the type of the
15247            parameter pack is a non-deduced context.  */
15248         continue;
15249
15250       arg = args[ia];
15251       ++ia;
15252
15253       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15254                               flags, explain_p))
15255         return 1;
15256     }
15257
15258   if (parms 
15259       && parms != void_list_node
15260       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15261     {
15262       /* Unify the remaining arguments with the pack expansion type.  */
15263       tree argvec;
15264       tree parmvec = make_tree_vec (1);
15265
15266       /* Allocate a TREE_VEC and copy in all of the arguments */ 
15267       argvec = make_tree_vec (nargs - ia);
15268       for (i = 0; ia < nargs; ++ia, ++i)
15269         TREE_VEC_ELT (argvec, i) = args[ia];
15270
15271       /* Copy the parameter into parmvec.  */
15272       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15273       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15274                                 /*subr=*/subr, explain_p))
15275         return 1;
15276
15277       /* Advance to the end of the list of parameters.  */
15278       parms = TREE_CHAIN (parms);
15279     }
15280
15281   /* Fail if we've reached the end of the parm list, and more args
15282      are present, and the parm list isn't variadic.  */
15283   if (ia < nargs && parms == void_list_node)
15284     return unify_too_many_arguments (explain_p, nargs, ia);
15285   /* Fail if parms are left and they don't have default values.  */
15286   if (parms && parms != void_list_node
15287       && TREE_PURPOSE (parms) == NULL_TREE)
15288     {
15289       unsigned int count = nargs;
15290       tree p = parms;
15291       while (p && p != void_list_node)
15292         {
15293           count++;
15294           p = TREE_CHAIN (p);
15295         }
15296       return unify_too_few_arguments (explain_p, ia, count);
15297     }
15298
15299   if (!subr)
15300     {
15301       tsubst_flags_t complain = (explain_p
15302                                  ? tf_warning_or_error
15303                                  : tf_none);
15304
15305       /* Check to see if we need another pass before we start clearing
15306          ARGUMENT_PACK_INCOMPLETE_P.  */
15307       for (i = 0; i < ntparms; i++)
15308         {
15309           tree targ = TREE_VEC_ELT (targs, i);
15310           tree tparm = TREE_VEC_ELT (tparms, i);
15311
15312           if (targ || tparm == error_mark_node)
15313             continue;
15314           tparm = TREE_VALUE (tparm);
15315
15316           /* If this is an undeduced nontype parameter that depends on
15317              a type parameter, try another pass; its type may have been
15318              deduced from a later argument than the one from which
15319              this parameter can be deduced.  */
15320           if (TREE_CODE (tparm) == PARM_DECL
15321               && uses_template_parms (TREE_TYPE (tparm))
15322               && !saw_undeduced++)
15323             goto again;
15324         }
15325
15326       for (i = 0; i < ntparms; i++)
15327         {
15328           tree targ = TREE_VEC_ELT (targs, i);
15329           tree tparm = TREE_VEC_ELT (tparms, i);
15330
15331           /* Clear the "incomplete" flags on all argument packs now so that
15332              substituting them into later default arguments works.  */
15333           if (targ && ARGUMENT_PACK_P (targ))
15334             {
15335               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15336               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15337             }
15338
15339           if (targ || tparm == error_mark_node)
15340             continue;
15341           tparm = TREE_VALUE (tparm);
15342
15343           /* Core issue #226 (C++0x) [temp.deduct]:
15344
15345              If a template argument has not been deduced, its
15346              default template argument, if any, is used. 
15347
15348              When we are in C++98 mode, TREE_PURPOSE will either
15349              be NULL_TREE or ERROR_MARK_NODE, so we do not need
15350              to explicitly check cxx_dialect here.  */
15351           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15352             {
15353               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15354               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15355               location_t save_loc = input_location;
15356               if (DECL_P (parm))
15357                 input_location = DECL_SOURCE_LOCATION (parm);
15358               arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15359               arg = convert_template_argument (parm, arg, targs, complain,
15360                                                i, NULL_TREE);
15361               input_location = save_loc;
15362               if (arg == error_mark_node)
15363                 return 1;
15364               else
15365                 {
15366                   TREE_VEC_ELT (targs, i) = arg;
15367                   /* The position of the first default template argument,
15368                      is also the number of non-defaulted arguments in TARGS.
15369                      Record that.  */
15370                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15371                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15372                   continue;
15373                 }
15374             }
15375
15376           /* If the type parameter is a parameter pack, then it will
15377              be deduced to an empty parameter pack.  */
15378           if (template_parameter_pack_p (tparm))
15379             {
15380               tree arg;
15381
15382               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15383                 {
15384                   arg = make_node (NONTYPE_ARGUMENT_PACK);
15385                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15386                   TREE_CONSTANT (arg) = 1;
15387                 }
15388               else
15389                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15390
15391               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15392
15393               TREE_VEC_ELT (targs, i) = arg;
15394               continue;
15395             }
15396
15397           return unify_parameter_deduction_failure (explain_p, tparm);
15398         }
15399     }
15400 #ifdef ENABLE_CHECKING
15401   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15402     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15403 #endif
15404
15405   return unify_success (explain_p);
15406 }
15407
15408 /* Subroutine of type_unification_real.  Args are like the variables
15409    at the call site.  ARG is an overloaded function (or template-id);
15410    we try deducing template args from each of the overloads, and if
15411    only one succeeds, we go with that.  Modifies TARGS and returns
15412    true on success.  */
15413
15414 static bool
15415 resolve_overloaded_unification (tree tparms,
15416                                 tree targs,
15417                                 tree parm,
15418                                 tree arg,
15419                                 unification_kind_t strict,
15420                                 int sub_strict,
15421                                 bool explain_p)
15422 {
15423   tree tempargs = copy_node (targs);
15424   int good = 0;
15425   tree goodfn = NULL_TREE;
15426   bool addr_p;
15427
15428   if (TREE_CODE (arg) == ADDR_EXPR)
15429     {
15430       arg = TREE_OPERAND (arg, 0);
15431       addr_p = true;
15432     }
15433   else
15434     addr_p = false;
15435
15436   if (TREE_CODE (arg) == COMPONENT_REF)
15437     /* Handle `&x' where `x' is some static or non-static member
15438        function name.  */
15439     arg = TREE_OPERAND (arg, 1);
15440
15441   if (TREE_CODE (arg) == OFFSET_REF)
15442     arg = TREE_OPERAND (arg, 1);
15443
15444   /* Strip baselink information.  */
15445   if (BASELINK_P (arg))
15446     arg = BASELINK_FUNCTIONS (arg);
15447
15448   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15449     {
15450       /* If we got some explicit template args, we need to plug them into
15451          the affected templates before we try to unify, in case the
15452          explicit args will completely resolve the templates in question.  */
15453
15454       int ok = 0;
15455       tree expl_subargs = TREE_OPERAND (arg, 1);
15456       arg = TREE_OPERAND (arg, 0);
15457
15458       for (; arg; arg = OVL_NEXT (arg))
15459         {
15460           tree fn = OVL_CURRENT (arg);
15461           tree subargs, elem;
15462
15463           if (TREE_CODE (fn) != TEMPLATE_DECL)
15464             continue;
15465
15466           ++processing_template_decl;
15467           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15468                                   expl_subargs, /*check_ret=*/false);
15469           if (subargs && !any_dependent_template_arguments_p (subargs))
15470             {
15471               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15472               if (try_one_overload (tparms, targs, tempargs, parm,
15473                                     elem, strict, sub_strict, addr_p, explain_p)
15474                   && (!goodfn || !decls_match (goodfn, elem)))
15475                 {
15476                   goodfn = elem;
15477                   ++good;
15478                 }
15479             }
15480           else if (subargs)
15481             ++ok;
15482           --processing_template_decl;
15483         }
15484       /* If no templates (or more than one) are fully resolved by the
15485          explicit arguments, this template-id is a non-deduced context; it
15486          could still be OK if we deduce all template arguments for the
15487          enclosing call through other arguments.  */
15488       if (good != 1)
15489         good = ok;
15490     }
15491   else if (TREE_CODE (arg) != OVERLOAD
15492            && TREE_CODE (arg) != FUNCTION_DECL)
15493     /* If ARG is, for example, "(0, &f)" then its type will be unknown
15494        -- but the deduction does not succeed because the expression is
15495        not just the function on its own.  */
15496     return false;
15497   else
15498     for (; arg; arg = OVL_NEXT (arg))
15499       if (try_one_overload (tparms, targs, tempargs, parm,
15500                             TREE_TYPE (OVL_CURRENT (arg)),
15501                             strict, sub_strict, addr_p, explain_p)
15502           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15503         {
15504           goodfn = OVL_CURRENT (arg);
15505           ++good;
15506         }
15507
15508   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15509      to function or pointer to member function argument if the set of
15510      overloaded functions does not contain function templates and at most
15511      one of a set of overloaded functions provides a unique match.
15512
15513      So if we found multiple possibilities, we return success but don't
15514      deduce anything.  */
15515
15516   if (good == 1)
15517     {
15518       int i = TREE_VEC_LENGTH (targs);
15519       for (; i--; )
15520         if (TREE_VEC_ELT (tempargs, i))
15521           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15522     }
15523   if (good)
15524     return true;
15525
15526   return false;
15527 }
15528
15529 /* Core DR 115: In contexts where deduction is done and fails, or in
15530    contexts where deduction is not done, if a template argument list is
15531    specified and it, along with any default template arguments, identifies
15532    a single function template specialization, then the template-id is an
15533    lvalue for the function template specialization.  */
15534
15535 tree
15536 resolve_nondeduced_context (tree orig_expr)
15537 {
15538   tree expr, offset, baselink;
15539   bool addr;
15540
15541   if (!type_unknown_p (orig_expr))
15542     return orig_expr;
15543
15544   expr = orig_expr;
15545   addr = false;
15546   offset = NULL_TREE;
15547   baselink = NULL_TREE;
15548
15549   if (TREE_CODE (expr) == ADDR_EXPR)
15550     {
15551       expr = TREE_OPERAND (expr, 0);
15552       addr = true;
15553     }
15554   if (TREE_CODE (expr) == OFFSET_REF)
15555     {
15556       offset = expr;
15557       expr = TREE_OPERAND (expr, 1);
15558     }
15559   if (BASELINK_P (expr))
15560     {
15561       baselink = expr;
15562       expr = BASELINK_FUNCTIONS (expr);
15563     }
15564
15565   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15566     {
15567       int good = 0;
15568       tree goodfn = NULL_TREE;
15569
15570       /* If we got some explicit template args, we need to plug them into
15571          the affected templates before we try to unify, in case the
15572          explicit args will completely resolve the templates in question.  */
15573
15574       tree expl_subargs = TREE_OPERAND (expr, 1);
15575       tree arg = TREE_OPERAND (expr, 0);
15576       tree badfn = NULL_TREE;
15577       tree badargs = NULL_TREE;
15578
15579       for (; arg; arg = OVL_NEXT (arg))
15580         {
15581           tree fn = OVL_CURRENT (arg);
15582           tree subargs, elem;
15583
15584           if (TREE_CODE (fn) != TEMPLATE_DECL)
15585             continue;
15586
15587           ++processing_template_decl;
15588           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15589                                   expl_subargs, /*check_ret=*/false);
15590           if (subargs && !any_dependent_template_arguments_p (subargs))
15591             {
15592               elem = instantiate_template (fn, subargs, tf_none);
15593               if (elem == error_mark_node)
15594                 {
15595                   badfn = fn;
15596                   badargs = subargs;
15597                 }
15598               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15599                 {
15600                   goodfn = elem;
15601                   ++good;
15602                 }
15603             }
15604           --processing_template_decl;
15605         }
15606       if (good == 1)
15607         {
15608           mark_used (goodfn);
15609           expr = goodfn;
15610           if (baselink)
15611             expr = build_baselink (BASELINK_BINFO (baselink),
15612                                    BASELINK_ACCESS_BINFO (baselink),
15613                                    expr, BASELINK_OPTYPE (baselink));
15614           if (offset)
15615             {
15616               tree base
15617                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15618               expr = build_offset_ref (base, expr, addr);
15619             }
15620           if (addr)
15621             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15622           return expr;
15623         }
15624       else if (good == 0 && badargs)
15625         /* There were no good options and at least one bad one, so let the
15626            user know what the problem is.  */
15627         instantiate_template (badfn, badargs, tf_warning_or_error);
15628     }
15629   return orig_expr;
15630 }
15631
15632 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15633    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15634    different overloads deduce different arguments for a given parm.
15635    ADDR_P is true if the expression for which deduction is being
15636    performed was of the form "& fn" rather than simply "fn".
15637
15638    Returns 1 on success.  */
15639
15640 static int
15641 try_one_overload (tree tparms,
15642                   tree orig_targs,
15643                   tree targs,
15644                   tree parm,
15645                   tree arg,
15646                   unification_kind_t strict,
15647                   int sub_strict,
15648                   bool addr_p,
15649                   bool explain_p)
15650 {
15651   int nargs;
15652   tree tempargs;
15653   int i;
15654
15655   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15656      to function or pointer to member function argument if the set of
15657      overloaded functions does not contain function templates and at most
15658      one of a set of overloaded functions provides a unique match.
15659
15660      So if this is a template, just return success.  */
15661
15662   if (uses_template_parms (arg))
15663     return 1;
15664
15665   if (TREE_CODE (arg) == METHOD_TYPE)
15666     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15667   else if (addr_p)
15668     arg = build_pointer_type (arg);
15669
15670   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15671
15672   /* We don't copy orig_targs for this because if we have already deduced
15673      some template args from previous args, unify would complain when we
15674      try to deduce a template parameter for the same argument, even though
15675      there isn't really a conflict.  */
15676   nargs = TREE_VEC_LENGTH (targs);
15677   tempargs = make_tree_vec (nargs);
15678
15679   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15680     return 0;
15681
15682   /* First make sure we didn't deduce anything that conflicts with
15683      explicitly specified args.  */
15684   for (i = nargs; i--; )
15685     {
15686       tree elt = TREE_VEC_ELT (tempargs, i);
15687       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15688
15689       if (!elt)
15690         /*NOP*/;
15691       else if (uses_template_parms (elt))
15692         /* Since we're unifying against ourselves, we will fill in
15693            template args used in the function parm list with our own
15694            template parms.  Discard them.  */
15695         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15696       else if (oldelt && !template_args_equal (oldelt, elt))
15697         return 0;
15698     }
15699
15700   for (i = nargs; i--; )
15701     {
15702       tree elt = TREE_VEC_ELT (tempargs, i);
15703
15704       if (elt)
15705         TREE_VEC_ELT (targs, i) = elt;
15706     }
15707
15708   return 1;
15709 }
15710
15711 /* PARM is a template class (perhaps with unbound template
15712    parameters).  ARG is a fully instantiated type.  If ARG can be
15713    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15714    TARGS are as for unify.  */
15715
15716 static tree
15717 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15718                        bool explain_p)
15719 {
15720   tree copy_of_targs;
15721
15722   if (!CLASSTYPE_TEMPLATE_INFO (arg)
15723       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15724           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15725     return NULL_TREE;
15726
15727   /* We need to make a new template argument vector for the call to
15728      unify.  If we used TARGS, we'd clutter it up with the result of
15729      the attempted unification, even if this class didn't work out.
15730      We also don't want to commit ourselves to all the unifications
15731      we've already done, since unification is supposed to be done on
15732      an argument-by-argument basis.  In other words, consider the
15733      following pathological case:
15734
15735        template <int I, int J, int K>
15736        struct S {};
15737
15738        template <int I, int J>
15739        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15740
15741        template <int I, int J, int K>
15742        void f(S<I, J, K>, S<I, I, I>);
15743
15744        void g() {
15745          S<0, 0, 0> s0;
15746          S<0, 1, 2> s2;
15747
15748          f(s0, s2);
15749        }
15750
15751      Now, by the time we consider the unification involving `s2', we
15752      already know that we must have `f<0, 0, 0>'.  But, even though
15753      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15754      because there are two ways to unify base classes of S<0, 1, 2>
15755      with S<I, I, I>.  If we kept the already deduced knowledge, we
15756      would reject the possibility I=1.  */
15757   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15758
15759   /* If unification failed, we're done.  */
15760   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15761              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15762     return NULL_TREE;
15763
15764   return arg;
15765 }
15766
15767 /* Given a template type PARM and a class type ARG, find the unique
15768    base type in ARG that is an instance of PARM.  We do not examine
15769    ARG itself; only its base-classes.  If there is not exactly one
15770    appropriate base class, return NULL_TREE.  PARM may be the type of
15771    a partial specialization, as well as a plain template type.  Used
15772    by unify.  */
15773
15774 static enum template_base_result
15775 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15776                    bool explain_p, tree *result)
15777 {
15778   tree rval = NULL_TREE;
15779   tree binfo;
15780
15781   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15782
15783   binfo = TYPE_BINFO (complete_type (arg));
15784   if (!binfo)
15785     {
15786       /* The type could not be completed.  */
15787       *result = NULL_TREE;
15788       return tbr_incomplete_type;
15789     }
15790
15791   /* Walk in inheritance graph order.  The search order is not
15792      important, and this avoids multiple walks of virtual bases.  */
15793   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15794     {
15795       tree r = try_class_unification (tparms, targs, parm,
15796                                       BINFO_TYPE (binfo), explain_p);
15797
15798       if (r)
15799         {
15800           /* If there is more than one satisfactory baseclass, then:
15801
15802                [temp.deduct.call]
15803
15804               If they yield more than one possible deduced A, the type
15805               deduction fails.
15806
15807              applies.  */
15808           if (rval && !same_type_p (r, rval))
15809             {
15810               *result = NULL_TREE;
15811               return tbr_ambiguous_baseclass;
15812             }
15813
15814           rval = r;
15815         }
15816     }
15817
15818   *result = rval;
15819   return tbr_success;
15820 }
15821
15822 /* Returns the level of DECL, which declares a template parameter.  */
15823
15824 static int
15825 template_decl_level (tree decl)
15826 {
15827   switch (TREE_CODE (decl))
15828     {
15829     case TYPE_DECL:
15830     case TEMPLATE_DECL:
15831       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15832
15833     case PARM_DECL:
15834       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15835
15836     default:
15837       gcc_unreachable ();
15838     }
15839   return 0;
15840 }
15841
15842 /* Decide whether ARG can be unified with PARM, considering only the
15843    cv-qualifiers of each type, given STRICT as documented for unify.
15844    Returns nonzero iff the unification is OK on that basis.  */
15845
15846 static int
15847 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15848 {
15849   int arg_quals = cp_type_quals (arg);
15850   int parm_quals = cp_type_quals (parm);
15851
15852   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15853       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15854     {
15855       /*  Although a CVR qualifier is ignored when being applied to a
15856           substituted template parameter ([8.3.2]/1 for example), that
15857           does not allow us to unify "const T" with "int&" because both
15858           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15859           It is ok when we're allowing additional CV qualifiers
15860           at the outer level [14.8.2.1]/3,1st bullet.  */
15861       if ((TREE_CODE (arg) == REFERENCE_TYPE
15862            || TREE_CODE (arg) == FUNCTION_TYPE
15863            || TREE_CODE (arg) == METHOD_TYPE)
15864           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15865         return 0;
15866
15867       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15868           && (parm_quals & TYPE_QUAL_RESTRICT))
15869         return 0;
15870     }
15871
15872   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15873       && (arg_quals & parm_quals) != parm_quals)
15874     return 0;
15875
15876   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15877       && (parm_quals & arg_quals) != arg_quals)
15878     return 0;
15879
15880   return 1;
15881 }
15882
15883 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
15884 void 
15885 template_parm_level_and_index (tree parm, int* level, int* index)
15886 {
15887   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15888       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15889       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15890     {
15891       *index = TEMPLATE_TYPE_IDX (parm);
15892       *level = TEMPLATE_TYPE_LEVEL (parm);
15893     }
15894   else
15895     {
15896       *index = TEMPLATE_PARM_IDX (parm);
15897       *level = TEMPLATE_PARM_LEVEL (parm);
15898     }
15899 }
15900
15901 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15902   do {                                                                  \
15903     if (unify (TP, TA, P, A, S, EP))                                    \
15904       return 1;                                                         \
15905   } while (0);
15906
15907 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15908    expansion at the end of PACKED_PARMS. Returns 0 if the type
15909    deduction succeeds, 1 otherwise. STRICT is the same as in
15910    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15911    call argument list. We'll need to adjust the arguments to make them
15912    types. SUBR tells us if this is from a recursive call to
15913    type_unification_real, or for comparing two template argument
15914    lists. */
15915
15916 static int
15917 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15918                       tree packed_args, unification_kind_t strict,
15919                       bool subr, bool explain_p)
15920 {
15921   tree parm 
15922     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15923   tree pattern = PACK_EXPANSION_PATTERN (parm);
15924   tree pack, packs = NULL_TREE;
15925   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15926   int len = TREE_VEC_LENGTH (packed_args);
15927
15928   /* Determine the parameter packs we will be deducing from the
15929      pattern, and record their current deductions.  */
15930   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15931        pack; pack = TREE_CHAIN (pack))
15932     {
15933       tree parm_pack = TREE_VALUE (pack);
15934       int idx, level;
15935
15936       /* Determine the index and level of this parameter pack.  */
15937       template_parm_level_and_index (parm_pack, &level, &idx);
15938
15939       /* Keep track of the parameter packs and their corresponding
15940          argument packs.  */
15941       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15942       TREE_TYPE (packs) = make_tree_vec (len - start);
15943     }
15944   
15945   /* Loop through all of the arguments that have not yet been
15946      unified and unify each with the pattern.  */
15947   for (i = start; i < len; i++)
15948     {
15949       tree parm;
15950       bool any_explicit = false;
15951       tree arg = TREE_VEC_ELT (packed_args, i);
15952
15953       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
15954          or the element of its argument pack at the current index if
15955          this argument was explicitly specified.  */
15956       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15957         {
15958           int idx, level;
15959           tree arg, pargs;
15960           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15961
15962           arg = NULL_TREE;
15963           if (TREE_VALUE (pack)
15964               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
15965               && (i < TREE_VEC_LENGTH (pargs)))
15966             {
15967               any_explicit = true;
15968               arg = TREE_VEC_ELT (pargs, i);
15969             }
15970           TMPL_ARG (targs, level, idx) = arg;
15971         }
15972
15973       /* If we had explicit template arguments, substitute them into the
15974          pattern before deduction.  */
15975       if (any_explicit)
15976         {
15977           /* Some arguments might still be unspecified or dependent.  */
15978           bool dependent;
15979           ++processing_template_decl;
15980           dependent = any_dependent_template_arguments_p (targs);
15981           if (!dependent)
15982             --processing_template_decl;
15983           parm = tsubst (pattern, targs,
15984                          explain_p ? tf_warning_or_error : tf_none,
15985                          NULL_TREE);
15986           if (dependent)
15987             --processing_template_decl;
15988           if (parm == error_mark_node)
15989             return 1;
15990         }
15991       else
15992         parm = pattern;
15993
15994       /* Unify the pattern with the current argument.  */
15995       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15996                               LOOKUP_IMPLICIT, explain_p))
15997         return 1;
15998
15999       /* For each parameter pack, collect the deduced value.  */
16000       for (pack = packs; pack; pack = TREE_CHAIN (pack))
16001         {
16002           int idx, level;
16003           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16004
16005           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
16006             TMPL_ARG (targs, level, idx);
16007         }
16008     }
16009
16010   /* Verify that the results of unification with the parameter packs
16011      produce results consistent with what we've seen before, and make
16012      the deduced argument packs available.  */
16013   for (pack = packs; pack; pack = TREE_CHAIN (pack))
16014     {
16015       tree old_pack = TREE_VALUE (pack);
16016       tree new_args = TREE_TYPE (pack);
16017       int i, len = TREE_VEC_LENGTH (new_args);
16018       int idx, level;
16019       bool nondeduced_p = false;
16020
16021       /* By default keep the original deduced argument pack.
16022          If necessary, more specific code is going to update the
16023          resulting deduced argument later down in this function.  */
16024       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16025       TMPL_ARG (targs, level, idx) = old_pack;
16026
16027       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
16028          actually deduce anything.  */
16029       for (i = 0; i < len && !nondeduced_p; ++i)
16030         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
16031           nondeduced_p = true;
16032       if (nondeduced_p)
16033         continue;
16034
16035       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
16036         {
16037           /* If we had fewer function args than explicit template args,
16038              just use the explicits.  */
16039           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16040           int explicit_len = TREE_VEC_LENGTH (explicit_args);
16041           if (len < explicit_len)
16042             new_args = explicit_args;
16043         }
16044
16045       if (!old_pack)
16046         {
16047           tree result;
16048           /* Build the deduced *_ARGUMENT_PACK.  */
16049           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
16050             {
16051               result = make_node (NONTYPE_ARGUMENT_PACK);
16052               TREE_TYPE (result) = 
16053                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
16054               TREE_CONSTANT (result) = 1;
16055             }
16056           else
16057             result = cxx_make_type (TYPE_ARGUMENT_PACK);
16058
16059           SET_ARGUMENT_PACK_ARGS (result, new_args);
16060
16061           /* Note the deduced argument packs for this parameter
16062              pack.  */
16063           TMPL_ARG (targs, level, idx) = result;
16064         }
16065       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
16066                && (ARGUMENT_PACK_ARGS (old_pack) 
16067                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
16068         {
16069           /* We only had the explicitly-provided arguments before, but
16070              now we have a complete set of arguments.  */
16071           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16072
16073           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
16074           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
16075           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
16076         }
16077       else
16078         {
16079           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
16080           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
16081
16082           if (!comp_template_args_with_info (old_args, new_args,
16083                                              &bad_old_arg, &bad_new_arg))
16084             /* Inconsistent unification of this parameter pack.  */
16085             return unify_parameter_pack_inconsistent (explain_p,
16086                                                       bad_old_arg,
16087                                                       bad_new_arg);
16088         }
16089     }
16090
16091   return unify_success (explain_p);
16092 }
16093
16094 /* Deduce the value of template parameters.  TPARMS is the (innermost)
16095    set of template parameters to a template.  TARGS is the bindings
16096    for those template parameters, as determined thus far; TARGS may
16097    include template arguments for outer levels of template parameters
16098    as well.  PARM is a parameter to a template function, or a
16099    subcomponent of that parameter; ARG is the corresponding argument.
16100    This function attempts to match PARM with ARG in a manner
16101    consistent with the existing assignments in TARGS.  If more values
16102    are deduced, then TARGS is updated.
16103
16104    Returns 0 if the type deduction succeeds, 1 otherwise.  The
16105    parameter STRICT is a bitwise or of the following flags:
16106
16107      UNIFY_ALLOW_NONE:
16108        Require an exact match between PARM and ARG.
16109      UNIFY_ALLOW_MORE_CV_QUAL:
16110        Allow the deduced ARG to be more cv-qualified (by qualification
16111        conversion) than ARG.
16112      UNIFY_ALLOW_LESS_CV_QUAL:
16113        Allow the deduced ARG to be less cv-qualified than ARG.
16114      UNIFY_ALLOW_DERIVED:
16115        Allow the deduced ARG to be a template base class of ARG,
16116        or a pointer to a template base class of the type pointed to by
16117        ARG.
16118      UNIFY_ALLOW_INTEGER:
16119        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
16120        case for more information.
16121      UNIFY_ALLOW_OUTER_LEVEL:
16122        This is the outermost level of a deduction. Used to determine validity
16123        of qualification conversions. A valid qualification conversion must
16124        have const qualified pointers leading up to the inner type which
16125        requires additional CV quals, except at the outer level, where const
16126        is not required [conv.qual]. It would be normal to set this flag in
16127        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
16128      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
16129        This is the outermost level of a deduction, and PARM can be more CV
16130        qualified at this point.
16131      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
16132        This is the outermost level of a deduction, and PARM can be less CV
16133        qualified at this point.  */
16134
16135 static int
16136 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
16137        bool explain_p)
16138 {
16139   int idx;
16140   tree targ;
16141   tree tparm;
16142   int strict_in = strict;
16143
16144   /* I don't think this will do the right thing with respect to types.
16145      But the only case I've seen it in so far has been array bounds, where
16146      signedness is the only information lost, and I think that will be
16147      okay.  */
16148   while (TREE_CODE (parm) == NOP_EXPR)
16149     parm = TREE_OPERAND (parm, 0);
16150
16151   if (arg == error_mark_node)
16152     return unify_invalid (explain_p);
16153   if (arg == unknown_type_node
16154       || arg == init_list_type_node)
16155     /* We can't deduce anything from this, but we might get all the
16156        template args from other function args.  */
16157     return unify_success (explain_p);
16158
16159   /* If PARM uses template parameters, then we can't bail out here,
16160      even if ARG == PARM, since we won't record unifications for the
16161      template parameters.  We might need them if we're trying to
16162      figure out which of two things is more specialized.  */
16163   if (arg == parm && !uses_template_parms (parm))
16164     return unify_success (explain_p);
16165
16166   /* Handle init lists early, so the rest of the function can assume
16167      we're dealing with a type. */
16168   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
16169     {
16170       tree elt, elttype;
16171       unsigned i;
16172       tree orig_parm = parm;
16173
16174       /* Replace T with std::initializer_list<T> for deduction.  */
16175       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16176           && flag_deduce_init_list)
16177         parm = listify (parm);
16178
16179       if (!is_std_init_list (parm))
16180         /* We can only deduce from an initializer list argument if the
16181            parameter is std::initializer_list; otherwise this is a
16182            non-deduced context. */
16183         return unify_success (explain_p);
16184
16185       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
16186
16187       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
16188         {
16189           int elt_strict = strict;
16190
16191           if (elt == error_mark_node)
16192             return unify_invalid (explain_p);
16193
16194           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
16195             {
16196               tree type = TREE_TYPE (elt);
16197               /* It should only be possible to get here for a call.  */
16198               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16199               elt_strict |= maybe_adjust_types_for_deduction
16200                 (DEDUCE_CALL, &elttype, &type, elt);
16201               elt = type;
16202             }
16203
16204           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16205                                    explain_p);
16206         }
16207
16208       /* If the std::initializer_list<T> deduction worked, replace the
16209          deduced A with std::initializer_list<A>.  */
16210       if (orig_parm != parm)
16211         {
16212           idx = TEMPLATE_TYPE_IDX (orig_parm);
16213           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16214           targ = listify (targ);
16215           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16216         }
16217       return unify_success (explain_p);
16218     }
16219
16220   /* Immediately reject some pairs that won't unify because of
16221      cv-qualification mismatches.  */
16222   if (TREE_CODE (arg) == TREE_CODE (parm)
16223       && TYPE_P (arg)
16224       /* It is the elements of the array which hold the cv quals of an array
16225          type, and the elements might be template type parms. We'll check
16226          when we recurse.  */
16227       && TREE_CODE (arg) != ARRAY_TYPE
16228       /* We check the cv-qualifiers when unifying with template type
16229          parameters below.  We want to allow ARG `const T' to unify with
16230          PARM `T' for example, when computing which of two templates
16231          is more specialized, for example.  */
16232       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16233       && !check_cv_quals_for_unify (strict_in, arg, parm))
16234     return unify_cv_qual_mismatch (explain_p, parm, arg);
16235
16236   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16237       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16238     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16239   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16240   strict &= ~UNIFY_ALLOW_DERIVED;
16241   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16242   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16243
16244   switch (TREE_CODE (parm))
16245     {
16246     case TYPENAME_TYPE:
16247     case SCOPE_REF:
16248     case UNBOUND_CLASS_TEMPLATE:
16249       /* In a type which contains a nested-name-specifier, template
16250          argument values cannot be deduced for template parameters used
16251          within the nested-name-specifier.  */
16252       return unify_success (explain_p);
16253
16254     case TEMPLATE_TYPE_PARM:
16255     case TEMPLATE_TEMPLATE_PARM:
16256     case BOUND_TEMPLATE_TEMPLATE_PARM:
16257       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16258       if (tparm == error_mark_node)
16259         return unify_invalid (explain_p);
16260
16261       if (TEMPLATE_TYPE_LEVEL (parm)
16262           != template_decl_level (tparm))
16263         /* The PARM is not one we're trying to unify.  Just check
16264            to see if it matches ARG.  */
16265         {
16266           if (TREE_CODE (arg) == TREE_CODE (parm)
16267               && same_type_p (parm, arg))
16268             return unify_success (explain_p);
16269           else
16270             return unify_type_mismatch (explain_p, parm, arg);
16271         }
16272       idx = TEMPLATE_TYPE_IDX (parm);
16273       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16274       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16275
16276       /* Check for mixed types and values.  */
16277       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16278            && TREE_CODE (tparm) != TYPE_DECL)
16279           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16280               && TREE_CODE (tparm) != TEMPLATE_DECL))
16281         gcc_unreachable ();
16282
16283       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16284         {
16285           /* ARG must be constructed from a template class or a template
16286              template parameter.  */
16287           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16288               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16289             return unify_template_deduction_failure (explain_p, parm, arg);
16290
16291           {
16292             tree parmvec = TYPE_TI_ARGS (parm);
16293             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16294             tree full_argvec = add_to_template_args (targs, argvec);
16295             tree parm_parms 
16296               = DECL_INNERMOST_TEMPLATE_PARMS
16297                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16298             int i, len;
16299             int parm_variadic_p = 0;
16300
16301             /* The resolution to DR150 makes clear that default
16302                arguments for an N-argument may not be used to bind T
16303                to a template template parameter with fewer than N
16304                parameters.  It is not safe to permit the binding of
16305                default arguments as an extension, as that may change
16306                the meaning of a conforming program.  Consider:
16307
16308                   struct Dense { static const unsigned int dim = 1; };
16309
16310                   template <template <typename> class View,
16311                             typename Block>
16312                   void operator+(float, View<Block> const&);
16313
16314                   template <typename Block,
16315                             unsigned int Dim = Block::dim>
16316                   struct Lvalue_proxy { operator float() const; };
16317
16318                   void
16319                   test_1d (void) {
16320                     Lvalue_proxy<Dense> p;
16321                     float b;
16322                     b + p;
16323                   }
16324
16325               Here, if Lvalue_proxy is permitted to bind to View, then
16326               the global operator+ will be used; if they are not, the
16327               Lvalue_proxy will be converted to float.  */
16328             if (coerce_template_parms (parm_parms,
16329                                        full_argvec,
16330                                        TYPE_TI_TEMPLATE (parm),
16331                                        (explain_p
16332                                         ? tf_warning_or_error
16333                                         : tf_none),
16334                                        /*require_all_args=*/true,
16335                                        /*use_default_args=*/false)
16336                 == error_mark_node)
16337               return 1;
16338
16339             /* Deduce arguments T, i from TT<T> or TT<i>.
16340                We check each element of PARMVEC and ARGVEC individually
16341                rather than the whole TREE_VEC since they can have
16342                different number of elements.  */
16343
16344             parmvec = expand_template_argument_pack (parmvec);
16345             argvec = expand_template_argument_pack (argvec);
16346
16347             len = TREE_VEC_LENGTH (parmvec);
16348
16349             /* Check if the parameters end in a pack, making them
16350                variadic.  */
16351             if (len > 0
16352                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16353               parm_variadic_p = 1;
16354             
16355             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16356               return unify_too_few_arguments (explain_p,
16357                                               TREE_VEC_LENGTH (argvec), len);
16358
16359              for (i = 0; i < len - parm_variadic_p; ++i)
16360               {
16361                 RECUR_AND_CHECK_FAILURE (tparms, targs,
16362                                          TREE_VEC_ELT (parmvec, i),
16363                                          TREE_VEC_ELT (argvec, i),
16364                                          UNIFY_ALLOW_NONE, explain_p);
16365               }
16366
16367             if (parm_variadic_p
16368                 && unify_pack_expansion (tparms, targs,
16369                                          parmvec, argvec,
16370                                          DEDUCE_EXACT,
16371                                          /*subr=*/true, explain_p))
16372               return 1;
16373           }
16374           arg = TYPE_TI_TEMPLATE (arg);
16375
16376           /* Fall through to deduce template name.  */
16377         }
16378
16379       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16380           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16381         {
16382           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
16383
16384           /* Simple cases: Value already set, does match or doesn't.  */
16385           if (targ != NULL_TREE && template_args_equal (targ, arg))
16386             return unify_success (explain_p);
16387           else if (targ)
16388             return unify_inconsistency (explain_p, parm, targ, arg);
16389         }
16390       else
16391         {
16392           /* If PARM is `const T' and ARG is only `int', we don't have
16393              a match unless we are allowing additional qualification.
16394              If ARG is `const int' and PARM is just `T' that's OK;
16395              that binds `const int' to `T'.  */
16396           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16397                                          arg, parm))
16398             return unify_cv_qual_mismatch (explain_p, parm, arg);
16399
16400           /* Consider the case where ARG is `const volatile int' and
16401              PARM is `const T'.  Then, T should be `volatile int'.  */
16402           arg = cp_build_qualified_type_real
16403             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16404           if (arg == error_mark_node)
16405             return unify_invalid (explain_p);
16406
16407           /* Simple cases: Value already set, does match or doesn't.  */
16408           if (targ != NULL_TREE && same_type_p (targ, arg))
16409             return unify_success (explain_p);
16410           else if (targ)
16411             return unify_inconsistency (explain_p, parm, targ, arg);
16412
16413           /* Make sure that ARG is not a variable-sized array.  (Note
16414              that were talking about variable-sized arrays (like
16415              `int[n]'), rather than arrays of unknown size (like
16416              `int[]').)  We'll get very confused by such a type since
16417              the bound of the array is not constant, and therefore
16418              not mangleable.  Besides, such types are not allowed in
16419              ISO C++, so we can do as we please here.  We do allow
16420              them for 'auto' deduction, since that isn't ABI-exposed.  */
16421           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16422             return unify_vla_arg (explain_p, arg);
16423
16424           /* Strip typedefs as in convert_template_argument.  */
16425           arg = canonicalize_type_argument (arg, tf_none);
16426         }
16427
16428       /* If ARG is a parameter pack or an expansion, we cannot unify
16429          against it unless PARM is also a parameter pack.  */
16430       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16431           && !template_parameter_pack_p (parm))
16432         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16433
16434       /* If the argument deduction results is a METHOD_TYPE,
16435          then there is a problem.
16436          METHOD_TYPE doesn't map to any real C++ type the result of
16437          the deduction can not be of that type.  */
16438       if (TREE_CODE (arg) == METHOD_TYPE)
16439         return unify_method_type_error (explain_p, arg);
16440
16441       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16442       return unify_success (explain_p);
16443
16444     case TEMPLATE_PARM_INDEX:
16445       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16446       if (tparm == error_mark_node)
16447         return unify_invalid (explain_p);
16448
16449       if (TEMPLATE_PARM_LEVEL (parm)
16450           != template_decl_level (tparm))
16451         {
16452           /* The PARM is not one we're trying to unify.  Just check
16453              to see if it matches ARG.  */
16454           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16455                          && cp_tree_equal (parm, arg));
16456           if (result)
16457             unify_expression_unequal (explain_p, parm, arg);
16458           return result;
16459         }
16460
16461       idx = TEMPLATE_PARM_IDX (parm);
16462       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16463
16464       if (targ)
16465         {
16466           int x = !cp_tree_equal (targ, arg);
16467           if (x)
16468             unify_inconsistency (explain_p, parm, targ, arg);
16469           return x;
16470         }
16471
16472       /* [temp.deduct.type] If, in the declaration of a function template
16473          with a non-type template-parameter, the non-type
16474          template-parameter is used in an expression in the function
16475          parameter-list and, if the corresponding template-argument is
16476          deduced, the template-argument type shall match the type of the
16477          template-parameter exactly, except that a template-argument
16478          deduced from an array bound may be of any integral type.
16479          The non-type parameter might use already deduced type parameters.  */
16480       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16481       if (!TREE_TYPE (arg))
16482         /* Template-parameter dependent expression.  Just accept it for now.
16483            It will later be processed in convert_template_argument.  */
16484         ;
16485       else if (same_type_p (TREE_TYPE (arg), tparm))
16486         /* OK */;
16487       else if ((strict & UNIFY_ALLOW_INTEGER)
16488                && (TREE_CODE (tparm) == INTEGER_TYPE
16489                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16490         /* Convert the ARG to the type of PARM; the deduced non-type
16491            template argument must exactly match the types of the
16492            corresponding parameter.  */
16493         arg = fold (build_nop (tparm, arg));
16494       else if (uses_template_parms (tparm))
16495         /* We haven't deduced the type of this parameter yet.  Try again
16496            later.  */
16497         return unify_success (explain_p);
16498       else
16499         return unify_type_mismatch (explain_p, tparm, arg);
16500
16501       /* If ARG is a parameter pack or an expansion, we cannot unify
16502          against it unless PARM is also a parameter pack.  */
16503       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16504           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16505         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16506
16507       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16508       return unify_success (explain_p);
16509
16510     case PTRMEM_CST:
16511      {
16512         /* A pointer-to-member constant can be unified only with
16513          another constant.  */
16514       if (TREE_CODE (arg) != PTRMEM_CST)
16515         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16516
16517       /* Just unify the class member. It would be useless (and possibly
16518          wrong, depending on the strict flags) to unify also
16519          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16520          arg refer to the same variable, even if through different
16521          classes. For instance:
16522
16523          struct A { int x; };
16524          struct B : A { };
16525
16526          Unification of &A::x and &B::x must succeed.  */
16527       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16528                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16529      }
16530
16531     case POINTER_TYPE:
16532       {
16533         if (TREE_CODE (arg) != POINTER_TYPE)
16534           return unify_type_mismatch (explain_p, parm, arg);
16535
16536         /* [temp.deduct.call]
16537
16538            A can be another pointer or pointer to member type that can
16539            be converted to the deduced A via a qualification
16540            conversion (_conv.qual_).
16541
16542            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16543            This will allow for additional cv-qualification of the
16544            pointed-to types if appropriate.  */
16545
16546         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16547           /* The derived-to-base conversion only persists through one
16548              level of pointers.  */
16549           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16550
16551         return unify (tparms, targs, TREE_TYPE (parm),
16552                       TREE_TYPE (arg), strict, explain_p);
16553       }
16554
16555     case REFERENCE_TYPE:
16556       if (TREE_CODE (arg) != REFERENCE_TYPE)
16557         return unify_type_mismatch (explain_p, parm, arg);
16558       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16559                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16560
16561     case ARRAY_TYPE:
16562       if (TREE_CODE (arg) != ARRAY_TYPE)
16563         return unify_type_mismatch (explain_p, parm, arg);
16564       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16565           != (TYPE_DOMAIN (arg) == NULL_TREE))
16566         return unify_type_mismatch (explain_p, parm, arg);
16567       if (TYPE_DOMAIN (parm) != NULL_TREE)
16568         {
16569           tree parm_max;
16570           tree arg_max;
16571           bool parm_cst;
16572           bool arg_cst;
16573
16574           /* Our representation of array types uses "N - 1" as the
16575              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16576              not an integer constant.  We cannot unify arbitrarily
16577              complex expressions, so we eliminate the MINUS_EXPRs
16578              here.  */
16579           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16580           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16581           if (!parm_cst)
16582             {
16583               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16584               parm_max = TREE_OPERAND (parm_max, 0);
16585             }
16586           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16587           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16588           if (!arg_cst)
16589             {
16590               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16591                  trying to unify the type of a variable with the type
16592                  of a template parameter.  For example:
16593
16594                    template <unsigned int N>
16595                    void f (char (&) [N]);
16596                    int g(); 
16597                    void h(int i) {
16598                      char a[g(i)];
16599                      f(a); 
16600                    }
16601
16602                 Here, the type of the ARG will be "int [g(i)]", and
16603                 may be a SAVE_EXPR, etc.  */
16604               if (TREE_CODE (arg_max) != MINUS_EXPR)
16605                 return unify_vla_arg (explain_p, arg);
16606               arg_max = TREE_OPERAND (arg_max, 0);
16607             }
16608
16609           /* If only one of the bounds used a MINUS_EXPR, compensate
16610              by adding one to the other bound.  */
16611           if (parm_cst && !arg_cst)
16612             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16613                                     integer_type_node,
16614                                     parm_max,
16615                                     integer_one_node);
16616           else if (arg_cst && !parm_cst)
16617             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16618                                    integer_type_node,
16619                                    arg_max,
16620                                    integer_one_node);
16621
16622           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16623                                    UNIFY_ALLOW_INTEGER, explain_p);
16624         }
16625       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16626                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16627
16628     case REAL_TYPE:
16629     case COMPLEX_TYPE:
16630     case VECTOR_TYPE:
16631     case INTEGER_TYPE:
16632     case BOOLEAN_TYPE:
16633     case ENUMERAL_TYPE:
16634     case VOID_TYPE:
16635     case NULLPTR_TYPE:
16636       if (TREE_CODE (arg) != TREE_CODE (parm))
16637         return unify_type_mismatch (explain_p, parm, arg);
16638
16639       /* We have already checked cv-qualification at the top of the
16640          function.  */
16641       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16642         return unify_type_mismatch (explain_p, parm, arg);
16643
16644       /* As far as unification is concerned, this wins.  Later checks
16645          will invalidate it if necessary.  */
16646       return unify_success (explain_p);
16647
16648       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16649       /* Type INTEGER_CST can come from ordinary constant template args.  */
16650     case INTEGER_CST:
16651       while (TREE_CODE (arg) == NOP_EXPR)
16652         arg = TREE_OPERAND (arg, 0);
16653
16654       if (TREE_CODE (arg) != INTEGER_CST)
16655         return unify_template_argument_mismatch (explain_p, parm, arg);
16656       return (tree_int_cst_equal (parm, arg)
16657               ? unify_success (explain_p)
16658               : unify_template_argument_mismatch (explain_p, parm, arg));
16659
16660     case TREE_VEC:
16661       {
16662         int i, len, argslen;
16663         int parm_variadic_p = 0;
16664
16665         if (TREE_CODE (arg) != TREE_VEC)
16666           return unify_template_argument_mismatch (explain_p, parm, arg);
16667
16668         len = TREE_VEC_LENGTH (parm);
16669         argslen = TREE_VEC_LENGTH (arg);
16670
16671         /* Check for pack expansions in the parameters.  */
16672         for (i = 0; i < len; ++i)
16673           {
16674             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16675               {
16676                 if (i == len - 1)
16677                   /* We can unify against something with a trailing
16678                      parameter pack.  */
16679                   parm_variadic_p = 1;
16680                 else
16681                   /* [temp.deduct.type]/9: If the template argument list of
16682                      P contains a pack expansion that is not the last
16683                      template argument, the entire template argument list
16684                      is a non-deduced context.  */
16685                   return unify_success (explain_p);
16686               }
16687           }
16688
16689         /* If we don't have enough arguments to satisfy the parameters
16690            (not counting the pack expression at the end), or we have
16691            too many arguments for a parameter list that doesn't end in
16692            a pack expression, we can't unify.  */
16693         if (parm_variadic_p
16694             ? argslen < len - parm_variadic_p
16695             : argslen != len)
16696           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16697
16698         /* Unify all of the parameters that precede the (optional)
16699            pack expression.  */
16700         for (i = 0; i < len - parm_variadic_p; ++i)
16701           {
16702             RECUR_AND_CHECK_FAILURE (tparms, targs,
16703                                      TREE_VEC_ELT (parm, i),
16704                                      TREE_VEC_ELT (arg, i),
16705                                      UNIFY_ALLOW_NONE, explain_p);
16706           }
16707         if (parm_variadic_p)
16708           return unify_pack_expansion (tparms, targs, parm, arg,
16709                                        DEDUCE_EXACT,
16710                                        /*subr=*/true, explain_p);
16711         return unify_success (explain_p);
16712       }
16713
16714     case RECORD_TYPE:
16715     case UNION_TYPE:
16716       if (TREE_CODE (arg) != TREE_CODE (parm))
16717         return unify_type_mismatch (explain_p, parm, arg);
16718
16719       if (TYPE_PTRMEMFUNC_P (parm))
16720         {
16721           if (!TYPE_PTRMEMFUNC_P (arg))
16722             return unify_type_mismatch (explain_p, parm, arg);
16723
16724           return unify (tparms, targs,
16725                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
16726                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
16727                         strict, explain_p);
16728         }
16729
16730       if (CLASSTYPE_TEMPLATE_INFO (parm))
16731         {
16732           tree t = NULL_TREE;
16733
16734           if (strict_in & UNIFY_ALLOW_DERIVED)
16735             {
16736               /* First, we try to unify the PARM and ARG directly.  */
16737               t = try_class_unification (tparms, targs,
16738                                          parm, arg, explain_p);
16739
16740               if (!t)
16741                 {
16742                   /* Fallback to the special case allowed in
16743                      [temp.deduct.call]:
16744
16745                        If P is a class, and P has the form
16746                        template-id, then A can be a derived class of
16747                        the deduced A.  Likewise, if P is a pointer to
16748                        a class of the form template-id, A can be a
16749                        pointer to a derived class pointed to by the
16750                        deduced A.  */
16751                   enum template_base_result r;
16752                   r = get_template_base (tparms, targs, parm, arg,
16753                                          explain_p, &t);
16754
16755                   if (!t)
16756                     return unify_no_common_base (explain_p, r, parm, arg);
16757                 }
16758             }
16759           else if (CLASSTYPE_TEMPLATE_INFO (arg)
16760                    && (CLASSTYPE_TI_TEMPLATE (parm)
16761                        == CLASSTYPE_TI_TEMPLATE (arg)))
16762             /* Perhaps PARM is something like S<U> and ARG is S<int>.
16763                Then, we should unify `int' and `U'.  */
16764             t = arg;
16765           else
16766             /* There's no chance of unification succeeding.  */
16767             return unify_type_mismatch (explain_p, parm, arg);
16768
16769           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16770                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16771         }
16772       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16773         return unify_type_mismatch (explain_p, parm, arg);
16774       return unify_success (explain_p);
16775
16776     case METHOD_TYPE:
16777     case FUNCTION_TYPE:
16778       {
16779         unsigned int nargs;
16780         tree *args;
16781         tree a;
16782         unsigned int i;
16783
16784         if (TREE_CODE (arg) != TREE_CODE (parm))
16785           return unify_type_mismatch (explain_p, parm, arg);
16786
16787         /* CV qualifications for methods can never be deduced, they must
16788            match exactly.  We need to check them explicitly here,
16789            because type_unification_real treats them as any other
16790            cv-qualified parameter.  */
16791         if (TREE_CODE (parm) == METHOD_TYPE
16792             && (!check_cv_quals_for_unify
16793                 (UNIFY_ALLOW_NONE,
16794                  class_of_this_parm (arg),
16795                  class_of_this_parm (parm))))
16796           return unify_cv_qual_mismatch (explain_p, parm, arg);
16797
16798         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16799                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16800
16801         nargs = list_length (TYPE_ARG_TYPES (arg));
16802         args = XALLOCAVEC (tree, nargs);
16803         for (a = TYPE_ARG_TYPES (arg), i = 0;
16804              a != NULL_TREE && a != void_list_node;
16805              a = TREE_CHAIN (a), ++i)
16806           args[i] = TREE_VALUE (a);
16807         nargs = i;
16808
16809         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16810                                       args, nargs, 1, DEDUCE_EXACT,
16811                                       LOOKUP_NORMAL, explain_p);
16812       }
16813
16814     case OFFSET_TYPE:
16815       /* Unify a pointer to member with a pointer to member function, which
16816          deduces the type of the member as a function type. */
16817       if (TYPE_PTRMEMFUNC_P (arg))
16818         {
16819           tree method_type;
16820           tree fntype;
16821
16822           /* Check top-level cv qualifiers */
16823           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16824             return unify_cv_qual_mismatch (explain_p, parm, arg);
16825
16826           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16827                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16828                                    UNIFY_ALLOW_NONE, explain_p);
16829
16830           /* Determine the type of the function we are unifying against. */
16831           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16832           fntype =
16833             build_function_type (TREE_TYPE (method_type),
16834                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16835
16836           /* Extract the cv-qualifiers of the member function from the
16837              implicit object parameter and place them on the function
16838              type to be restored later. */
16839           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16840           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16841         }
16842
16843       if (TREE_CODE (arg) != OFFSET_TYPE)
16844         return unify_type_mismatch (explain_p, parm, arg);
16845       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16846                                TYPE_OFFSET_BASETYPE (arg),
16847                                UNIFY_ALLOW_NONE, explain_p);
16848       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16849                     strict, explain_p);
16850
16851     case CONST_DECL:
16852       if (DECL_TEMPLATE_PARM_P (parm))
16853         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16854       if (arg != integral_constant_value (parm))
16855         return unify_template_argument_mismatch (explain_p, parm, arg);
16856       return unify_success (explain_p);
16857
16858     case FIELD_DECL:
16859     case TEMPLATE_DECL:
16860       /* Matched cases are handled by the ARG == PARM test above.  */
16861       return unify_template_argument_mismatch (explain_p, parm, arg);
16862
16863     case VAR_DECL:
16864       /* A non-type template parameter that is a variable should be a
16865          an integral constant, in which case, it whould have been
16866          folded into its (constant) value. So we should not be getting
16867          a variable here.  */
16868       gcc_unreachable ();
16869
16870     case TYPE_ARGUMENT_PACK:
16871     case NONTYPE_ARGUMENT_PACK:
16872       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
16873                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
16874
16875     case TYPEOF_TYPE:
16876     case DECLTYPE_TYPE:
16877     case UNDERLYING_TYPE:
16878       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16879          or UNDERLYING_TYPE nodes.  */
16880       return unify_success (explain_p);
16881
16882     case ERROR_MARK:
16883       /* Unification fails if we hit an error node.  */
16884       return unify_invalid (explain_p);
16885
16886     default:
16887       /* An unresolved overload is a nondeduced context.  */
16888       if (is_overloaded_fn (parm) || type_unknown_p (parm))
16889         return unify_success (explain_p);
16890       gcc_assert (EXPR_P (parm));
16891
16892       /* We must be looking at an expression.  This can happen with
16893          something like:
16894
16895            template <int I>
16896            void foo(S<I>, S<I + 2>);
16897
16898          This is a "nondeduced context":
16899
16900            [deduct.type]
16901
16902            The nondeduced contexts are:
16903
16904            --A type that is a template-id in which one or more of
16905              the template-arguments is an expression that references
16906              a template-parameter.
16907
16908          In these cases, we assume deduction succeeded, but don't
16909          actually infer any unifications.  */
16910
16911       if (!uses_template_parms (parm)
16912           && !template_args_equal (parm, arg))
16913         return unify_expression_unequal (explain_p, parm, arg);
16914       else
16915         return unify_success (explain_p);
16916     }
16917 }
16918 #undef RECUR_AND_CHECK_FAILURE
16919 \f
16920 /* Note that DECL can be defined in this translation unit, if
16921    required.  */
16922
16923 static void
16924 mark_definable (tree decl)
16925 {
16926   tree clone;
16927   DECL_NOT_REALLY_EXTERN (decl) = 1;
16928   FOR_EACH_CLONE (clone, decl)
16929     DECL_NOT_REALLY_EXTERN (clone) = 1;
16930 }
16931
16932 /* Called if RESULT is explicitly instantiated, or is a member of an
16933    explicitly instantiated class.  */
16934
16935 void
16936 mark_decl_instantiated (tree result, int extern_p)
16937 {
16938   SET_DECL_EXPLICIT_INSTANTIATION (result);
16939
16940   /* If this entity has already been written out, it's too late to
16941      make any modifications.  */
16942   if (TREE_ASM_WRITTEN (result))
16943     return;
16944
16945   if (TREE_CODE (result) != FUNCTION_DECL)
16946     /* The TREE_PUBLIC flag for function declarations will have been
16947        set correctly by tsubst.  */
16948     TREE_PUBLIC (result) = 1;
16949
16950   /* This might have been set by an earlier implicit instantiation.  */
16951   DECL_COMDAT (result) = 0;
16952
16953   if (extern_p)
16954     DECL_NOT_REALLY_EXTERN (result) = 0;
16955   else
16956     {
16957       mark_definable (result);
16958       /* Always make artificials weak.  */
16959       if (DECL_ARTIFICIAL (result) && flag_weak)
16960         comdat_linkage (result);
16961       /* For WIN32 we also want to put explicit instantiations in
16962          linkonce sections.  */
16963       else if (TREE_PUBLIC (result))
16964         maybe_make_one_only (result);
16965     }
16966
16967   /* If EXTERN_P, then this function will not be emitted -- unless
16968      followed by an explicit instantiation, at which point its linkage
16969      will be adjusted.  If !EXTERN_P, then this function will be
16970      emitted here.  In neither circumstance do we want
16971      import_export_decl to adjust the linkage.  */
16972   DECL_INTERFACE_KNOWN (result) = 1;
16973 }
16974
16975 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16976    important template arguments.  If any are missing, we check whether
16977    they're important by using error_mark_node for substituting into any
16978    args that were used for partial ordering (the ones between ARGS and END)
16979    and seeing if it bubbles up.  */
16980
16981 static bool
16982 check_undeduced_parms (tree targs, tree args, tree end)
16983 {
16984   bool found = false;
16985   int i;
16986   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16987     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16988       {
16989         found = true;
16990         TREE_VEC_ELT (targs, i) = error_mark_node;
16991       }
16992   if (found)
16993     {
16994       for (; args != end; args = TREE_CHAIN (args))
16995         {
16996           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16997           if (substed == error_mark_node)
16998             return true;
16999         }
17000     }
17001   return false;
17002 }
17003
17004 /* Given two function templates PAT1 and PAT2, return:
17005
17006    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
17007    -1 if PAT2 is more specialized than PAT1.
17008    0 if neither is more specialized.
17009
17010    LEN indicates the number of parameters we should consider
17011    (defaulted parameters should not be considered).
17012
17013    The 1998 std underspecified function template partial ordering, and
17014    DR214 addresses the issue.  We take pairs of arguments, one from
17015    each of the templates, and deduce them against each other.  One of
17016    the templates will be more specialized if all the *other*
17017    template's arguments deduce against its arguments and at least one
17018    of its arguments *does* *not* deduce against the other template's
17019    corresponding argument.  Deduction is done as for class templates.
17020    The arguments used in deduction have reference and top level cv
17021    qualifiers removed.  Iff both arguments were originally reference
17022    types *and* deduction succeeds in both directions, the template
17023    with the more cv-qualified argument wins for that pairing (if
17024    neither is more cv-qualified, they both are equal).  Unlike regular
17025    deduction, after all the arguments have been deduced in this way,
17026    we do *not* verify the deduced template argument values can be
17027    substituted into non-deduced contexts.
17028
17029    The logic can be a bit confusing here, because we look at deduce1 and
17030    targs1 to see if pat2 is at least as specialized, and vice versa; if we
17031    can find template arguments for pat1 to make arg1 look like arg2, that
17032    means that arg2 is at least as specialized as arg1.  */
17033
17034 int
17035 more_specialized_fn (tree pat1, tree pat2, int len)
17036 {
17037   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
17038   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
17039   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
17040   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
17041   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
17042   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
17043   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
17044   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
17045   tree origs1, origs2;
17046   bool lose1 = false;
17047   bool lose2 = false;
17048
17049   /* Remove the this parameter from non-static member functions.  If
17050      one is a non-static member function and the other is not a static
17051      member function, remove the first parameter from that function
17052      also.  This situation occurs for operator functions where we
17053      locate both a member function (with this pointer) and non-member
17054      operator (with explicit first operand).  */
17055   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
17056     {
17057       len--; /* LEN is the number of significant arguments for DECL1 */
17058       args1 = TREE_CHAIN (args1);
17059       if (!DECL_STATIC_FUNCTION_P (decl2))
17060         args2 = TREE_CHAIN (args2);
17061     }
17062   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
17063     {
17064       args2 = TREE_CHAIN (args2);
17065       if (!DECL_STATIC_FUNCTION_P (decl1))
17066         {
17067           len--;
17068           args1 = TREE_CHAIN (args1);
17069         }
17070     }
17071
17072   /* If only one is a conversion operator, they are unordered.  */
17073   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
17074     return 0;
17075
17076   /* Consider the return type for a conversion function */
17077   if (DECL_CONV_FN_P (decl1))
17078     {
17079       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
17080       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
17081       len++;
17082     }
17083
17084   processing_template_decl++;
17085
17086   origs1 = args1;
17087   origs2 = args2;
17088
17089   while (len--
17090          /* Stop when an ellipsis is seen.  */
17091          && args1 != NULL_TREE && args2 != NULL_TREE)
17092     {
17093       tree arg1 = TREE_VALUE (args1);
17094       tree arg2 = TREE_VALUE (args2);
17095       int deduce1, deduce2;
17096       int quals1 = -1;
17097       int quals2 = -1;
17098
17099       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17100           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17101         {
17102           /* When both arguments are pack expansions, we need only
17103              unify the patterns themselves.  */
17104           arg1 = PACK_EXPANSION_PATTERN (arg1);
17105           arg2 = PACK_EXPANSION_PATTERN (arg2);
17106
17107           /* This is the last comparison we need to do.  */
17108           len = 0;
17109         }
17110
17111       if (TREE_CODE (arg1) == REFERENCE_TYPE)
17112         {
17113           arg1 = TREE_TYPE (arg1);
17114           quals1 = cp_type_quals (arg1);
17115         }
17116
17117       if (TREE_CODE (arg2) == REFERENCE_TYPE)
17118         {
17119           arg2 = TREE_TYPE (arg2);
17120           quals2 = cp_type_quals (arg2);
17121         }
17122
17123       if ((quals1 < 0) != (quals2 < 0))
17124         {
17125           /* Only of the args is a reference, see if we should apply
17126              array/function pointer decay to it.  This is not part of
17127              DR214, but is, IMHO, consistent with the deduction rules
17128              for the function call itself, and with our earlier
17129              implementation of the underspecified partial ordering
17130              rules.  (nathan).  */
17131           if (quals1 >= 0)
17132             {
17133               switch (TREE_CODE (arg1))
17134                 {
17135                 case ARRAY_TYPE:
17136                   arg1 = TREE_TYPE (arg1);
17137                   /* FALLTHROUGH. */
17138                 case FUNCTION_TYPE:
17139                   arg1 = build_pointer_type (arg1);
17140                   break;
17141
17142                 default:
17143                   break;
17144                 }
17145             }
17146           else
17147             {
17148               switch (TREE_CODE (arg2))
17149                 {
17150                 case ARRAY_TYPE:
17151                   arg2 = TREE_TYPE (arg2);
17152                   /* FALLTHROUGH. */
17153                 case FUNCTION_TYPE:
17154                   arg2 = build_pointer_type (arg2);
17155                   break;
17156
17157                 default:
17158                   break;
17159                 }
17160             }
17161         }
17162
17163       arg1 = TYPE_MAIN_VARIANT (arg1);
17164       arg2 = TYPE_MAIN_VARIANT (arg2);
17165
17166       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
17167         {
17168           int i, len2 = list_length (args2);
17169           tree parmvec = make_tree_vec (1);
17170           tree argvec = make_tree_vec (len2);
17171           tree ta = args2;
17172
17173           /* Setup the parameter vector, which contains only ARG1.  */
17174           TREE_VEC_ELT (parmvec, 0) = arg1;
17175
17176           /* Setup the argument vector, which contains the remaining
17177              arguments.  */
17178           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
17179             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17180
17181           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
17182                                            argvec, DEDUCE_EXACT,
17183                                            /*subr=*/true, /*explain_p=*/false)
17184                      == 0);
17185
17186           /* We cannot deduce in the other direction, because ARG1 is
17187              a pack expansion but ARG2 is not.  */
17188           deduce2 = 0;
17189         }
17190       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17191         {
17192           int i, len1 = list_length (args1);
17193           tree parmvec = make_tree_vec (1);
17194           tree argvec = make_tree_vec (len1);
17195           tree ta = args1;
17196
17197           /* Setup the parameter vector, which contains only ARG1.  */
17198           TREE_VEC_ELT (parmvec, 0) = arg2;
17199
17200           /* Setup the argument vector, which contains the remaining
17201              arguments.  */
17202           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17203             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17204
17205           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17206                                            argvec, DEDUCE_EXACT,
17207                                            /*subr=*/true, /*explain_p=*/false)
17208                      == 0);
17209
17210           /* We cannot deduce in the other direction, because ARG2 is
17211              a pack expansion but ARG1 is not.*/
17212           deduce1 = 0;
17213         }
17214
17215       else
17216         {
17217           /* The normal case, where neither argument is a pack
17218              expansion.  */
17219           deduce1 = (unify (tparms1, targs1, arg1, arg2,
17220                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17221                      == 0);
17222           deduce2 = (unify (tparms2, targs2, arg2, arg1,
17223                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17224                      == 0);
17225         }
17226
17227       /* If we couldn't deduce arguments for tparms1 to make arg1 match
17228          arg2, then arg2 is not as specialized as arg1.  */
17229       if (!deduce1)
17230         lose2 = true;
17231       if (!deduce2)
17232         lose1 = true;
17233
17234       /* "If, for a given type, deduction succeeds in both directions
17235          (i.e., the types are identical after the transformations above)
17236          and if the type from the argument template is more cv-qualified
17237          than the type from the parameter template (as described above)
17238          that type is considered to be more specialized than the other. If
17239          neither type is more cv-qualified than the other then neither type
17240          is more specialized than the other."  */
17241
17242       if (deduce1 && deduce2
17243           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17244         {
17245           if ((quals1 & quals2) == quals2)
17246             lose2 = true;
17247           if ((quals1 & quals2) == quals1)
17248             lose1 = true;
17249         }
17250
17251       if (lose1 && lose2)
17252         /* We've failed to deduce something in either direction.
17253            These must be unordered.  */
17254         break;
17255
17256       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17257           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17258         /* We have already processed all of the arguments in our
17259            handing of the pack expansion type.  */
17260         len = 0;
17261
17262       args1 = TREE_CHAIN (args1);
17263       args2 = TREE_CHAIN (args2);
17264     }
17265
17266   /* "In most cases, all template parameters must have values in order for
17267      deduction to succeed, but for partial ordering purposes a template
17268      parameter may remain without a value provided it is not used in the
17269      types being used for partial ordering."
17270
17271      Thus, if we are missing any of the targs1 we need to substitute into
17272      origs1, then pat2 is not as specialized as pat1.  This can happen when
17273      there is a nondeduced context.  */
17274   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17275     lose2 = true;
17276   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17277     lose1 = true;
17278
17279   processing_template_decl--;
17280
17281   /* All things being equal, if the next argument is a pack expansion
17282      for one function but not for the other, prefer the
17283      non-variadic function.  FIXME this is bogus; see c++/41958.  */
17284   if (lose1 == lose2
17285       && args1 && TREE_VALUE (args1)
17286       && args2 && TREE_VALUE (args2))
17287     {
17288       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17289       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17290     }
17291
17292   if (lose1 == lose2)
17293     return 0;
17294   else if (!lose1)
17295     return 1;
17296   else
17297     return -1;
17298 }
17299
17300 /* Determine which of two partial specializations is more specialized.
17301
17302    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17303    to the first partial specialization.  The TREE_VALUE is the
17304    innermost set of template parameters for the partial
17305    specialization.  PAT2 is similar, but for the second template.
17306
17307    Return 1 if the first partial specialization is more specialized;
17308    -1 if the second is more specialized; 0 if neither is more
17309    specialized.
17310
17311    See [temp.class.order] for information about determining which of
17312    two templates is more specialized.  */
17313
17314 static int
17315 more_specialized_class (tree pat1, tree pat2)
17316 {
17317   tree targs;
17318   tree tmpl1, tmpl2;
17319   int winner = 0;
17320   bool any_deductions = false;
17321
17322   tmpl1 = TREE_TYPE (pat1);
17323   tmpl2 = TREE_TYPE (pat2);
17324
17325   /* Just like what happens for functions, if we are ordering between
17326      different class template specializations, we may encounter dependent
17327      types in the arguments, and we need our dependency check functions
17328      to behave correctly.  */
17329   ++processing_template_decl;
17330   targs = get_class_bindings (TREE_VALUE (pat1),
17331                               CLASSTYPE_TI_ARGS (tmpl1),
17332                               CLASSTYPE_TI_ARGS (tmpl2));
17333   if (targs)
17334     {
17335       --winner;
17336       any_deductions = true;
17337     }
17338
17339   targs = get_class_bindings (TREE_VALUE (pat2),
17340                               CLASSTYPE_TI_ARGS (tmpl2),
17341                               CLASSTYPE_TI_ARGS (tmpl1));
17342   if (targs)
17343     {
17344       ++winner;
17345       any_deductions = true;
17346     }
17347   --processing_template_decl;
17348
17349   /* In the case of a tie where at least one of the class templates
17350      has a parameter pack at the end, the template with the most
17351      non-packed parameters wins.  */
17352   if (winner == 0
17353       && any_deductions
17354       && (template_args_variadic_p (TREE_PURPOSE (pat1))
17355           || template_args_variadic_p (TREE_PURPOSE (pat2))))
17356     {
17357       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17358       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17359       int len1 = TREE_VEC_LENGTH (args1);
17360       int len2 = TREE_VEC_LENGTH (args2);
17361
17362       /* We don't count the pack expansion at the end.  */
17363       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17364         --len1;
17365       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17366         --len2;
17367
17368       if (len1 > len2)
17369         return 1;
17370       else if (len1 < len2)
17371         return -1;
17372     }
17373
17374   return winner;
17375 }
17376
17377 /* Return the template arguments that will produce the function signature
17378    DECL from the function template FN, with the explicit template
17379    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
17380    also match.  Return NULL_TREE if no satisfactory arguments could be
17381    found.  */
17382
17383 static tree
17384 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17385 {
17386   int ntparms = DECL_NTPARMS (fn);
17387   tree targs = make_tree_vec (ntparms);
17388   tree decl_type;
17389   tree decl_arg_types;
17390   tree *args;
17391   unsigned int nargs, ix;
17392   tree arg;
17393
17394   /* Substitute the explicit template arguments into the type of DECL.
17395      The call to fn_type_unification will handle substitution into the
17396      FN.  */
17397   decl_type = TREE_TYPE (decl);
17398   if (explicit_args && uses_template_parms (decl_type))
17399     {
17400       tree tmpl;
17401       tree converted_args;
17402
17403       if (DECL_TEMPLATE_INFO (decl))
17404         tmpl = DECL_TI_TEMPLATE (decl);
17405       else
17406         /* We can get here for some invalid specializations.  */
17407         return NULL_TREE;
17408
17409       converted_args
17410         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17411                                  explicit_args, NULL_TREE,
17412                                  tf_none,
17413                                  /*require_all_args=*/false,
17414                                  /*use_default_args=*/false);
17415       if (converted_args == error_mark_node)
17416         return NULL_TREE;
17417
17418       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
17419       if (decl_type == error_mark_node)
17420         return NULL_TREE;
17421     }
17422
17423   /* Never do unification on the 'this' parameter.  */
17424   decl_arg_types = skip_artificial_parms_for (decl, 
17425                                               TYPE_ARG_TYPES (decl_type));
17426
17427   nargs = list_length (decl_arg_types);
17428   args = XALLOCAVEC (tree, nargs);
17429   for (arg = decl_arg_types, ix = 0;
17430        arg != NULL_TREE && arg != void_list_node;
17431        arg = TREE_CHAIN (arg), ++ix)
17432     args[ix] = TREE_VALUE (arg);
17433
17434   if (fn_type_unification (fn, explicit_args, targs,
17435                            args, ix,
17436                            (check_rettype || DECL_CONV_FN_P (fn)
17437                             ? TREE_TYPE (decl_type) : NULL_TREE),
17438                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
17439     return NULL_TREE;
17440
17441   return targs;
17442 }
17443
17444 /* Return the innermost template arguments that, when applied to a
17445    template specialization whose innermost template parameters are
17446    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17447    ARGS.
17448
17449    For example, suppose we have:
17450
17451      template <class T, class U> struct S {};
17452      template <class T> struct S<T*, int> {};
17453
17454    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
17455    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17456    int}.  The resulting vector will be {double}, indicating that `T'
17457    is bound to `double'.  */
17458
17459 static tree
17460 get_class_bindings (tree tparms, tree spec_args, tree args)
17461 {
17462   int i, ntparms = TREE_VEC_LENGTH (tparms);
17463   tree deduced_args;
17464   tree innermost_deduced_args;
17465
17466   innermost_deduced_args = make_tree_vec (ntparms);
17467   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17468     {
17469       deduced_args = copy_node (args);
17470       SET_TMPL_ARGS_LEVEL (deduced_args,
17471                            TMPL_ARGS_DEPTH (deduced_args),
17472                            innermost_deduced_args);
17473     }
17474   else
17475     deduced_args = innermost_deduced_args;
17476
17477   if (unify (tparms, deduced_args,
17478              INNERMOST_TEMPLATE_ARGS (spec_args),
17479              INNERMOST_TEMPLATE_ARGS (args),
17480              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17481     return NULL_TREE;
17482
17483   for (i =  0; i < ntparms; ++i)
17484     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17485       return NULL_TREE;
17486
17487   /* Verify that nondeduced template arguments agree with the type
17488      obtained from argument deduction.
17489
17490      For example:
17491
17492        struct A { typedef int X; };
17493        template <class T, class U> struct C {};
17494        template <class T> struct C<T, typename T::X> {};
17495
17496      Then with the instantiation `C<A, int>', we can deduce that
17497      `T' is `A' but unify () does not check whether `typename T::X'
17498      is `int'.  */
17499   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17500   if (spec_args == error_mark_node
17501       /* We only need to check the innermost arguments; the other
17502          arguments will always agree.  */
17503       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17504                               INNERMOST_TEMPLATE_ARGS (args)))
17505     return NULL_TREE;
17506
17507   /* Now that we have bindings for all of the template arguments,
17508      ensure that the arguments deduced for the template template
17509      parameters have compatible template parameter lists.  See the use
17510      of template_template_parm_bindings_ok_p in fn_type_unification
17511      for more information.  */
17512   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17513     return NULL_TREE;
17514
17515   return deduced_args;
17516 }
17517
17518 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17519    Return the TREE_LIST node with the most specialized template, if
17520    any.  If there is no most specialized template, the error_mark_node
17521    is returned.
17522
17523    Note that this function does not look at, or modify, the
17524    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17525    returned is one of the elements of INSTANTIATIONS, callers may
17526    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17527    and retrieve it from the value returned.  */
17528
17529 tree
17530 most_specialized_instantiation (tree templates)
17531 {
17532   tree fn, champ;
17533
17534   ++processing_template_decl;
17535
17536   champ = templates;
17537   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17538     {
17539       int fate = 0;
17540
17541       if (get_bindings (TREE_VALUE (champ),
17542                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17543                         NULL_TREE, /*check_ret=*/true))
17544         fate--;
17545
17546       if (get_bindings (TREE_VALUE (fn),
17547                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17548                         NULL_TREE, /*check_ret=*/true))
17549         fate++;
17550
17551       if (fate == -1)
17552         champ = fn;
17553       else if (!fate)
17554         {
17555           /* Equally specialized, move to next function.  If there
17556              is no next function, nothing's most specialized.  */
17557           fn = TREE_CHAIN (fn);
17558           champ = fn;
17559           if (!fn)
17560             break;
17561         }
17562     }
17563
17564   if (champ)
17565     /* Now verify that champ is better than everything earlier in the
17566        instantiation list.  */
17567     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17568       if (get_bindings (TREE_VALUE (champ),
17569                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17570                         NULL_TREE, /*check_ret=*/true)
17571           || !get_bindings (TREE_VALUE (fn),
17572                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17573                             NULL_TREE, /*check_ret=*/true))
17574         {
17575           champ = NULL_TREE;
17576           break;
17577         }
17578
17579   processing_template_decl--;
17580
17581   if (!champ)
17582     return error_mark_node;
17583
17584   return champ;
17585 }
17586
17587 /* If DECL is a specialization of some template, return the most
17588    general such template.  Otherwise, returns NULL_TREE.
17589
17590    For example, given:
17591
17592      template <class T> struct S { template <class U> void f(U); };
17593
17594    if TMPL is `template <class U> void S<int>::f(U)' this will return
17595    the full template.  This function will not trace past partial
17596    specializations, however.  For example, given in addition:
17597
17598      template <class T> struct S<T*> { template <class U> void f(U); };
17599
17600    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17601    `template <class T> template <class U> S<T*>::f(U)'.  */
17602
17603 tree
17604 most_general_template (tree decl)
17605 {
17606   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17607      an immediate specialization.  */
17608   if (TREE_CODE (decl) == FUNCTION_DECL)
17609     {
17610       if (DECL_TEMPLATE_INFO (decl)) {
17611         decl = DECL_TI_TEMPLATE (decl);
17612
17613         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17614            template friend.  */
17615         if (TREE_CODE (decl) != TEMPLATE_DECL)
17616           return NULL_TREE;
17617       } else
17618         return NULL_TREE;
17619     }
17620
17621   /* Look for more and more general templates.  */
17622   while (DECL_TEMPLATE_INFO (decl))
17623     {
17624       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17625          (See cp-tree.h for details.)  */
17626       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17627         break;
17628
17629       if (CLASS_TYPE_P (TREE_TYPE (decl))
17630           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17631         break;
17632
17633       /* Stop if we run into an explicitly specialized class template.  */
17634       if (!DECL_NAMESPACE_SCOPE_P (decl)
17635           && DECL_CONTEXT (decl)
17636           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17637         break;
17638
17639       decl = DECL_TI_TEMPLATE (decl);
17640     }
17641
17642   return decl;
17643 }
17644
17645 /* Return the most specialized of the class template partial
17646    specializations of TMPL which can produce TYPE, a specialization of
17647    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17648    a _TYPE node corresponding to the partial specialization, while the
17649    TREE_PURPOSE is the set of template arguments that must be
17650    substituted into the TREE_TYPE in order to generate TYPE.
17651
17652    If the choice of partial specialization is ambiguous, a diagnostic
17653    is issued, and the error_mark_node is returned.  If there are no
17654    partial specializations of TMPL matching TYPE, then NULL_TREE is
17655    returned.  */
17656
17657 static tree
17658 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17659 {
17660   tree list = NULL_TREE;
17661   tree t;
17662   tree champ;
17663   int fate;
17664   bool ambiguous_p;
17665   tree args;
17666   tree outer_args = NULL_TREE;
17667
17668   tmpl = most_general_template (tmpl);
17669   args = CLASSTYPE_TI_ARGS (type);
17670
17671   /* For determining which partial specialization to use, only the
17672      innermost args are interesting.  */
17673   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17674     {
17675       outer_args = strip_innermost_template_args (args, 1);
17676       args = INNERMOST_TEMPLATE_ARGS (args);
17677     }
17678
17679   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17680     {
17681       tree partial_spec_args;
17682       tree spec_args;
17683       tree parms = TREE_VALUE (t);
17684
17685       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17686
17687       ++processing_template_decl;
17688
17689       if (outer_args)
17690         {
17691           int i;
17692
17693           /* Discard the outer levels of args, and then substitute in the
17694              template args from the enclosing class.  */
17695           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17696           partial_spec_args = tsubst_template_args
17697             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17698
17699           /* PARMS already refers to just the innermost parms, but the
17700              template parms in partial_spec_args had their levels lowered
17701              by tsubst, so we need to do the same for the parm list.  We
17702              can't just tsubst the TREE_VEC itself, as tsubst wants to
17703              treat a TREE_VEC as an argument vector.  */
17704           parms = copy_node (parms);
17705           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17706             TREE_VEC_ELT (parms, i) =
17707               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17708
17709         }
17710
17711       partial_spec_args =
17712           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17713                                  add_to_template_args (outer_args,
17714                                                        partial_spec_args),
17715                                  tmpl, tf_none,
17716                                  /*require_all_args=*/true,
17717                                  /*use_default_args=*/true);
17718
17719       --processing_template_decl;
17720
17721       if (partial_spec_args == error_mark_node)
17722         return error_mark_node;
17723
17724       spec_args = get_class_bindings (parms,
17725                                       partial_spec_args,
17726                                       args);
17727       if (spec_args)
17728         {
17729           if (outer_args)
17730             spec_args = add_to_template_args (outer_args, spec_args);
17731           list = tree_cons (spec_args, TREE_VALUE (t), list);
17732           TREE_TYPE (list) = TREE_TYPE (t);
17733         }
17734     }
17735
17736   if (! list)
17737     return NULL_TREE;
17738
17739   ambiguous_p = false;
17740   t = list;
17741   champ = t;
17742   t = TREE_CHAIN (t);
17743   for (; t; t = TREE_CHAIN (t))
17744     {
17745       fate = more_specialized_class (champ, t);
17746       if (fate == 1)
17747         ;
17748       else
17749         {
17750           if (fate == 0)
17751             {
17752               t = TREE_CHAIN (t);
17753               if (! t)
17754                 {
17755                   ambiguous_p = true;
17756                   break;
17757                 }
17758             }
17759           champ = t;
17760         }
17761     }
17762
17763   if (!ambiguous_p)
17764     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17765       {
17766         fate = more_specialized_class (champ, t);
17767         if (fate != 1)
17768           {
17769             ambiguous_p = true;
17770             break;
17771           }
17772       }
17773
17774   if (ambiguous_p)
17775     {
17776       const char *str;
17777       char *spaces = NULL;
17778       if (!(complain & tf_error))
17779         return error_mark_node;
17780       error ("ambiguous class template instantiation for %q#T", type);
17781       str = ngettext ("candidate is:", "candidates are:", list_length (list));
17782       for (t = list; t; t = TREE_CHAIN (t))
17783         {
17784           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17785           spaces = spaces ? spaces : get_spaces (str);
17786         }
17787       free (spaces);
17788       return error_mark_node;
17789     }
17790
17791   return champ;
17792 }
17793
17794 /* Explicitly instantiate DECL.  */
17795
17796 void
17797 do_decl_instantiation (tree decl, tree storage)
17798 {
17799   tree result = NULL_TREE;
17800   int extern_p = 0;
17801
17802   if (!decl || decl == error_mark_node)
17803     /* An error occurred, for which grokdeclarator has already issued
17804        an appropriate message.  */
17805     return;
17806   else if (! DECL_LANG_SPECIFIC (decl))
17807     {
17808       error ("explicit instantiation of non-template %q#D", decl);
17809       return;
17810     }
17811   else if (TREE_CODE (decl) == VAR_DECL)
17812     {
17813       /* There is an asymmetry here in the way VAR_DECLs and
17814          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17815          the latter, the DECL we get back will be marked as a
17816          template instantiation, and the appropriate
17817          DECL_TEMPLATE_INFO will be set up.  This does not happen for
17818          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17819          should handle VAR_DECLs as it currently handles
17820          FUNCTION_DECLs.  */
17821       if (!DECL_CLASS_SCOPE_P (decl))
17822         {
17823           error ("%qD is not a static data member of a class template", decl);
17824           return;
17825         }
17826       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17827       if (!result || TREE_CODE (result) != VAR_DECL)
17828         {
17829           error ("no matching template for %qD found", decl);
17830           return;
17831         }
17832       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17833         {
17834           error ("type %qT for explicit instantiation %qD does not match "
17835                  "declared type %qT", TREE_TYPE (result), decl,
17836                  TREE_TYPE (decl));
17837           return;
17838         }
17839     }
17840   else if (TREE_CODE (decl) != FUNCTION_DECL)
17841     {
17842       error ("explicit instantiation of %q#D", decl);
17843       return;
17844     }
17845   else
17846     result = decl;
17847
17848   /* Check for various error cases.  Note that if the explicit
17849      instantiation is valid the RESULT will currently be marked as an
17850      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17851      until we get here.  */
17852
17853   if (DECL_TEMPLATE_SPECIALIZATION (result))
17854     {
17855       /* DR 259 [temp.spec].
17856
17857          Both an explicit instantiation and a declaration of an explicit
17858          specialization shall not appear in a program unless the explicit
17859          instantiation follows a declaration of the explicit specialization.
17860
17861          For a given set of template parameters, if an explicit
17862          instantiation of a template appears after a declaration of an
17863          explicit specialization for that template, the explicit
17864          instantiation has no effect.  */
17865       return;
17866     }
17867   else if (DECL_EXPLICIT_INSTANTIATION (result))
17868     {
17869       /* [temp.spec]
17870
17871          No program shall explicitly instantiate any template more
17872          than once.
17873
17874          We check DECL_NOT_REALLY_EXTERN so as not to complain when
17875          the first instantiation was `extern' and the second is not,
17876          and EXTERN_P for the opposite case.  */
17877       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17878         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17879       /* If an "extern" explicit instantiation follows an ordinary
17880          explicit instantiation, the template is instantiated.  */
17881       if (extern_p)
17882         return;
17883     }
17884   else if (!DECL_IMPLICIT_INSTANTIATION (result))
17885     {
17886       error ("no matching template for %qD found", result);
17887       return;
17888     }
17889   else if (!DECL_TEMPLATE_INFO (result))
17890     {
17891       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17892       return;
17893     }
17894
17895   if (storage == NULL_TREE)
17896     ;
17897   else if (storage == ridpointers[(int) RID_EXTERN])
17898     {
17899       if (!in_system_header && (cxx_dialect == cxx98))
17900         pedwarn (input_location, OPT_pedantic, 
17901                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17902                  "instantiations");
17903       extern_p = 1;
17904     }
17905   else
17906     error ("storage class %qD applied to template instantiation", storage);
17907
17908   check_explicit_instantiation_namespace (result);
17909   mark_decl_instantiated (result, extern_p);
17910   if (! extern_p)
17911     instantiate_decl (result, /*defer_ok=*/1,
17912                       /*expl_inst_class_mem_p=*/false);
17913 }
17914
17915 static void
17916 mark_class_instantiated (tree t, int extern_p)
17917 {
17918   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17919   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17920   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17921   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17922   if (! extern_p)
17923     {
17924       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17925       rest_of_type_compilation (t, 1);
17926     }
17927 }
17928
17929 /* Called from do_type_instantiation through binding_table_foreach to
17930    do recursive instantiation for the type bound in ENTRY.  */
17931 static void
17932 bt_instantiate_type_proc (binding_entry entry, void *data)
17933 {
17934   tree storage = *(tree *) data;
17935
17936   if (MAYBE_CLASS_TYPE_P (entry->type)
17937       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17938     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17939 }
17940
17941 /* Called from do_type_instantiation to instantiate a member
17942    (a member function or a static member variable) of an
17943    explicitly instantiated class template.  */
17944 static void
17945 instantiate_class_member (tree decl, int extern_p)
17946 {
17947   mark_decl_instantiated (decl, extern_p);
17948   if (! extern_p)
17949     instantiate_decl (decl, /*defer_ok=*/1,
17950                       /*expl_inst_class_mem_p=*/true);
17951 }
17952
17953 /* Perform an explicit instantiation of template class T.  STORAGE, if
17954    non-null, is the RID for extern, inline or static.  COMPLAIN is
17955    nonzero if this is called from the parser, zero if called recursively,
17956    since the standard is unclear (as detailed below).  */
17957
17958 void
17959 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17960 {
17961   int extern_p = 0;
17962   int nomem_p = 0;
17963   int static_p = 0;
17964   int previous_instantiation_extern_p = 0;
17965
17966   if (TREE_CODE (t) == TYPE_DECL)
17967     t = TREE_TYPE (t);
17968
17969   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17970     {
17971       tree tmpl =
17972         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
17973       if (tmpl)
17974         error ("explicit instantiation of non-class template %qD", tmpl);
17975       else
17976         error ("explicit instantiation of non-template type %qT", t);
17977       return;
17978     }
17979
17980   complete_type (t);
17981
17982   if (!COMPLETE_TYPE_P (t))
17983     {
17984       if (complain & tf_error)
17985         error ("explicit instantiation of %q#T before definition of template",
17986                t);
17987       return;
17988     }
17989
17990   if (storage != NULL_TREE)
17991     {
17992       if (!in_system_header)
17993         {
17994           if (storage == ridpointers[(int) RID_EXTERN])
17995             {
17996               if (cxx_dialect == cxx98)
17997                 pedwarn (input_location, OPT_pedantic, 
17998                          "ISO C++ 1998 forbids the use of %<extern%> on "
17999                          "explicit instantiations");
18000             }
18001           else
18002             pedwarn (input_location, OPT_pedantic, 
18003                      "ISO C++ forbids the use of %qE"
18004                      " on explicit instantiations", storage);
18005         }
18006
18007       if (storage == ridpointers[(int) RID_INLINE])
18008         nomem_p = 1;
18009       else if (storage == ridpointers[(int) RID_EXTERN])
18010         extern_p = 1;
18011       else if (storage == ridpointers[(int) RID_STATIC])
18012         static_p = 1;
18013       else
18014         {
18015           error ("storage class %qD applied to template instantiation",
18016                  storage);
18017           extern_p = 0;
18018         }
18019     }
18020
18021   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
18022     {
18023       /* DR 259 [temp.spec].
18024
18025          Both an explicit instantiation and a declaration of an explicit
18026          specialization shall not appear in a program unless the explicit
18027          instantiation follows a declaration of the explicit specialization.
18028
18029          For a given set of template parameters, if an explicit
18030          instantiation of a template appears after a declaration of an
18031          explicit specialization for that template, the explicit
18032          instantiation has no effect.  */
18033       return;
18034     }
18035   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
18036     {
18037       /* [temp.spec]
18038
18039          No program shall explicitly instantiate any template more
18040          than once.
18041
18042          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
18043          instantiation was `extern'.  If EXTERN_P then the second is.
18044          These cases are OK.  */
18045       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
18046
18047       if (!previous_instantiation_extern_p && !extern_p
18048           && (complain & tf_error))
18049         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
18050
18051       /* If we've already instantiated the template, just return now.  */
18052       if (!CLASSTYPE_INTERFACE_ONLY (t))
18053         return;
18054     }
18055
18056   check_explicit_instantiation_namespace (TYPE_NAME (t));
18057   mark_class_instantiated (t, extern_p);
18058
18059   if (nomem_p)
18060     return;
18061
18062   {
18063     tree tmp;
18064
18065     /* In contrast to implicit instantiation, where only the
18066        declarations, and not the definitions, of members are
18067        instantiated, we have here:
18068
18069          [temp.explicit]
18070
18071          The explicit instantiation of a class template specialization
18072          implies the instantiation of all of its members not
18073          previously explicitly specialized in the translation unit
18074          containing the explicit instantiation.
18075
18076        Of course, we can't instantiate member template classes, since
18077        we don't have any arguments for them.  Note that the standard
18078        is unclear on whether the instantiation of the members are
18079        *explicit* instantiations or not.  However, the most natural
18080        interpretation is that it should be an explicit instantiation.  */
18081
18082     if (! static_p)
18083       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
18084         if (TREE_CODE (tmp) == FUNCTION_DECL
18085             && DECL_TEMPLATE_INSTANTIATION (tmp))
18086           instantiate_class_member (tmp, extern_p);
18087
18088     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
18089       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
18090         instantiate_class_member (tmp, extern_p);
18091
18092     if (CLASSTYPE_NESTED_UTDS (t))
18093       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
18094                              bt_instantiate_type_proc, &storage);
18095   }
18096 }
18097
18098 /* Given a function DECL, which is a specialization of TMPL, modify
18099    DECL to be a re-instantiation of TMPL with the same template
18100    arguments.  TMPL should be the template into which tsubst'ing
18101    should occur for DECL, not the most general template.
18102
18103    One reason for doing this is a scenario like this:
18104
18105      template <class T>
18106      void f(const T&, int i);
18107
18108      void g() { f(3, 7); }
18109
18110      template <class T>
18111      void f(const T& t, const int i) { }
18112
18113    Note that when the template is first instantiated, with
18114    instantiate_template, the resulting DECL will have no name for the
18115    first parameter, and the wrong type for the second.  So, when we go
18116    to instantiate the DECL, we regenerate it.  */
18117
18118 static void
18119 regenerate_decl_from_template (tree decl, tree tmpl)
18120 {
18121   /* The arguments used to instantiate DECL, from the most general
18122      template.  */
18123   tree args;
18124   tree code_pattern;
18125
18126   args = DECL_TI_ARGS (decl);
18127   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
18128
18129   /* Make sure that we can see identifiers, and compute access
18130      correctly.  */
18131   push_access_scope (decl);
18132
18133   if (TREE_CODE (decl) == FUNCTION_DECL)
18134     {
18135       tree decl_parm;
18136       tree pattern_parm;
18137       tree specs;
18138       int args_depth;
18139       int parms_depth;
18140
18141       args_depth = TMPL_ARGS_DEPTH (args);
18142       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
18143       if (args_depth > parms_depth)
18144         args = get_innermost_template_args (args, parms_depth);
18145
18146       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
18147                                               args, tf_error, NULL_TREE,
18148                                               /*defer_ok*/false);
18149       if (specs && specs != error_mark_node)
18150         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
18151                                                     specs);
18152
18153       /* Merge parameter declarations.  */
18154       decl_parm = skip_artificial_parms_for (decl,
18155                                              DECL_ARGUMENTS (decl));
18156       pattern_parm
18157         = skip_artificial_parms_for (code_pattern,
18158                                      DECL_ARGUMENTS (code_pattern));
18159       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
18160         {
18161           tree parm_type;
18162           tree attributes;
18163           
18164           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18165             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
18166           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
18167                               NULL_TREE);
18168           parm_type = type_decays_to (parm_type);
18169           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18170             TREE_TYPE (decl_parm) = parm_type;
18171           attributes = DECL_ATTRIBUTES (pattern_parm);
18172           if (DECL_ATTRIBUTES (decl_parm) != attributes)
18173             {
18174               DECL_ATTRIBUTES (decl_parm) = attributes;
18175               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18176             }
18177           decl_parm = DECL_CHAIN (decl_parm);
18178           pattern_parm = DECL_CHAIN (pattern_parm);
18179         }
18180       /* Merge any parameters that match with the function parameter
18181          pack.  */
18182       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
18183         {
18184           int i, len;
18185           tree expanded_types;
18186           /* Expand the TYPE_PACK_EXPANSION that provides the types for
18187              the parameters in this function parameter pack.  */
18188           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
18189                                                  args, tf_error, NULL_TREE);
18190           len = TREE_VEC_LENGTH (expanded_types);
18191           for (i = 0; i < len; i++)
18192             {
18193               tree parm_type;
18194               tree attributes;
18195           
18196               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18197                 /* Rename the parameter to include the index.  */
18198                 DECL_NAME (decl_parm) = 
18199                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18200               parm_type = TREE_VEC_ELT (expanded_types, i);
18201               parm_type = type_decays_to (parm_type);
18202               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18203                 TREE_TYPE (decl_parm) = parm_type;
18204               attributes = DECL_ATTRIBUTES (pattern_parm);
18205               if (DECL_ATTRIBUTES (decl_parm) != attributes)
18206                 {
18207                   DECL_ATTRIBUTES (decl_parm) = attributes;
18208                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18209                 }
18210               decl_parm = DECL_CHAIN (decl_parm);
18211             }
18212         }
18213       /* Merge additional specifiers from the CODE_PATTERN.  */
18214       if (DECL_DECLARED_INLINE_P (code_pattern)
18215           && !DECL_DECLARED_INLINE_P (decl))
18216         DECL_DECLARED_INLINE_P (decl) = 1;
18217     }
18218   else if (TREE_CODE (decl) == VAR_DECL)
18219     {
18220       DECL_INITIAL (decl) =
18221         tsubst_expr (DECL_INITIAL (code_pattern), args,
18222                      tf_error, DECL_TI_TEMPLATE (decl),
18223                      /*integral_constant_expression_p=*/false);
18224       if (VAR_HAD_UNKNOWN_BOUND (decl))
18225         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18226                                    tf_error, DECL_TI_TEMPLATE (decl));
18227     }
18228   else
18229     gcc_unreachable ();
18230
18231   pop_access_scope (decl);
18232 }
18233
18234 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18235    substituted to get DECL.  */
18236
18237 tree
18238 template_for_substitution (tree decl)
18239 {
18240   tree tmpl = DECL_TI_TEMPLATE (decl);
18241
18242   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18243      for the instantiation.  This is not always the most general
18244      template.  Consider, for example:
18245
18246         template <class T>
18247         struct S { template <class U> void f();
18248                    template <> void f<int>(); };
18249
18250      and an instantiation of S<double>::f<int>.  We want TD to be the
18251      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
18252   while (/* An instantiation cannot have a definition, so we need a
18253             more general template.  */
18254          DECL_TEMPLATE_INSTANTIATION (tmpl)
18255            /* We must also deal with friend templates.  Given:
18256
18257                 template <class T> struct S {
18258                   template <class U> friend void f() {};
18259                 };
18260
18261               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18262               so far as the language is concerned, but that's still
18263               where we get the pattern for the instantiation from.  On
18264               other hand, if the definition comes outside the class, say:
18265
18266                 template <class T> struct S {
18267                   template <class U> friend void f();
18268                 };
18269                 template <class U> friend void f() {}
18270
18271               we don't need to look any further.  That's what the check for
18272               DECL_INITIAL is for.  */
18273           || (TREE_CODE (decl) == FUNCTION_DECL
18274               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18275               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18276     {
18277       /* The present template, TD, should not be a definition.  If it
18278          were a definition, we should be using it!  Note that we
18279          cannot restructure the loop to just keep going until we find
18280          a template with a definition, since that might go too far if
18281          a specialization was declared, but not defined.  */
18282       gcc_assert (TREE_CODE (decl) != VAR_DECL
18283                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18284
18285       /* Fetch the more general template.  */
18286       tmpl = DECL_TI_TEMPLATE (tmpl);
18287     }
18288
18289   return tmpl;
18290 }
18291
18292 /* Returns true if we need to instantiate this template instance even if we
18293    know we aren't going to emit it..  */
18294
18295 bool
18296 always_instantiate_p (tree decl)
18297 {
18298   /* We always instantiate inline functions so that we can inline them.  An
18299      explicit instantiation declaration prohibits implicit instantiation of
18300      non-inline functions.  With high levels of optimization, we would
18301      normally inline non-inline functions -- but we're not allowed to do
18302      that for "extern template" functions.  Therefore, we check
18303      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
18304   return ((TREE_CODE (decl) == FUNCTION_DECL
18305            && DECL_DECLARED_INLINE_P (decl))
18306           /* And we need to instantiate static data members so that
18307              their initializers are available in integral constant
18308              expressions.  */
18309           || (TREE_CODE (decl) == VAR_DECL
18310               && decl_maybe_constant_var_p (decl)));
18311 }
18312
18313 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
18314    instantiate it now, modifying TREE_TYPE (fn).  */
18315
18316 void
18317 maybe_instantiate_noexcept (tree fn)
18318 {
18319   tree fntype, spec, noex, clone;
18320
18321   if (DECL_CLONED_FUNCTION_P (fn))
18322     fn = DECL_CLONED_FUNCTION (fn);
18323   fntype = TREE_TYPE (fn);
18324   spec = TYPE_RAISES_EXCEPTIONS (fntype);
18325
18326   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18327     return;
18328
18329   noex = TREE_PURPOSE (spec);
18330
18331   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18332     {
18333       if (push_tinst_level (fn))
18334         {
18335           push_access_scope (fn);
18336           input_location = DECL_SOURCE_LOCATION (fn);
18337           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18338                                         DEFERRED_NOEXCEPT_ARGS (noex),
18339                                         tf_warning_or_error, fn,
18340                                         /*function_p=*/false,
18341                                         /*integral_constant_expression_p=*/true);
18342           pop_access_scope (fn);
18343           pop_tinst_level ();
18344           spec = build_noexcept_spec (noex, tf_warning_or_error);
18345           if (spec == error_mark_node)
18346             spec = noexcept_false_spec;
18347         }
18348       else
18349         spec = noexcept_false_spec;
18350     }
18351   else
18352     {
18353       /* This is an implicitly declared function, so NOEX is a list of
18354          other functions to evaluate and merge.  */
18355       tree elt;
18356       spec = noexcept_true_spec;
18357       for (elt = noex; elt; elt = OVL_NEXT (elt))
18358         {
18359           tree fn = OVL_CURRENT (elt);
18360           tree subspec;
18361           maybe_instantiate_noexcept (fn);
18362           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18363           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18364         }
18365     }
18366
18367   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18368
18369   FOR_EACH_CLONE (clone, fn)
18370     {
18371       if (TREE_TYPE (clone) == fntype)
18372         TREE_TYPE (clone) = TREE_TYPE (fn);
18373       else
18374         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18375     }
18376 }
18377
18378 /* Produce the definition of D, a _DECL generated from a template.  If
18379    DEFER_OK is nonzero, then we don't have to actually do the
18380    instantiation now; we just have to do it sometime.  Normally it is
18381    an error if this is an explicit instantiation but D is undefined.
18382    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18383    explicitly instantiated class template.  */
18384
18385 tree
18386 instantiate_decl (tree d, int defer_ok,
18387                   bool expl_inst_class_mem_p)
18388 {
18389   tree tmpl = DECL_TI_TEMPLATE (d);
18390   tree gen_args;
18391   tree args;
18392   tree td;
18393   tree code_pattern;
18394   tree spec;
18395   tree gen_tmpl;
18396   bool pattern_defined;
18397   int need_push;
18398   location_t saved_loc = input_location;
18399   bool external_p;
18400
18401   /* This function should only be used to instantiate templates for
18402      functions and static member variables.  */
18403   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18404               || TREE_CODE (d) == VAR_DECL);
18405
18406   /* Variables are never deferred; if instantiation is required, they
18407      are instantiated right away.  That allows for better code in the
18408      case that an expression refers to the value of the variable --
18409      if the variable has a constant value the referring expression can
18410      take advantage of that fact.  */
18411   if (TREE_CODE (d) == VAR_DECL
18412       || DECL_DECLARED_CONSTEXPR_P (d))
18413     defer_ok = 0;
18414
18415   /* Don't instantiate cloned functions.  Instead, instantiate the
18416      functions they cloned.  */
18417   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18418     d = DECL_CLONED_FUNCTION (d);
18419
18420   if (DECL_TEMPLATE_INSTANTIATED (d)
18421       || (TREE_CODE (d) == FUNCTION_DECL
18422           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18423       || DECL_TEMPLATE_SPECIALIZATION (d))
18424     /* D has already been instantiated or explicitly specialized, so
18425        there's nothing for us to do here.
18426
18427        It might seem reasonable to check whether or not D is an explicit
18428        instantiation, and, if so, stop here.  But when an explicit
18429        instantiation is deferred until the end of the compilation,
18430        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18431        the instantiation.  */
18432     return d;
18433
18434   /* Check to see whether we know that this template will be
18435      instantiated in some other file, as with "extern template"
18436      extension.  */
18437   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18438
18439   /* In general, we do not instantiate such templates.  */
18440   if (external_p && !always_instantiate_p (d))
18441     return d;
18442
18443   gen_tmpl = most_general_template (tmpl);
18444   gen_args = DECL_TI_ARGS (d);
18445
18446   if (tmpl != gen_tmpl)
18447     /* We should already have the extra args.  */
18448     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18449                 == TMPL_ARGS_DEPTH (gen_args));
18450   /* And what's in the hash table should match D.  */
18451   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18452               || spec == NULL_TREE);
18453
18454   /* This needs to happen before any tsubsting.  */
18455   if (! push_tinst_level (d))
18456     return d;
18457
18458   timevar_push (TV_TEMPLATE_INST);
18459
18460   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18461      for the instantiation.  */
18462   td = template_for_substitution (d);
18463   code_pattern = DECL_TEMPLATE_RESULT (td);
18464
18465   /* We should never be trying to instantiate a member of a class
18466      template or partial specialization.  */
18467   gcc_assert (d != code_pattern);
18468
18469   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18470       || DECL_TEMPLATE_SPECIALIZATION (td))
18471     /* In the case of a friend template whose definition is provided
18472        outside the class, we may have too many arguments.  Drop the
18473        ones we don't need.  The same is true for specializations.  */
18474     args = get_innermost_template_args
18475       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
18476   else
18477     args = gen_args;
18478
18479   if (TREE_CODE (d) == FUNCTION_DECL)
18480     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18481                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18482   else
18483     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18484
18485   /* We may be in the middle of deferred access check.  Disable it now.  */
18486   push_deferring_access_checks (dk_no_deferred);
18487
18488   /* Unless an explicit instantiation directive has already determined
18489      the linkage of D, remember that a definition is available for
18490      this entity.  */
18491   if (pattern_defined
18492       && !DECL_INTERFACE_KNOWN (d)
18493       && !DECL_NOT_REALLY_EXTERN (d))
18494     mark_definable (d);
18495
18496   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18497   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18498   input_location = DECL_SOURCE_LOCATION (d);
18499
18500   /* If D is a member of an explicitly instantiated class template,
18501      and no definition is available, treat it like an implicit
18502      instantiation.  */
18503   if (!pattern_defined && expl_inst_class_mem_p
18504       && DECL_EXPLICIT_INSTANTIATION (d))
18505     {
18506       /* Leave linkage flags alone on instantiations with anonymous
18507          visibility.  */
18508       if (TREE_PUBLIC (d))
18509         {
18510           DECL_NOT_REALLY_EXTERN (d) = 0;
18511           DECL_INTERFACE_KNOWN (d) = 0;
18512         }
18513       SET_DECL_IMPLICIT_INSTANTIATION (d);
18514     }
18515
18516   if (TREE_CODE (d) == FUNCTION_DECL)
18517     maybe_instantiate_noexcept (d);
18518
18519   /* Recheck the substitutions to obtain any warning messages
18520      about ignoring cv qualifiers.  Don't do this for artificial decls,
18521      as it breaks the context-sensitive substitution for lambda op(). */
18522   if (!defer_ok && !DECL_ARTIFICIAL (d))
18523     {
18524       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18525       tree type = TREE_TYPE (gen);
18526
18527       /* Make sure that we can see identifiers, and compute access
18528          correctly.  D is already the target FUNCTION_DECL with the
18529          right context.  */
18530       push_access_scope (d);
18531
18532       if (TREE_CODE (gen) == FUNCTION_DECL)
18533         {
18534           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18535           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18536                                           d, /*defer_ok*/true);
18537           /* Don't simply tsubst the function type, as that will give
18538              duplicate warnings about poor parameter qualifications.
18539              The function arguments are the same as the decl_arguments
18540              without the top level cv qualifiers.  */
18541           type = TREE_TYPE (type);
18542         }
18543       tsubst (type, gen_args, tf_warning_or_error, d);
18544
18545       pop_access_scope (d);
18546     }
18547
18548   /* Defer all other templates, unless we have been explicitly
18549      forbidden from doing so.  */
18550   if (/* If there is no definition, we cannot instantiate the
18551          template.  */
18552       ! pattern_defined
18553       /* If it's OK to postpone instantiation, do so.  */
18554       || defer_ok
18555       /* If this is a static data member that will be defined
18556          elsewhere, we don't want to instantiate the entire data
18557          member, but we do want to instantiate the initializer so that
18558          we can substitute that elsewhere.  */
18559       || (external_p && TREE_CODE (d) == VAR_DECL))
18560     {
18561       /* The definition of the static data member is now required so
18562          we must substitute the initializer.  */
18563       if (TREE_CODE (d) == VAR_DECL
18564           && !DECL_INITIAL (d)
18565           && DECL_INITIAL (code_pattern))
18566         {
18567           tree ns;
18568           tree init;
18569           bool const_init = false;
18570
18571           ns = decl_namespace_context (d);
18572           push_nested_namespace (ns);
18573           push_nested_class (DECL_CONTEXT (d));
18574           init = tsubst_expr (DECL_INITIAL (code_pattern),
18575                               args,
18576                               tf_warning_or_error, NULL_TREE,
18577                               /*integral_constant_expression_p=*/false);
18578           /* Make sure the initializer is still constant, in case of
18579              circular dependency (template/instantiate6.C). */
18580           const_init
18581             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18582           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18583                           /*asmspec_tree=*/NULL_TREE,
18584                           LOOKUP_ONLYCONVERTING);
18585           pop_nested_class ();
18586           pop_nested_namespace (ns);
18587         }
18588
18589       /* We restore the source position here because it's used by
18590          add_pending_template.  */
18591       input_location = saved_loc;
18592
18593       if (at_eof && !pattern_defined
18594           && DECL_EXPLICIT_INSTANTIATION (d)
18595           && DECL_NOT_REALLY_EXTERN (d))
18596         /* [temp.explicit]
18597
18598            The definition of a non-exported function template, a
18599            non-exported member function template, or a non-exported
18600            member function or static data member of a class template
18601            shall be present in every translation unit in which it is
18602            explicitly instantiated.  */
18603         permerror (input_location,  "explicit instantiation of %qD "
18604                    "but no definition available", d);
18605
18606       /* If we're in unevaluated context, we just wanted to get the
18607          constant value; this isn't an odr use, so don't queue
18608          a full instantiation.  */
18609       if (cp_unevaluated_operand != 0)
18610         goto out;
18611       /* ??? Historically, we have instantiated inline functions, even
18612          when marked as "extern template".  */
18613       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18614         add_pending_template (d);
18615       goto out;
18616     }
18617   /* Tell the repository that D is available in this translation unit
18618      -- and see if it is supposed to be instantiated here.  */
18619   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18620     {
18621       /* In a PCH file, despite the fact that the repository hasn't
18622          requested instantiation in the PCH it is still possible that
18623          an instantiation will be required in a file that includes the
18624          PCH.  */
18625       if (pch_file)
18626         add_pending_template (d);
18627       /* Instantiate inline functions so that the inliner can do its
18628          job, even though we'll not be emitting a copy of this
18629          function.  */
18630       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18631         goto out;
18632     }
18633
18634   need_push = !cfun || !global_bindings_p ();
18635   if (need_push)
18636     push_to_top_level ();
18637
18638   /* Mark D as instantiated so that recursive calls to
18639      instantiate_decl do not try to instantiate it again.  */
18640   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18641
18642   /* Regenerate the declaration in case the template has been modified
18643      by a subsequent redeclaration.  */
18644   regenerate_decl_from_template (d, td);
18645
18646   /* We already set the file and line above.  Reset them now in case
18647      they changed as a result of calling regenerate_decl_from_template.  */
18648   input_location = DECL_SOURCE_LOCATION (d);
18649
18650   if (TREE_CODE (d) == VAR_DECL)
18651     {
18652       tree init;
18653       bool const_init = false;
18654
18655       /* Clear out DECL_RTL; whatever was there before may not be right
18656          since we've reset the type of the declaration.  */
18657       SET_DECL_RTL (d, NULL);
18658       DECL_IN_AGGR_P (d) = 0;
18659
18660       /* The initializer is placed in DECL_INITIAL by
18661          regenerate_decl_from_template so we don't need to
18662          push/pop_access_scope again here.  Pull it out so that
18663          cp_finish_decl can process it.  */
18664       init = DECL_INITIAL (d);
18665       DECL_INITIAL (d) = NULL_TREE;
18666       DECL_INITIALIZED_P (d) = 0;
18667
18668       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18669          initializer.  That function will defer actual emission until
18670          we have a chance to determine linkage.  */
18671       DECL_EXTERNAL (d) = 0;
18672
18673       /* Enter the scope of D so that access-checking works correctly.  */
18674       push_nested_class (DECL_CONTEXT (d));
18675       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18676       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18677       pop_nested_class ();
18678     }
18679   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18680     synthesize_method (d);
18681   else if (TREE_CODE (d) == FUNCTION_DECL)
18682     {
18683       htab_t saved_local_specializations;
18684       tree subst_decl;
18685       tree tmpl_parm;
18686       tree spec_parm;
18687
18688       /* Save away the current list, in case we are instantiating one
18689          template from within the body of another.  */
18690       saved_local_specializations = local_specializations;
18691
18692       /* Set up the list of local specializations.  */
18693       local_specializations = htab_create (37,
18694                                            hash_local_specialization,
18695                                            eq_local_specializations,
18696                                            NULL);
18697
18698       /* Set up context.  */
18699       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18700
18701       /* Create substitution entries for the parameters.  */
18702       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18703       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18704       spec_parm = DECL_ARGUMENTS (d);
18705       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18706         {
18707           register_local_specialization (spec_parm, tmpl_parm);
18708           spec_parm = skip_artificial_parms_for (d, spec_parm);
18709           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18710         }
18711       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18712         {
18713           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18714             {
18715               register_local_specialization (spec_parm, tmpl_parm);
18716               spec_parm = DECL_CHAIN (spec_parm);
18717             }
18718           else
18719             {
18720               /* Register the (value) argument pack as a specialization of
18721                  TMPL_PARM, then move on.  */
18722               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18723               register_local_specialization (argpack, tmpl_parm);
18724             }
18725         }
18726       gcc_assert (!spec_parm);
18727
18728       /* Substitute into the body of the function.  */
18729       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18730                    tf_warning_or_error, tmpl,
18731                    /*integral_constant_expression_p=*/false);
18732
18733       /* Set the current input_location to the end of the function
18734          so that finish_function knows where we are.  */
18735       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18736
18737       /* We don't need the local specializations any more.  */
18738       htab_delete (local_specializations);
18739       local_specializations = saved_local_specializations;
18740
18741       /* Finish the function.  */
18742       d = finish_function (0);
18743       expand_or_defer_fn (d);
18744     }
18745
18746   /* We're not deferring instantiation any more.  */
18747   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18748
18749   if (need_push)
18750     pop_from_top_level ();
18751
18752 out:
18753   input_location = saved_loc;
18754   pop_deferring_access_checks ();
18755   pop_tinst_level ();
18756
18757   timevar_pop (TV_TEMPLATE_INST);
18758
18759   return d;
18760 }
18761
18762 /* Run through the list of templates that we wish we could
18763    instantiate, and instantiate any we can.  RETRIES is the
18764    number of times we retry pending template instantiation.  */
18765
18766 void
18767 instantiate_pending_templates (int retries)
18768 {
18769   int reconsider;
18770   location_t saved_loc = input_location;
18771
18772   /* Instantiating templates may trigger vtable generation.  This in turn
18773      may require further template instantiations.  We place a limit here
18774      to avoid infinite loop.  */
18775   if (pending_templates && retries >= max_tinst_depth)
18776     {
18777       tree decl = pending_templates->tinst->decl;
18778
18779       error ("template instantiation depth exceeds maximum of %d"
18780              " instantiating %q+D, possibly from virtual table generation"
18781              " (use -ftemplate-depth= to increase the maximum)",
18782              max_tinst_depth, decl);
18783       if (TREE_CODE (decl) == FUNCTION_DECL)
18784         /* Pretend that we defined it.  */
18785         DECL_INITIAL (decl) = error_mark_node;
18786       return;
18787     }
18788
18789   do
18790     {
18791       struct pending_template **t = &pending_templates;
18792       struct pending_template *last = NULL;
18793       reconsider = 0;
18794       while (*t)
18795         {
18796           tree instantiation = reopen_tinst_level ((*t)->tinst);
18797           bool complete = false;
18798
18799           if (TYPE_P (instantiation))
18800             {
18801               tree fn;
18802
18803               if (!COMPLETE_TYPE_P (instantiation))
18804                 {
18805                   instantiate_class_template (instantiation);
18806                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18807                     for (fn = TYPE_METHODS (instantiation);
18808                          fn;
18809                          fn = TREE_CHAIN (fn))
18810                       if (! DECL_ARTIFICIAL (fn))
18811                         instantiate_decl (fn,
18812                                           /*defer_ok=*/0,
18813                                           /*expl_inst_class_mem_p=*/false);
18814                   if (COMPLETE_TYPE_P (instantiation))
18815                     reconsider = 1;
18816                 }
18817
18818               complete = COMPLETE_TYPE_P (instantiation);
18819             }
18820           else
18821             {
18822               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18823                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18824                 {
18825                   instantiation
18826                     = instantiate_decl (instantiation,
18827                                         /*defer_ok=*/0,
18828                                         /*expl_inst_class_mem_p=*/false);
18829                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18830                     reconsider = 1;
18831                 }
18832
18833               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18834                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
18835             }
18836
18837           if (complete)
18838             /* If INSTANTIATION has been instantiated, then we don't
18839                need to consider it again in the future.  */
18840             *t = (*t)->next;
18841           else
18842             {
18843               last = *t;
18844               t = &(*t)->next;
18845             }
18846           tinst_depth = 0;
18847           current_tinst_level = NULL;
18848         }
18849       last_pending_template = last;
18850     }
18851   while (reconsider);
18852
18853   input_location = saved_loc;
18854 }
18855
18856 /* Substitute ARGVEC into T, which is a list of initializers for
18857    either base class or a non-static data member.  The TREE_PURPOSEs
18858    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18859    instantiate_decl.  */
18860
18861 static tree
18862 tsubst_initializer_list (tree t, tree argvec)
18863 {
18864   tree inits = NULL_TREE;
18865
18866   for (; t; t = TREE_CHAIN (t))
18867     {
18868       tree decl;
18869       tree init;
18870       tree expanded_bases = NULL_TREE;
18871       tree expanded_arguments = NULL_TREE;
18872       int i, len = 1;
18873
18874       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18875         {
18876           tree expr;
18877           tree arg;
18878
18879           /* Expand the base class expansion type into separate base
18880              classes.  */
18881           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18882                                                  tf_warning_or_error,
18883                                                  NULL_TREE);
18884           if (expanded_bases == error_mark_node)
18885             continue;
18886           
18887           /* We'll be building separate TREE_LISTs of arguments for
18888              each base.  */
18889           len = TREE_VEC_LENGTH (expanded_bases);
18890           expanded_arguments = make_tree_vec (len);
18891           for (i = 0; i < len; i++)
18892             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18893
18894           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18895              expand each argument in the TREE_VALUE of t.  */
18896           expr = make_node (EXPR_PACK_EXPANSION);
18897           PACK_EXPANSION_PARAMETER_PACKS (expr) =
18898             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18899
18900           if (TREE_VALUE (t) == void_type_node)
18901             /* VOID_TYPE_NODE is used to indicate
18902                value-initialization.  */
18903             {
18904               for (i = 0; i < len; i++)
18905                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18906             }
18907           else
18908             {
18909               /* Substitute parameter packs into each argument in the
18910                  TREE_LIST.  */
18911               in_base_initializer = 1;
18912               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18913                 {
18914                   tree expanded_exprs;
18915
18916                   /* Expand the argument.  */
18917                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18918                   expanded_exprs 
18919                     = tsubst_pack_expansion (expr, argvec,
18920                                              tf_warning_or_error,
18921                                              NULL_TREE);
18922                   if (expanded_exprs == error_mark_node)
18923                     continue;
18924
18925                   /* Prepend each of the expanded expressions to the
18926                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18927                   for (i = 0; i < len; i++)
18928                     {
18929                       TREE_VEC_ELT (expanded_arguments, i) = 
18930                         tree_cons (NULL_TREE, 
18931                                    TREE_VEC_ELT (expanded_exprs, i),
18932                                    TREE_VEC_ELT (expanded_arguments, i));
18933                     }
18934                 }
18935               in_base_initializer = 0;
18936
18937               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18938                  since we built them backwards.  */
18939               for (i = 0; i < len; i++)
18940                 {
18941                   TREE_VEC_ELT (expanded_arguments, i) = 
18942                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
18943                 }
18944             }
18945         }
18946
18947       for (i = 0; i < len; ++i)
18948         {
18949           if (expanded_bases)
18950             {
18951               decl = TREE_VEC_ELT (expanded_bases, i);
18952               decl = expand_member_init (decl);
18953               init = TREE_VEC_ELT (expanded_arguments, i);
18954             }
18955           else
18956             {
18957               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
18958                                   tf_warning_or_error, NULL_TREE);
18959
18960               decl = expand_member_init (decl);
18961               if (decl && !DECL_P (decl))
18962                 in_base_initializer = 1;
18963
18964               init = TREE_VALUE (t);
18965               if (init != void_type_node)
18966                 init = tsubst_expr (init, argvec,
18967                                     tf_warning_or_error, NULL_TREE,
18968                                     /*integral_constant_expression_p=*/false);
18969               in_base_initializer = 0;
18970             }
18971
18972           if (decl)
18973             {
18974               init = build_tree_list (decl, init);
18975               TREE_CHAIN (init) = inits;
18976               inits = init;
18977             }
18978         }
18979     }
18980   return inits;
18981 }
18982
18983 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
18984
18985 static void
18986 set_current_access_from_decl (tree decl)
18987 {
18988   if (TREE_PRIVATE (decl))
18989     current_access_specifier = access_private_node;
18990   else if (TREE_PROTECTED (decl))
18991     current_access_specifier = access_protected_node;
18992   else
18993     current_access_specifier = access_public_node;
18994 }
18995
18996 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
18997    is the instantiation (which should have been created with
18998    start_enum) and ARGS are the template arguments to use.  */
18999
19000 static void
19001 tsubst_enum (tree tag, tree newtag, tree args)
19002 {
19003   tree e;
19004
19005   if (SCOPED_ENUM_P (newtag))
19006     begin_scope (sk_scoped_enum, newtag);
19007
19008   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
19009     {
19010       tree value;
19011       tree decl;
19012
19013       decl = TREE_VALUE (e);
19014       /* Note that in a template enum, the TREE_VALUE is the
19015          CONST_DECL, not the corresponding INTEGER_CST.  */
19016       value = tsubst_expr (DECL_INITIAL (decl),
19017                            args, tf_warning_or_error, NULL_TREE,
19018                            /*integral_constant_expression_p=*/true);
19019
19020       /* Give this enumeration constant the correct access.  */
19021       set_current_access_from_decl (decl);
19022
19023       /* Actually build the enumerator itself.  */
19024       build_enumerator
19025         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
19026     }
19027
19028   if (SCOPED_ENUM_P (newtag))
19029     finish_scope ();
19030
19031   finish_enum_value_list (newtag);
19032   finish_enum (newtag);
19033
19034   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
19035     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
19036 }
19037
19038 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
19039    its type -- but without substituting the innermost set of template
19040    arguments.  So, innermost set of template parameters will appear in
19041    the type.  */
19042
19043 tree
19044 get_mostly_instantiated_function_type (tree decl)
19045 {
19046   tree fn_type;
19047   tree tmpl;
19048   tree targs;
19049   tree tparms;
19050   int parm_depth;
19051
19052   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
19053   targs = DECL_TI_ARGS (decl);
19054   tparms = DECL_TEMPLATE_PARMS (tmpl);
19055   parm_depth = TMPL_PARMS_DEPTH (tparms);
19056
19057   /* There should be as many levels of arguments as there are levels
19058      of parameters.  */
19059   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
19060
19061   fn_type = TREE_TYPE (tmpl);
19062
19063   if (parm_depth == 1)
19064     /* No substitution is necessary.  */
19065     ;
19066   else
19067     {
19068       int i;
19069       tree partial_args;
19070
19071       /* Replace the innermost level of the TARGS with NULL_TREEs to
19072          let tsubst know not to substitute for those parameters.  */
19073       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
19074       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
19075         SET_TMPL_ARGS_LEVEL (partial_args, i,
19076                              TMPL_ARGS_LEVEL (targs, i));
19077       SET_TMPL_ARGS_LEVEL (partial_args,
19078                            TMPL_ARGS_DEPTH (targs),
19079                            make_tree_vec (DECL_NTPARMS (tmpl)));
19080
19081       /* Make sure that we can see identifiers, and compute access
19082          correctly.  */
19083       push_access_scope (decl);
19084
19085       ++processing_template_decl;
19086       /* Now, do the (partial) substitution to figure out the
19087          appropriate function type.  */
19088       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
19089       --processing_template_decl;
19090
19091       /* Substitute into the template parameters to obtain the real
19092          innermost set of parameters.  This step is important if the
19093          innermost set of template parameters contains value
19094          parameters whose types depend on outer template parameters.  */
19095       TREE_VEC_LENGTH (partial_args)--;
19096       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
19097
19098       pop_access_scope (decl);
19099     }
19100
19101   return fn_type;
19102 }
19103
19104 /* Return truthvalue if we're processing a template different from
19105    the last one involved in diagnostics.  */
19106 int
19107 problematic_instantiation_changed (void)
19108 {
19109   return current_tinst_level != last_error_tinst_level;
19110 }
19111
19112 /* Remember current template involved in diagnostics.  */
19113 void
19114 record_last_problematic_instantiation (void)
19115 {
19116   last_error_tinst_level = current_tinst_level;
19117 }
19118
19119 struct tinst_level *
19120 current_instantiation (void)
19121 {
19122   return current_tinst_level;
19123 }
19124
19125 /* [temp.param] Check that template non-type parm TYPE is of an allowable
19126    type. Return zero for ok, nonzero for disallowed. Issue error and
19127    warning messages under control of COMPLAIN.  */
19128
19129 static int
19130 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
19131 {
19132   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
19133     return 0;
19134   else if (POINTER_TYPE_P (type))
19135     return 0;
19136   else if (TYPE_PTR_TO_MEMBER_P (type))
19137     return 0;
19138   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
19139     return 0;
19140   else if (TREE_CODE (type) == TYPENAME_TYPE)
19141     return 0;
19142   else if (TREE_CODE (type) == DECLTYPE_TYPE)
19143     return 0;
19144   else if (TREE_CODE (type) == NULLPTR_TYPE)
19145     return 0;
19146
19147   if (complain & tf_error)
19148     {
19149       if (type == error_mark_node)
19150         inform (input_location, "invalid template non-type parameter");
19151       else
19152         error ("%q#T is not a valid type for a template non-type parameter",
19153                type);
19154     }
19155   return 1;
19156 }
19157
19158 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
19159    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
19160
19161 static bool
19162 dependent_type_p_r (tree type)
19163 {
19164   tree scope;
19165
19166   /* [temp.dep.type]
19167
19168      A type is dependent if it is:
19169
19170      -- a template parameter. Template template parameters are types
19171         for us (since TYPE_P holds true for them) so we handle
19172         them here.  */
19173   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19174       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
19175     return true;
19176   /* -- a qualified-id with a nested-name-specifier which contains a
19177         class-name that names a dependent type or whose unqualified-id
19178         names a dependent type.  */
19179   if (TREE_CODE (type) == TYPENAME_TYPE)
19180     return true;
19181   /* -- a cv-qualified type where the cv-unqualified type is
19182         dependent.  */
19183   type = TYPE_MAIN_VARIANT (type);
19184   /* -- a compound type constructed from any dependent type.  */
19185   if (TYPE_PTR_TO_MEMBER_P (type))
19186     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
19187             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
19188                                            (type)));
19189   else if (TREE_CODE (type) == POINTER_TYPE
19190            || TREE_CODE (type) == REFERENCE_TYPE)
19191     return dependent_type_p (TREE_TYPE (type));
19192   else if (TREE_CODE (type) == FUNCTION_TYPE
19193            || TREE_CODE (type) == METHOD_TYPE)
19194     {
19195       tree arg_type;
19196
19197       if (dependent_type_p (TREE_TYPE (type)))
19198         return true;
19199       for (arg_type = TYPE_ARG_TYPES (type);
19200            arg_type;
19201            arg_type = TREE_CHAIN (arg_type))
19202         if (dependent_type_p (TREE_VALUE (arg_type)))
19203           return true;
19204       return false;
19205     }
19206   /* -- an array type constructed from any dependent type or whose
19207         size is specified by a constant expression that is
19208         value-dependent.
19209
19210         We checked for type- and value-dependence of the bounds in
19211         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
19212   if (TREE_CODE (type) == ARRAY_TYPE)
19213     {
19214       if (TYPE_DOMAIN (type)
19215           && dependent_type_p (TYPE_DOMAIN (type)))
19216         return true;
19217       return dependent_type_p (TREE_TYPE (type));
19218     }
19219
19220   /* -- a template-id in which either the template name is a template
19221      parameter ...  */
19222   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19223     return true;
19224   /* ... or any of the template arguments is a dependent type or
19225         an expression that is type-dependent or value-dependent.  */
19226   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19227            && (any_dependent_template_arguments_p
19228                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19229     return true;
19230
19231   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19232      dependent; if the argument of the `typeof' expression is not
19233      type-dependent, then it should already been have resolved.  */
19234   if (TREE_CODE (type) == TYPEOF_TYPE
19235       || TREE_CODE (type) == DECLTYPE_TYPE
19236       || TREE_CODE (type) == UNDERLYING_TYPE)
19237     return true;
19238
19239   /* A template argument pack is dependent if any of its packed
19240      arguments are.  */
19241   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19242     {
19243       tree args = ARGUMENT_PACK_ARGS (type);
19244       int i, len = TREE_VEC_LENGTH (args);
19245       for (i = 0; i < len; ++i)
19246         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19247           return true;
19248     }
19249
19250   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19251      be template parameters.  */
19252   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19253     return true;
19254
19255   /* The standard does not specifically mention types that are local
19256      to template functions or local classes, but they should be
19257      considered dependent too.  For example:
19258
19259        template <int I> void f() {
19260          enum E { a = I };
19261          S<sizeof (E)> s;
19262        }
19263
19264      The size of `E' cannot be known until the value of `I' has been
19265      determined.  Therefore, `E' must be considered dependent.  */
19266   scope = TYPE_CONTEXT (type);
19267   if (scope && TYPE_P (scope))
19268     return dependent_type_p (scope);
19269   /* Don't use type_dependent_expression_p here, as it can lead
19270      to infinite recursion trying to determine whether a lambda
19271      nested in a lambda is dependent (c++/47687).  */
19272   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19273            && DECL_LANG_SPECIFIC (scope)
19274            && DECL_TEMPLATE_INFO (scope)
19275            && (any_dependent_template_arguments_p
19276                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19277     return true;
19278
19279   /* Other types are non-dependent.  */
19280   return false;
19281 }
19282
19283 /* Returns TRUE if TYPE is dependent, in the sense of
19284    [temp.dep.type].  Note that a NULL type is considered dependent.  */
19285
19286 bool
19287 dependent_type_p (tree type)
19288 {
19289   /* If there are no template parameters in scope, then there can't be
19290      any dependent types.  */
19291   if (!processing_template_decl)
19292     {
19293       /* If we are not processing a template, then nobody should be
19294          providing us with a dependent type.  */
19295       gcc_assert (type);
19296       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19297       return false;
19298     }
19299
19300   /* If the type is NULL, we have not computed a type for the entity
19301      in question; in that case, the type is dependent.  */
19302   if (!type)
19303     return true;
19304
19305   /* Erroneous types can be considered non-dependent.  */
19306   if (type == error_mark_node)
19307     return false;
19308
19309   /* If we have not already computed the appropriate value for TYPE,
19310      do so now.  */
19311   if (!TYPE_DEPENDENT_P_VALID (type))
19312     {
19313       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19314       TYPE_DEPENDENT_P_VALID (type) = 1;
19315     }
19316
19317   return TYPE_DEPENDENT_P (type);
19318 }
19319
19320 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19321    lookup.  In other words, a dependent type that is not the current
19322    instantiation.  */
19323
19324 bool
19325 dependent_scope_p (tree scope)
19326 {
19327   return (scope && TYPE_P (scope) && dependent_type_p (scope)
19328           && !currently_open_class (scope));
19329 }
19330
19331 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19332    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
19333    expression.  */
19334
19335 /* Note that this predicate is not appropriate for general expressions;
19336    only constant expressions (that satisfy potential_constant_expression)
19337    can be tested for value dependence.
19338
19339    We should really also have a predicate for "instantiation-dependent".
19340
19341    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
19342      (what about instantiation-dependent constant-expressions?)
19343    is_late_template_attribute: defer if instantiation-dependent.
19344    compute_array_index_type: proceed if constant and not t- or v-dependent
19345      if instantiation-dependent, need to remember full expression
19346    uses_template_parms: FIXME - need to audit callers
19347    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
19348    dependent_type_p [array_type]: dependent if index type is dependent
19349      (or non-constant?)
19350    static_assert - instantiation-dependent */
19351
19352 bool
19353 value_dependent_expression_p (tree expression)
19354 {
19355   if (!processing_template_decl)
19356     return false;
19357
19358   /* A name declared with a dependent type.  */
19359   if (DECL_P (expression) && type_dependent_expression_p (expression))
19360     return true;
19361
19362   switch (TREE_CODE (expression))
19363     {
19364     case IDENTIFIER_NODE:
19365       /* A name that has not been looked up -- must be dependent.  */
19366       return true;
19367
19368     case TEMPLATE_PARM_INDEX:
19369       /* A non-type template parm.  */
19370       return true;
19371
19372     case CONST_DECL:
19373       /* A non-type template parm.  */
19374       if (DECL_TEMPLATE_PARM_P (expression))
19375         return true;
19376       return value_dependent_expression_p (DECL_INITIAL (expression));
19377
19378     case VAR_DECL:
19379        /* A constant with literal type and is initialized
19380           with an expression that is value-dependent.  */
19381       if (DECL_INITIAL (expression)
19382           && decl_constant_var_p (expression)
19383           && value_dependent_expression_p (DECL_INITIAL (expression)))
19384         return true;
19385       return false;
19386
19387     case DYNAMIC_CAST_EXPR:
19388     case STATIC_CAST_EXPR:
19389     case CONST_CAST_EXPR:
19390     case REINTERPRET_CAST_EXPR:
19391     case CAST_EXPR:
19392       /* These expressions are value-dependent if the type to which
19393          the cast occurs is dependent or the expression being casted
19394          is value-dependent.  */
19395       {
19396         tree type = TREE_TYPE (expression);
19397
19398         if (dependent_type_p (type))
19399           return true;
19400
19401         /* A functional cast has a list of operands.  */
19402         expression = TREE_OPERAND (expression, 0);
19403         if (!expression)
19404           {
19405             /* If there are no operands, it must be an expression such
19406                as "int()". This should not happen for aggregate types
19407                because it would form non-constant expressions.  */
19408             gcc_assert (cxx_dialect >= cxx0x
19409                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19410
19411             return false;
19412           }
19413
19414         if (TREE_CODE (expression) == TREE_LIST)
19415           return any_value_dependent_elements_p (expression);
19416
19417         return value_dependent_expression_p (expression);
19418       }
19419
19420     case SIZEOF_EXPR:
19421     case ALIGNOF_EXPR:
19422     case TYPEID_EXPR:
19423       /* A `sizeof' expression is value-dependent if the operand is
19424          type-dependent or is a pack expansion.  */
19425       expression = TREE_OPERAND (expression, 0);
19426       if (PACK_EXPANSION_P (expression))
19427         return true;
19428       else if (TYPE_P (expression))
19429         return dependent_type_p (expression);
19430       return type_dependent_expression_p (expression);
19431
19432     case AT_ENCODE_EXPR:
19433       /* An 'encode' expression is value-dependent if the operand is
19434          type-dependent.  */
19435       expression = TREE_OPERAND (expression, 0);
19436       return dependent_type_p (expression);
19437
19438     case NOEXCEPT_EXPR:
19439       expression = TREE_OPERAND (expression, 0);
19440       return type_dependent_expression_p (expression);
19441
19442     case SCOPE_REF:
19443       {
19444         tree name = TREE_OPERAND (expression, 1);
19445         return value_dependent_expression_p (name);
19446       }
19447
19448     case COMPONENT_REF:
19449       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19450               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19451
19452     case NONTYPE_ARGUMENT_PACK:
19453       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19454          is value-dependent.  */
19455       {
19456         tree values = ARGUMENT_PACK_ARGS (expression);
19457         int i, len = TREE_VEC_LENGTH (values);
19458         
19459         for (i = 0; i < len; ++i)
19460           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19461             return true;
19462         
19463         return false;
19464       }
19465
19466     case TRAIT_EXPR:
19467       {
19468         tree type2 = TRAIT_EXPR_TYPE2 (expression);
19469         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19470                 || (type2 ? dependent_type_p (type2) : false));
19471       }
19472
19473     case MODOP_EXPR:
19474       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19475               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19476
19477     case ARRAY_REF:
19478       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19479               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19480
19481     case ADDR_EXPR:
19482       {
19483         tree op = TREE_OPERAND (expression, 0);
19484         return (value_dependent_expression_p (op)
19485                 || has_value_dependent_address (op));
19486       }
19487
19488     case CALL_EXPR:
19489       {
19490         tree fn = get_callee_fndecl (expression);
19491         int i, nargs;
19492         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19493           return true;
19494         nargs = call_expr_nargs (expression);
19495         for (i = 0; i < nargs; ++i)
19496           {
19497             tree op = CALL_EXPR_ARG (expression, i);
19498             /* In a call to a constexpr member function, look through the
19499                implicit ADDR_EXPR on the object argument so that it doesn't
19500                cause the call to be considered value-dependent.  We also
19501                look through it in potential_constant_expression.  */
19502             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19503                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19504                 && TREE_CODE (op) == ADDR_EXPR)
19505               op = TREE_OPERAND (op, 0);
19506             if (value_dependent_expression_p (op))
19507               return true;
19508           }
19509         return false;
19510       }
19511
19512     case TEMPLATE_ID_EXPR:
19513       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19514          type-dependent.  */
19515       return type_dependent_expression_p (expression);
19516
19517     case CONSTRUCTOR:
19518       {
19519         unsigned ix;
19520         tree val;
19521         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19522           if (value_dependent_expression_p (val))
19523             return true;
19524         return false;
19525       }
19526
19527     default:
19528       /* A constant expression is value-dependent if any subexpression is
19529          value-dependent.  */
19530       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19531         {
19532         case tcc_reference:
19533         case tcc_unary:
19534         case tcc_comparison:
19535         case tcc_binary:
19536         case tcc_expression:
19537         case tcc_vl_exp:
19538           {
19539             int i, len = cp_tree_operand_length (expression);
19540
19541             for (i = 0; i < len; i++)
19542               {
19543                 tree t = TREE_OPERAND (expression, i);
19544
19545                 /* In some cases, some of the operands may be missing.l
19546                    (For example, in the case of PREDECREMENT_EXPR, the
19547                    amount to increment by may be missing.)  That doesn't
19548                    make the expression dependent.  */
19549                 if (t && value_dependent_expression_p (t))
19550                   return true;
19551               }
19552           }
19553           break;
19554         default:
19555           break;
19556         }
19557       break;
19558     }
19559
19560   /* The expression is not value-dependent.  */
19561   return false;
19562 }
19563
19564 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19565    [temp.dep.expr].  Note that an expression with no type is
19566    considered dependent.  Other parts of the compiler arrange for an
19567    expression with type-dependent subexpressions to have no type, so
19568    this function doesn't have to be fully recursive.  */
19569
19570 bool
19571 type_dependent_expression_p (tree expression)
19572 {
19573   if (!processing_template_decl)
19574     return false;
19575
19576   if (expression == error_mark_node)
19577     return false;
19578
19579   /* An unresolved name is always dependent.  */
19580   if (TREE_CODE (expression) == IDENTIFIER_NODE
19581       || TREE_CODE (expression) == USING_DECL)
19582     return true;
19583
19584   /* Some expression forms are never type-dependent.  */
19585   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19586       || TREE_CODE (expression) == SIZEOF_EXPR
19587       || TREE_CODE (expression) == ALIGNOF_EXPR
19588       || TREE_CODE (expression) == AT_ENCODE_EXPR
19589       || TREE_CODE (expression) == NOEXCEPT_EXPR
19590       || TREE_CODE (expression) == TRAIT_EXPR
19591       || TREE_CODE (expression) == TYPEID_EXPR
19592       || TREE_CODE (expression) == DELETE_EXPR
19593       || TREE_CODE (expression) == VEC_DELETE_EXPR
19594       || TREE_CODE (expression) == THROW_EXPR)
19595     return false;
19596
19597   /* The types of these expressions depends only on the type to which
19598      the cast occurs.  */
19599   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19600       || TREE_CODE (expression) == STATIC_CAST_EXPR
19601       || TREE_CODE (expression) == CONST_CAST_EXPR
19602       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19603       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19604       || TREE_CODE (expression) == CAST_EXPR)
19605     return dependent_type_p (TREE_TYPE (expression));
19606
19607   /* The types of these expressions depends only on the type created
19608      by the expression.  */
19609   if (TREE_CODE (expression) == NEW_EXPR
19610       || TREE_CODE (expression) == VEC_NEW_EXPR)
19611     {
19612       /* For NEW_EXPR tree nodes created inside a template, either
19613          the object type itself or a TREE_LIST may appear as the
19614          operand 1.  */
19615       tree type = TREE_OPERAND (expression, 1);
19616       if (TREE_CODE (type) == TREE_LIST)
19617         /* This is an array type.  We need to check array dimensions
19618            as well.  */
19619         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19620                || value_dependent_expression_p
19621                     (TREE_OPERAND (TREE_VALUE (type), 1));
19622       else
19623         return dependent_type_p (type);
19624     }
19625
19626   if (TREE_CODE (expression) == SCOPE_REF)
19627     {
19628       tree scope = TREE_OPERAND (expression, 0);
19629       tree name = TREE_OPERAND (expression, 1);
19630
19631       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19632          contains an identifier associated by name lookup with one or more
19633          declarations declared with a dependent type, or...a
19634          nested-name-specifier or qualified-id that names a member of an
19635          unknown specialization.  */
19636       return (type_dependent_expression_p (name)
19637               || dependent_scope_p (scope));
19638     }
19639
19640   if (TREE_CODE (expression) == FUNCTION_DECL
19641       && DECL_LANG_SPECIFIC (expression)
19642       && DECL_TEMPLATE_INFO (expression)
19643       && (any_dependent_template_arguments_p
19644           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19645     return true;
19646
19647   if (TREE_CODE (expression) == TEMPLATE_DECL
19648       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19649     return false;
19650
19651   if (TREE_CODE (expression) == STMT_EXPR)
19652     expression = stmt_expr_value_expr (expression);
19653
19654   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19655     {
19656       tree elt;
19657       unsigned i;
19658
19659       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19660         {
19661           if (type_dependent_expression_p (elt))
19662             return true;
19663         }
19664       return false;
19665     }
19666
19667   /* A static data member of the current instantiation with incomplete
19668      array type is type-dependent, as the definition and specializations
19669      can have different bounds.  */
19670   if (TREE_CODE (expression) == VAR_DECL
19671       && DECL_CLASS_SCOPE_P (expression)
19672       && dependent_type_p (DECL_CONTEXT (expression))
19673       && VAR_HAD_UNKNOWN_BOUND (expression))
19674     return true;
19675
19676   if (TREE_TYPE (expression) == unknown_type_node)
19677     {
19678       if (TREE_CODE (expression) == ADDR_EXPR)
19679         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19680       if (TREE_CODE (expression) == COMPONENT_REF
19681           || TREE_CODE (expression) == OFFSET_REF)
19682         {
19683           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19684             return true;
19685           expression = TREE_OPERAND (expression, 1);
19686           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19687             return false;
19688         }
19689       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19690       if (TREE_CODE (expression) == SCOPE_REF)
19691         return false;
19692
19693       if (BASELINK_P (expression))
19694         expression = BASELINK_FUNCTIONS (expression);
19695
19696       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19697         {
19698           if (any_dependent_template_arguments_p
19699               (TREE_OPERAND (expression, 1)))
19700             return true;
19701           expression = TREE_OPERAND (expression, 0);
19702         }
19703       gcc_assert (TREE_CODE (expression) == OVERLOAD
19704                   || TREE_CODE (expression) == FUNCTION_DECL);
19705
19706       while (expression)
19707         {
19708           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19709             return true;
19710           expression = OVL_NEXT (expression);
19711         }
19712       return false;
19713     }
19714
19715   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19716
19717   return (dependent_type_p (TREE_TYPE (expression)));
19718 }
19719
19720 /* Like type_dependent_expression_p, but it also works while not processing
19721    a template definition, i.e. during substitution or mangling.  */
19722
19723 bool
19724 type_dependent_expression_p_push (tree expr)
19725 {
19726   bool b;
19727   ++processing_template_decl;
19728   b = type_dependent_expression_p (expr);
19729   --processing_template_decl;
19730   return b;
19731 }
19732
19733 /* Returns TRUE if ARGS contains a type-dependent expression.  */
19734
19735 bool
19736 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19737 {
19738   unsigned int i;
19739   tree arg;
19740
19741   FOR_EACH_VEC_ELT (tree, args, i, arg)
19742     {
19743       if (type_dependent_expression_p (arg))
19744         return true;
19745     }
19746   return false;
19747 }
19748
19749 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19750    expressions) contains any type-dependent expressions.  */
19751
19752 bool
19753 any_type_dependent_elements_p (const_tree list)
19754 {
19755   for (; list; list = TREE_CHAIN (list))
19756     if (value_dependent_expression_p (TREE_VALUE (list)))
19757       return true;
19758
19759   return false;
19760 }
19761
19762 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19763    expressions) contains any value-dependent expressions.  */
19764
19765 bool
19766 any_value_dependent_elements_p (const_tree list)
19767 {
19768   for (; list; list = TREE_CHAIN (list))
19769     if (value_dependent_expression_p (TREE_VALUE (list)))
19770       return true;
19771
19772   return false;
19773 }
19774
19775 /* Returns TRUE if the ARG (a template argument) is dependent.  */
19776
19777 bool
19778 dependent_template_arg_p (tree arg)
19779 {
19780   if (!processing_template_decl)
19781     return false;
19782
19783   /* Assume a template argument that was wrongly written by the user
19784      is dependent. This is consistent with what
19785      any_dependent_template_arguments_p [that calls this function]
19786      does.  */
19787   if (!arg || arg == error_mark_node)
19788     return true;
19789
19790   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19791     arg = ARGUMENT_PACK_SELECT_ARG (arg);
19792
19793   if (TREE_CODE (arg) == TEMPLATE_DECL
19794       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19795     return dependent_template_p (arg);
19796   else if (ARGUMENT_PACK_P (arg))
19797     {
19798       tree args = ARGUMENT_PACK_ARGS (arg);
19799       int i, len = TREE_VEC_LENGTH (args);
19800       for (i = 0; i < len; ++i)
19801         {
19802           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19803             return true;
19804         }
19805
19806       return false;
19807     }
19808   else if (TYPE_P (arg))
19809     return dependent_type_p (arg);
19810   else
19811     return (type_dependent_expression_p (arg)
19812             || value_dependent_expression_p (arg));
19813 }
19814
19815 /* Returns true if ARGS (a collection of template arguments) contains
19816    any types that require structural equality testing.  */
19817
19818 bool
19819 any_template_arguments_need_structural_equality_p (tree args)
19820 {
19821   int i;
19822   int j;
19823
19824   if (!args)
19825     return false;
19826   if (args == error_mark_node)
19827     return true;
19828
19829   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19830     {
19831       tree level = TMPL_ARGS_LEVEL (args, i + 1);
19832       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19833         {
19834           tree arg = TREE_VEC_ELT (level, j);
19835           tree packed_args = NULL_TREE;
19836           int k, len = 1;
19837
19838           if (ARGUMENT_PACK_P (arg))
19839             {
19840               /* Look inside the argument pack.  */
19841               packed_args = ARGUMENT_PACK_ARGS (arg);
19842               len = TREE_VEC_LENGTH (packed_args);
19843             }
19844
19845           for (k = 0; k < len; ++k)
19846             {
19847               if (packed_args)
19848                 arg = TREE_VEC_ELT (packed_args, k);
19849
19850               if (error_operand_p (arg))
19851                 return true;
19852               else if (TREE_CODE (arg) == TEMPLATE_DECL
19853                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19854                 continue;
19855               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19856                 return true;
19857               else if (!TYPE_P (arg) && TREE_TYPE (arg)
19858                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19859                 return true;
19860             }
19861         }
19862     }
19863
19864   return false;
19865 }
19866
19867 /* Returns true if ARGS (a collection of template arguments) contains
19868    any dependent arguments.  */
19869
19870 bool
19871 any_dependent_template_arguments_p (const_tree args)
19872 {
19873   int i;
19874   int j;
19875
19876   if (!args)
19877     return false;
19878   if (args == error_mark_node)
19879     return true;
19880
19881   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19882     {
19883       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19884       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19885         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19886           return true;
19887     }
19888
19889   return false;
19890 }
19891
19892 /* Returns TRUE if the template TMPL is dependent.  */
19893
19894 bool
19895 dependent_template_p (tree tmpl)
19896 {
19897   if (TREE_CODE (tmpl) == OVERLOAD)
19898     {
19899       while (tmpl)
19900         {
19901           if (dependent_template_p (OVL_CURRENT (tmpl)))
19902             return true;
19903           tmpl = OVL_NEXT (tmpl);
19904         }
19905       return false;
19906     }
19907
19908   /* Template template parameters are dependent.  */
19909   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19910       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19911     return true;
19912   /* So are names that have not been looked up.  */
19913   if (TREE_CODE (tmpl) == SCOPE_REF
19914       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19915     return true;
19916   /* So are member templates of dependent classes.  */
19917   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19918     return dependent_type_p (DECL_CONTEXT (tmpl));
19919   return false;
19920 }
19921
19922 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19923
19924 bool
19925 dependent_template_id_p (tree tmpl, tree args)
19926 {
19927   return (dependent_template_p (tmpl)
19928           || any_dependent_template_arguments_p (args));
19929 }
19930
19931 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19932    is dependent.  */
19933
19934 bool
19935 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19936 {
19937   int i;
19938
19939   if (!processing_template_decl)
19940     return false;
19941
19942   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19943     {
19944       tree decl = TREE_VEC_ELT (declv, i);
19945       tree init = TREE_VEC_ELT (initv, i);
19946       tree cond = TREE_VEC_ELT (condv, i);
19947       tree incr = TREE_VEC_ELT (incrv, i);
19948
19949       if (type_dependent_expression_p (decl))
19950         return true;
19951
19952       if (init && type_dependent_expression_p (init))
19953         return true;
19954
19955       if (type_dependent_expression_p (cond))
19956         return true;
19957
19958       if (COMPARISON_CLASS_P (cond)
19959           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19960               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19961         return true;
19962
19963       if (TREE_CODE (incr) == MODOP_EXPR)
19964         {
19965           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19966               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19967             return true;
19968         }
19969       else if (type_dependent_expression_p (incr))
19970         return true;
19971       else if (TREE_CODE (incr) == MODIFY_EXPR)
19972         {
19973           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
19974             return true;
19975           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
19976             {
19977               tree t = TREE_OPERAND (incr, 1);
19978               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19979                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19980                 return true;
19981             }
19982         }
19983     }
19984
19985   return false;
19986 }
19987
19988 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
19989    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
19990    no such TYPE can be found.  Note that this function peers inside
19991    uninstantiated templates and therefore should be used only in
19992    extremely limited situations.  ONLY_CURRENT_P restricts this
19993    peering to the currently open classes hierarchy (which is required
19994    when comparing types).  */
19995
19996 tree
19997 resolve_typename_type (tree type, bool only_current_p)
19998 {
19999   tree scope;
20000   tree name;
20001   tree decl;
20002   int quals;
20003   tree pushed_scope;
20004   tree result;
20005
20006   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
20007
20008   scope = TYPE_CONTEXT (type);
20009   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
20010      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
20011      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
20012      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
20013      identifier  of the TYPENAME_TYPE anymore.
20014      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
20015      TYPENAME_TYPE instead, we avoid messing up with a possible
20016      typedef variant case.  */
20017   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
20018
20019   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
20020      it first before we can figure out what NAME refers to.  */
20021   if (TREE_CODE (scope) == TYPENAME_TYPE)
20022     scope = resolve_typename_type (scope, only_current_p);
20023   /* If we don't know what SCOPE refers to, then we cannot resolve the
20024      TYPENAME_TYPE.  */
20025   if (TREE_CODE (scope) == TYPENAME_TYPE)
20026     return type;
20027   /* If the SCOPE is a template type parameter, we have no way of
20028      resolving the name.  */
20029   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
20030     return type;
20031   /* If the SCOPE is not the current instantiation, there's no reason
20032      to look inside it.  */
20033   if (only_current_p && !currently_open_class (scope))
20034     return type;
20035   /* If this is a typedef, we don't want to look inside (c++/11987).  */
20036   if (typedef_variant_p (type))
20037     return type;
20038   /* If SCOPE isn't the template itself, it will not have a valid
20039      TYPE_FIELDS list.  */
20040   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
20041     /* scope is either the template itself or a compatible instantiation
20042        like X<T>, so look up the name in the original template.  */
20043     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
20044   else
20045     /* scope is a partial instantiation, so we can't do the lookup or we
20046        will lose the template arguments.  */
20047     return type;
20048   /* Enter the SCOPE so that name lookup will be resolved as if we
20049      were in the class definition.  In particular, SCOPE will no
20050      longer be considered a dependent type.  */
20051   pushed_scope = push_scope (scope);
20052   /* Look up the declaration.  */
20053   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
20054                         tf_warning_or_error);
20055
20056   result = NULL_TREE;
20057   
20058   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
20059      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
20060   if (!decl)
20061     /*nop*/;
20062   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
20063            && TREE_CODE (decl) == TYPE_DECL)
20064     {
20065       result = TREE_TYPE (decl);
20066       if (result == error_mark_node)
20067         result = NULL_TREE;
20068     }
20069   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
20070            && DECL_CLASS_TEMPLATE_P (decl))
20071     {
20072       tree tmpl;
20073       tree args;
20074       /* Obtain the template and the arguments.  */
20075       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
20076       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
20077       /* Instantiate the template.  */
20078       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
20079                                       /*entering_scope=*/0,
20080                                       tf_error | tf_user);
20081       if (result == error_mark_node)
20082         result = NULL_TREE;
20083     }
20084   
20085   /* Leave the SCOPE.  */
20086   if (pushed_scope)
20087     pop_scope (pushed_scope);
20088
20089   /* If we failed to resolve it, return the original typename.  */
20090   if (!result)
20091     return type;
20092   
20093   /* If lookup found a typename type, resolve that too.  */
20094   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
20095     {
20096       /* Ill-formed programs can cause infinite recursion here, so we
20097          must catch that.  */
20098       TYPENAME_IS_RESOLVING_P (type) = 1;
20099       result = resolve_typename_type (result, only_current_p);
20100       TYPENAME_IS_RESOLVING_P (type) = 0;
20101     }
20102   
20103   /* Qualify the resulting type.  */
20104   quals = cp_type_quals (type);
20105   if (quals)
20106     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
20107
20108   return result;
20109 }
20110
20111 /* EXPR is an expression which is not type-dependent.  Return a proxy
20112    for EXPR that can be used to compute the types of larger
20113    expressions containing EXPR.  */
20114
20115 tree
20116 build_non_dependent_expr (tree expr)
20117 {
20118   tree inner_expr;
20119
20120 #ifdef ENABLE_CHECKING
20121   /* Try to get a constant value for all non-type-dependent expressions in
20122       order to expose bugs in *_dependent_expression_p and constexpr.  */
20123   if (cxx_dialect >= cxx0x)
20124     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
20125 #endif
20126
20127   /* Preserve OVERLOADs; the functions must be available to resolve
20128      types.  */
20129   inner_expr = expr;
20130   if (TREE_CODE (inner_expr) == STMT_EXPR)
20131     inner_expr = stmt_expr_value_expr (inner_expr);
20132   if (TREE_CODE (inner_expr) == ADDR_EXPR)
20133     inner_expr = TREE_OPERAND (inner_expr, 0);
20134   if (TREE_CODE (inner_expr) == COMPONENT_REF)
20135     inner_expr = TREE_OPERAND (inner_expr, 1);
20136   if (is_overloaded_fn (inner_expr)
20137       || TREE_CODE (inner_expr) == OFFSET_REF)
20138     return expr;
20139   /* There is no need to return a proxy for a variable.  */
20140   if (TREE_CODE (expr) == VAR_DECL)
20141     return expr;
20142   /* Preserve string constants; conversions from string constants to
20143      "char *" are allowed, even though normally a "const char *"
20144      cannot be used to initialize a "char *".  */
20145   if (TREE_CODE (expr) == STRING_CST)
20146     return expr;
20147   /* Preserve arithmetic constants, as an optimization -- there is no
20148      reason to create a new node.  */
20149   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
20150     return expr;
20151   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
20152      There is at least one place where we want to know that a
20153      particular expression is a throw-expression: when checking a ?:
20154      expression, there are special rules if the second or third
20155      argument is a throw-expression.  */
20156   if (TREE_CODE (expr) == THROW_EXPR)
20157     return expr;
20158
20159   /* Don't wrap an initializer list, we need to be able to look inside.  */
20160   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
20161     return expr;
20162
20163   if (TREE_CODE (expr) == COND_EXPR)
20164     return build3 (COND_EXPR,
20165                    TREE_TYPE (expr),
20166                    TREE_OPERAND (expr, 0),
20167                    (TREE_OPERAND (expr, 1)
20168                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
20169                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
20170                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
20171   if (TREE_CODE (expr) == COMPOUND_EXPR
20172       && !COMPOUND_EXPR_OVERLOADED (expr))
20173     return build2 (COMPOUND_EXPR,
20174                    TREE_TYPE (expr),
20175                    TREE_OPERAND (expr, 0),
20176                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
20177
20178   /* If the type is unknown, it can't really be non-dependent */
20179   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
20180
20181   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
20182   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
20183 }
20184
20185 /* ARGS is a vector of expressions as arguments to a function call.
20186    Replace the arguments with equivalent non-dependent expressions.
20187    This modifies ARGS in place.  */
20188
20189 void
20190 make_args_non_dependent (VEC(tree,gc) *args)
20191 {
20192   unsigned int ix;
20193   tree arg;
20194
20195   FOR_EACH_VEC_ELT (tree, args, ix, arg)
20196     {
20197       tree newarg = build_non_dependent_expr (arg);
20198       if (newarg != arg)
20199         VEC_replace (tree, args, ix, newarg);
20200     }
20201 }
20202
20203 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
20204    with a level one deeper than the actual template parms.  */
20205
20206 tree
20207 make_auto (void)
20208 {
20209   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
20210   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
20211                                TYPE_DECL, get_identifier ("auto"), au);
20212   TYPE_STUB_DECL (au) = TYPE_NAME (au);
20213   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20214     (0, processing_template_decl + 1, processing_template_decl + 1,
20215      0, TYPE_NAME (au), NULL_TREE);
20216   TYPE_CANONICAL (au) = canonical_type_parameter (au);
20217   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20218   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20219
20220   return au;
20221 }
20222
20223 /* Given type ARG, return std::initializer_list<ARG>.  */
20224
20225 static tree
20226 listify (tree arg)
20227 {
20228   tree std_init_list = namespace_binding
20229     (get_identifier ("initializer_list"), std_node);
20230   tree argvec;
20231   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20232     {    
20233       error ("deducing from brace-enclosed initializer list requires "
20234              "#include <initializer_list>");
20235       return error_mark_node;
20236     }
20237   argvec = make_tree_vec (1);
20238   TREE_VEC_ELT (argvec, 0) = arg;
20239   return lookup_template_class (std_init_list, argvec, NULL_TREE,
20240                                 NULL_TREE, 0, tf_warning_or_error);
20241 }
20242
20243 /* Replace auto in TYPE with std::initializer_list<auto>.  */
20244
20245 static tree
20246 listify_autos (tree type, tree auto_node)
20247 {
20248   tree init_auto = listify (auto_node);
20249   tree argvec = make_tree_vec (1);
20250   TREE_VEC_ELT (argvec, 0) = init_auto;
20251   if (processing_template_decl)
20252     argvec = add_to_template_args (current_template_args (), argvec);
20253   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20254 }
20255
20256 /* walk_tree helper for do_auto_deduction.  */
20257
20258 static tree
20259 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
20260                  void *type)
20261 {
20262   /* Is this a variable with the type we're looking for?  */
20263   if (DECL_P (*tp)
20264       && TREE_TYPE (*tp) == type)
20265     return *tp;
20266   else
20267     return NULL_TREE;
20268 }
20269
20270 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20271    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
20272
20273 tree
20274 do_auto_deduction (tree type, tree init, tree auto_node)
20275 {
20276   tree parms, tparms, targs;
20277   tree args[1];
20278   tree decl;
20279   int val;
20280
20281   if (processing_template_decl
20282       && (TREE_TYPE (init) == NULL_TREE
20283           || BRACE_ENCLOSED_INITIALIZER_P (init)))
20284     /* Not enough information to try this yet.  */
20285     return type;
20286
20287   /* The name of the object being declared shall not appear in the
20288      initializer expression.  */
20289   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
20290   if (decl)
20291     {
20292       error ("variable %q#D with %<auto%> type used in its own "
20293              "initializer", decl);
20294       return error_mark_node;
20295     }
20296
20297   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20298      with either a new invented type template parameter U or, if the
20299      initializer is a braced-init-list (8.5.4), with
20300      std::initializer_list<U>.  */
20301   if (BRACE_ENCLOSED_INITIALIZER_P (init))
20302     type = listify_autos (type, auto_node);
20303
20304   init = resolve_nondeduced_context (init);
20305
20306   parms = build_tree_list (NULL_TREE, type);
20307   args[0] = init;
20308   tparms = make_tree_vec (1);
20309   targs = make_tree_vec (1);
20310   TREE_VEC_ELT (tparms, 0)
20311     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20312   val = type_unification_real (tparms, targs, parms, args, 1, 0,
20313                                DEDUCE_CALL, LOOKUP_NORMAL,
20314                                /*explain_p=*/false);
20315   if (val > 0)
20316     {
20317       if (processing_template_decl)
20318         /* Try again at instantiation time.  */
20319         return type;
20320       if (type && type != error_mark_node)
20321         /* If type is error_mark_node a diagnostic must have been
20322            emitted by now.  Also, having a mention to '<type error>'
20323            in the diagnostic is not really useful to the user.  */
20324         error ("unable to deduce %qT from %qE", type, init);
20325       return error_mark_node;
20326     }
20327
20328   /* If the list of declarators contains more than one declarator, the type
20329      of each declared variable is determined as described above. If the
20330      type deduced for the template parameter U is not the same in each
20331      deduction, the program is ill-formed.  */
20332   if (TREE_TYPE (auto_node)
20333       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20334     {
20335       error ("inconsistent deduction for %qT: %qT and then %qT",
20336              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20337       return error_mark_node;
20338     }
20339   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20340
20341   if (processing_template_decl)
20342     targs = add_to_template_args (current_template_args (), targs);
20343   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20344 }
20345
20346 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20347    result.  */
20348
20349 tree
20350 splice_late_return_type (tree type, tree late_return_type)
20351 {
20352   tree argvec;
20353
20354   if (late_return_type == NULL_TREE)
20355     return type;
20356   argvec = make_tree_vec (1);
20357   TREE_VEC_ELT (argvec, 0) = late_return_type;
20358   if (processing_template_parmlist)
20359     /* For a late-specified return type in a template type-parameter, we
20360        need to add a dummy argument level for its parmlist.  */
20361     argvec = add_to_template_args
20362       (make_tree_vec (processing_template_parmlist), argvec);
20363   if (current_template_parms)
20364     argvec = add_to_template_args (current_template_args (), argvec);
20365   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20366 }
20367
20368 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
20369
20370 bool
20371 is_auto (const_tree type)
20372 {
20373   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20374       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20375     return true;
20376   else
20377     return false;
20378 }
20379
20380 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
20381    appear as a type-specifier for the declaration in question, we don't
20382    have to look through the whole type.  */
20383
20384 tree
20385 type_uses_auto (tree type)
20386 {
20387   enum tree_code code;
20388   if (is_auto (type))
20389     return type;
20390
20391   code = TREE_CODE (type);
20392
20393   if (code == POINTER_TYPE || code == REFERENCE_TYPE
20394       || code == OFFSET_TYPE || code == FUNCTION_TYPE
20395       || code == METHOD_TYPE || code == ARRAY_TYPE)
20396     return type_uses_auto (TREE_TYPE (type));
20397
20398   if (TYPE_PTRMEMFUNC_P (type))
20399     return type_uses_auto (TREE_TYPE (TREE_TYPE
20400                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20401
20402   return NULL_TREE;
20403 }
20404
20405 /* For a given template T, return the vector of typedefs referenced
20406    in T for which access check is needed at T instantiation time.
20407    T is either  a FUNCTION_DECL or a RECORD_TYPE.
20408    Those typedefs were added to T by the function
20409    append_type_to_template_for_access_check.  */
20410
20411 VEC(qualified_typedef_usage_t,gc)*
20412 get_types_needing_access_check (tree t)
20413 {
20414   tree ti;
20415   VEC(qualified_typedef_usage_t,gc) *result = NULL;
20416
20417   if (!t || t == error_mark_node)
20418     return NULL;
20419
20420   if (!(ti = get_template_info (t)))
20421     return NULL;
20422
20423   if (CLASS_TYPE_P (t)
20424       || TREE_CODE (t) == FUNCTION_DECL)
20425     {
20426       if (!TI_TEMPLATE (ti))
20427         return NULL;
20428
20429       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20430     }
20431
20432   return result;
20433 }
20434
20435 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
20436    tied to T. That list of typedefs will be access checked at
20437    T instantiation time.
20438    T is either a FUNCTION_DECL or a RECORD_TYPE.
20439    TYPE_DECL is a TYPE_DECL node representing a typedef.
20440    SCOPE is the scope through which TYPE_DECL is accessed.
20441    LOCATION is the location of the usage point of TYPE_DECL.
20442
20443    This function is a subroutine of
20444    append_type_to_template_for_access_check.  */
20445
20446 static void
20447 append_type_to_template_for_access_check_1 (tree t,
20448                                             tree type_decl,
20449                                             tree scope,
20450                                             location_t location)
20451 {
20452   qualified_typedef_usage_t typedef_usage;
20453   tree ti;
20454
20455   if (!t || t == error_mark_node)
20456     return;
20457
20458   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20459                || CLASS_TYPE_P (t))
20460               && type_decl
20461               && TREE_CODE (type_decl) == TYPE_DECL
20462               && scope);
20463
20464   if (!(ti = get_template_info (t)))
20465     return;
20466
20467   gcc_assert (TI_TEMPLATE (ti));
20468
20469   typedef_usage.typedef_decl = type_decl;
20470   typedef_usage.context = scope;
20471   typedef_usage.locus = location;
20472
20473   VEC_safe_push (qualified_typedef_usage_t, gc,
20474                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
20475                  &typedef_usage);
20476 }
20477
20478 /* Append TYPE_DECL to the template TEMPL.
20479    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20480    At TEMPL instanciation time, TYPE_DECL will be checked to see
20481    if it can be accessed through SCOPE.
20482    LOCATION is the location of the usage point of TYPE_DECL.
20483
20484    e.g. consider the following code snippet:
20485
20486      class C
20487      {
20488        typedef int myint;
20489      };
20490
20491      template<class U> struct S
20492      {
20493        C::myint mi; // <-- usage point of the typedef C::myint
20494      };
20495
20496      S<char> s;
20497
20498    At S<char> instantiation time, we need to check the access of C::myint
20499    In other words, we need to check the access of the myint typedef through
20500    the C scope. For that purpose, this function will add the myint typedef
20501    and the scope C through which its being accessed to a list of typedefs
20502    tied to the template S. That list will be walked at template instantiation
20503    time and access check performed on each typedefs it contains.
20504    Note that this particular code snippet should yield an error because
20505    myint is private to C.  */
20506
20507 void
20508 append_type_to_template_for_access_check (tree templ,
20509                                           tree type_decl,
20510                                           tree scope,
20511                                           location_t location)
20512 {
20513   qualified_typedef_usage_t *iter;
20514   int i;
20515
20516   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20517
20518   /* Make sure we don't append the type to the template twice.  */
20519   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20520                     get_types_needing_access_check (templ),
20521                     i, iter)
20522     if (iter->typedef_decl == type_decl && scope == iter->context)
20523       return;
20524
20525   append_type_to_template_for_access_check_1 (templ, type_decl,
20526                                               scope, location);
20527 }
20528
20529 /* Set up the hash tables for template instantiations.  */
20530
20531 void
20532 init_template_processing (void)
20533 {
20534   decl_specializations = htab_create_ggc (37,
20535                                           hash_specialization,
20536                                           eq_specializations,
20537                                           ggc_free);
20538   type_specializations = htab_create_ggc (37,
20539                                           hash_specialization,
20540                                           eq_specializations,
20541                                           ggc_free);
20542 }
20543
20544 /* Print stats about the template hash tables for -fstats.  */
20545
20546 void
20547 print_template_statistics (void)
20548 {
20549   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20550            "%f collisions\n", (long) htab_size (decl_specializations),
20551            (long) htab_elements (decl_specializations),
20552            htab_collisions (decl_specializations));
20553   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20554            "%f collisions\n", (long) htab_size (type_specializations),
20555            (long) htab_elements (type_specializations),
20556            htab_collisions (type_specializations));
20557 }
20558
20559 #include "gt-cp-pt.h"