OSDN Git Service

3bd45f7ea3787f46a285dbc75140812fc5354cca
[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
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 "obstack.h"
34 #include "tree.h"
35 #include "intl.h"
36 #include "pointer-set.h"
37 #include "flags.h"
38 #include "c-common.h"
39 #include "cp-tree.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "except.h"
45 #include "toplev.h"
46 #include "rtl.h"
47 #include "timevar.h"
48 #include "tree-iterator.h"
49 #include "vecprim.h"
50
51 /* The type of functions taking a tree, and some additional data, and
52    returning an int.  */
53 typedef int (*tree_fn_t) (tree, void*);
54
55 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
56    instantiations have been deferred, either because their definitions
57    were not yet available, or because we were putting off doing the work.  */
58 struct GTY (()) pending_template {
59   struct pending_template *next;
60   struct tinst_level *tinst;
61 };
62
63 static GTY(()) struct pending_template *pending_templates;
64 static GTY(()) struct pending_template *last_pending_template;
65
66 int processing_template_parmlist;
67 static int template_header_count;
68
69 static GTY(()) tree saved_trees;
70 static VEC(int,heap) *inline_parm_levels;
71
72 static GTY(()) struct tinst_level *current_tinst_level;
73
74 static GTY(()) tree saved_access_scope;
75
76 /* Live only within one (recursive) call to tsubst_expr.  We use
77    this to pass the statement expression node from the STMT_EXPR
78    to the EXPR_STMT that is its result.  */
79 static tree cur_stmt_expr;
80
81 /* A map from local variable declarations in the body of the template
82    presently being instantiated to the corresponding instantiated
83    local variables.  */
84 static htab_t local_specializations;
85
86 typedef struct GTY(()) spec_entry
87 {
88   tree tmpl;
89   tree args;
90   tree spec;
91 } spec_entry;
92
93 static GTY ((param_is (spec_entry)))
94   htab_t decl_specializations;
95
96 static GTY ((param_is (spec_entry)))
97   htab_t type_specializations;
98
99 /* Contains canonical template parameter types. The vector is indexed by
100    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
101    TREE_LIST, whose TREE_VALUEs contain the canonical template
102    parameters of various types and levels.  */
103 static GTY(()) VEC(tree,gc) *canonical_template_parms;
104
105 #define UNIFY_ALLOW_NONE 0
106 #define UNIFY_ALLOW_MORE_CV_QUAL 1
107 #define UNIFY_ALLOW_LESS_CV_QUAL 2
108 #define UNIFY_ALLOW_DERIVED 4
109 #define UNIFY_ALLOW_INTEGER 8
110 #define UNIFY_ALLOW_OUTER_LEVEL 16
111 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
112 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
113
114 static void push_access_scope (tree);
115 static void pop_access_scope (tree);
116 static bool resolve_overloaded_unification (tree, tree, tree, tree,
117                                             unification_kind_t, int);
118 static int try_one_overload (tree, tree, tree, tree, tree,
119                              unification_kind_t, int, bool);
120 static int unify (tree, tree, tree, tree, int);
121 static void add_pending_template (tree);
122 static tree reopen_tinst_level (struct tinst_level *);
123 static tree tsubst_initializer_list (tree, tree);
124 static tree get_class_bindings (tree, tree, tree);
125 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
126                                    bool, bool);
127 static void tsubst_enum (tree, tree, tree);
128 static tree add_to_template_args (tree, tree);
129 static tree add_outermost_template_args (tree, tree);
130 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
131 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
132                                              tree);
133 static int type_unification_real (tree, tree, tree, const tree *,
134                                   unsigned int, int, unification_kind_t, int);
135 static void note_template_header (int);
136 static tree convert_nontype_argument_function (tree, tree);
137 static tree convert_nontype_argument (tree, tree);
138 static tree convert_template_argument (tree, tree, tree,
139                                        tsubst_flags_t, int, tree);
140 static int for_each_template_parm (tree, tree_fn_t, void*,
141                                    struct pointer_set_t*, bool);
142 static tree expand_template_argument_pack (tree);
143 static tree build_template_parm_index (int, int, int, tree, tree);
144 static bool inline_needs_template_parms (tree);
145 static void push_inline_template_parms_recursive (tree, int);
146 static tree retrieve_local_specialization (tree);
147 static void register_local_specialization (tree, tree);
148 static hashval_t hash_specialization (const void *p);
149 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
150 static int mark_template_parm (tree, void *);
151 static int template_parm_this_level_p (tree, void *);
152 static tree tsubst_friend_function (tree, tree);
153 static tree tsubst_friend_class (tree, tree);
154 static int can_complete_type_without_circularity (tree);
155 static tree get_bindings (tree, tree, tree, bool);
156 static int template_decl_level (tree);
157 static int check_cv_quals_for_unify (int, tree, tree);
158 static void template_parm_level_and_index (tree, int*, int*);
159 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
160 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
161 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
162 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
163 static void regenerate_decl_from_template (tree, tree);
164 static tree most_specialized_class (tree, tree);
165 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
166 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
167 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
168 static bool check_specialization_scope (void);
169 static tree process_partial_specialization (tree);
170 static void set_current_access_from_decl (tree);
171 static tree get_template_base (tree, tree, tree, tree);
172 static tree try_class_unification (tree, tree, tree, tree);
173 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
174                                            tree, tree);
175 static bool template_template_parm_bindings_ok_p (tree, tree);
176 static int template_args_equal (tree, tree);
177 static void tsubst_default_arguments (tree);
178 static tree for_each_template_parm_r (tree *, int *, void *);
179 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
180 static void copy_default_args_to_explicit_spec (tree);
181 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
182 static int eq_local_specializations (const void *, const void *);
183 static bool dependent_template_arg_p (tree);
184 static bool any_template_arguments_need_structural_equality_p (tree);
185 static bool dependent_type_p_r (tree);
186 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
187 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
188 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
189 static tree tsubst_decl (tree, tree, tsubst_flags_t);
190 static void perform_typedefs_access_check (tree tmpl, tree targs);
191 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
192                                                         location_t);
193 static hashval_t iterative_hash_template_arg (tree arg, hashval_t val);
194 static tree listify (tree);
195 static tree listify_autos (tree, tree);
196
197 /* Make the current scope suitable for access checking when we are
198    processing T.  T can be FUNCTION_DECL for instantiated function
199    template, or VAR_DECL for static member variable (need by
200    instantiate_decl).  */
201
202 static void
203 push_access_scope (tree t)
204 {
205   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
206               || TREE_CODE (t) == VAR_DECL);
207
208   if (DECL_FRIEND_CONTEXT (t))
209     push_nested_class (DECL_FRIEND_CONTEXT (t));
210   else if (DECL_CLASS_SCOPE_P (t))
211     push_nested_class (DECL_CONTEXT (t));
212   else
213     push_to_top_level ();
214
215   if (TREE_CODE (t) == FUNCTION_DECL)
216     {
217       saved_access_scope = tree_cons
218         (NULL_TREE, current_function_decl, saved_access_scope);
219       current_function_decl = t;
220     }
221 }
222
223 /* Restore the scope set up by push_access_scope.  T is the node we
224    are processing.  */
225
226 static void
227 pop_access_scope (tree t)
228 {
229   if (TREE_CODE (t) == FUNCTION_DECL)
230     {
231       current_function_decl = TREE_VALUE (saved_access_scope);
232       saved_access_scope = TREE_CHAIN (saved_access_scope);
233     }
234
235   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
236     pop_nested_class ();
237   else
238     pop_from_top_level ();
239 }
240
241 /* Do any processing required when DECL (a member template
242    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
243    to DECL, unless it is a specialization, in which case the DECL
244    itself is returned.  */
245
246 tree
247 finish_member_template_decl (tree decl)
248 {
249   if (decl == error_mark_node)
250     return error_mark_node;
251
252   gcc_assert (DECL_P (decl));
253
254   if (TREE_CODE (decl) == TYPE_DECL)
255     {
256       tree type;
257
258       type = TREE_TYPE (decl);
259       if (type == error_mark_node)
260         return error_mark_node;
261       if (MAYBE_CLASS_TYPE_P (type)
262           && CLASSTYPE_TEMPLATE_INFO (type)
263           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
264         {
265           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
266           check_member_template (tmpl);
267           return tmpl;
268         }
269       return NULL_TREE;
270     }
271   else if (TREE_CODE (decl) == FIELD_DECL)
272     error ("data member %qD cannot be a member template", decl);
273   else if (DECL_TEMPLATE_INFO (decl))
274     {
275       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
276         {
277           check_member_template (DECL_TI_TEMPLATE (decl));
278           return DECL_TI_TEMPLATE (decl);
279         }
280       else
281         return decl;
282     }
283   else
284     error ("invalid member template declaration %qD", decl);
285
286   return error_mark_node;
287 }
288
289 /* Create a template info node.  */
290
291 tree
292 build_template_info (tree template_decl, tree template_args)
293 {
294   tree result = make_node (TEMPLATE_INFO);
295   TI_TEMPLATE (result) = template_decl;
296   TI_ARGS (result) = template_args;
297   return result;
298 }
299
300 /* Return the template info node corresponding to T, whatever T is.  */
301
302 tree
303 get_template_info (const_tree t)
304 {
305   tree tinfo = NULL_TREE;
306
307   if (!t || t == error_mark_node)
308     return NULL;
309
310   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
311     tinfo = DECL_TEMPLATE_INFO (t);
312
313   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
314     t = TREE_TYPE (t);
315
316   if (TAGGED_TYPE_P (t))
317     tinfo = TYPE_TEMPLATE_INFO (t);
318   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
319     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
320
321   return tinfo;
322 }
323
324 /* Returns the template nesting level of the indicated class TYPE.
325
326    For example, in:
327      template <class T>
328      struct A
329      {
330        template <class U>
331        struct B {};
332      };
333
334    A<T>::B<U> has depth two, while A<T> has depth one.
335    Both A<T>::B<int> and A<int>::B<U> have depth one, if
336    they are instantiations, not specializations.
337
338    This function is guaranteed to return 0 if passed NULL_TREE so
339    that, for example, `template_class_depth (current_class_type)' is
340    always safe.  */
341
342 int
343 template_class_depth (tree type)
344 {
345   int depth;
346
347   for (depth = 0;
348        type && TREE_CODE (type) != NAMESPACE_DECL;
349        type = (TREE_CODE (type) == FUNCTION_DECL)
350          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
351     {
352       tree tinfo = get_template_info (type);
353
354       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
355           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
356         ++depth;
357     }
358
359   return depth;
360 }
361
362 /* Subroutine of maybe_begin_member_template_processing.
363    Returns true if processing DECL needs us to push template parms.  */
364
365 static bool
366 inline_needs_template_parms (tree decl)
367 {
368   if (! DECL_TEMPLATE_INFO (decl))
369     return false;
370
371   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
372           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
373 }
374
375 /* Subroutine of maybe_begin_member_template_processing.
376    Push the template parms in PARMS, starting from LEVELS steps into the
377    chain, and ending at the beginning, since template parms are listed
378    innermost first.  */
379
380 static void
381 push_inline_template_parms_recursive (tree parmlist, int levels)
382 {
383   tree parms = TREE_VALUE (parmlist);
384   int i;
385
386   if (levels > 1)
387     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
388
389   ++processing_template_decl;
390   current_template_parms
391     = tree_cons (size_int (processing_template_decl),
392                  parms, current_template_parms);
393   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
394
395   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
396                NULL);
397   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
398     {
399       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
400
401       if (parm == error_mark_node)
402         continue;
403
404       gcc_assert (DECL_P (parm));
405
406       switch (TREE_CODE (parm))
407         {
408         case TYPE_DECL:
409         case TEMPLATE_DECL:
410           pushdecl (parm);
411           break;
412
413         case PARM_DECL:
414           {
415             /* Make a CONST_DECL as is done in process_template_parm.
416                It is ugly that we recreate this here; the original
417                version built in process_template_parm is no longer
418                available.  */
419             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
420                                     CONST_DECL, DECL_NAME (parm),
421                                     TREE_TYPE (parm));
422             DECL_ARTIFICIAL (decl) = 1;
423             TREE_CONSTANT (decl) = 1;
424             TREE_READONLY (decl) = 1;
425             DECL_INITIAL (decl) = DECL_INITIAL (parm);
426             SET_DECL_TEMPLATE_PARM_P (decl);
427             pushdecl (decl);
428           }
429           break;
430
431         default:
432           gcc_unreachable ();
433         }
434     }
435 }
436
437 /* Restore the template parameter context for a member template or
438    a friend template defined in a class definition.  */
439
440 void
441 maybe_begin_member_template_processing (tree decl)
442 {
443   tree parms;
444   int levels = 0;
445
446   if (inline_needs_template_parms (decl))
447     {
448       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
449       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
450
451       if (DECL_TEMPLATE_SPECIALIZATION (decl))
452         {
453           --levels;
454           parms = TREE_CHAIN (parms);
455         }
456
457       push_inline_template_parms_recursive (parms, levels);
458     }
459
460   /* Remember how many levels of template parameters we pushed so that
461      we can pop them later.  */
462   VEC_safe_push (int, heap, inline_parm_levels, levels);
463 }
464
465 /* Undo the effects of maybe_begin_member_template_processing.  */
466
467 void
468 maybe_end_member_template_processing (void)
469 {
470   int i;
471   int last;
472
473   if (VEC_length (int, inline_parm_levels) == 0)
474     return;
475
476   last = VEC_pop (int, inline_parm_levels);
477   for (i = 0; i < last; ++i)
478     {
479       --processing_template_decl;
480       current_template_parms = TREE_CHAIN (current_template_parms);
481       poplevel (0, 0, 0);
482     }
483 }
484
485 /* Return a new template argument vector which contains all of ARGS,
486    but has as its innermost set of arguments the EXTRA_ARGS.  */
487
488 static tree
489 add_to_template_args (tree args, tree extra_args)
490 {
491   tree new_args;
492   int extra_depth;
493   int i;
494   int j;
495
496   if (args == NULL_TREE)
497     return extra_args;
498
499   extra_depth = TMPL_ARGS_DEPTH (extra_args);
500   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
501
502   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
503     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
504
505   for (j = 1; j <= extra_depth; ++j, ++i)
506     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
507
508   return new_args;
509 }
510
511 /* Like add_to_template_args, but only the outermost ARGS are added to
512    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
513    (EXTRA_ARGS) levels are added.  This function is used to combine
514    the template arguments from a partial instantiation with the
515    template arguments used to attain the full instantiation from the
516    partial instantiation.  */
517
518 static tree
519 add_outermost_template_args (tree args, tree extra_args)
520 {
521   tree new_args;
522
523   /* If there are more levels of EXTRA_ARGS than there are ARGS,
524      something very fishy is going on.  */
525   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
526
527   /* If *all* the new arguments will be the EXTRA_ARGS, just return
528      them.  */
529   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
530     return extra_args;
531
532   /* For the moment, we make ARGS look like it contains fewer levels.  */
533   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
534
535   new_args = add_to_template_args (args, extra_args);
536
537   /* Now, we restore ARGS to its full dimensions.  */
538   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
539
540   return new_args;
541 }
542
543 /* Return the N levels of innermost template arguments from the ARGS.  */
544
545 tree
546 get_innermost_template_args (tree args, int n)
547 {
548   tree new_args;
549   int extra_levels;
550   int i;
551
552   gcc_assert (n >= 0);
553
554   /* If N is 1, just return the innermost set of template arguments.  */
555   if (n == 1)
556     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
557
558   /* If we're not removing anything, just return the arguments we were
559      given.  */
560   extra_levels = TMPL_ARGS_DEPTH (args) - n;
561   gcc_assert (extra_levels >= 0);
562   if (extra_levels == 0)
563     return args;
564
565   /* Make a new set of arguments, not containing the outer arguments.  */
566   new_args = make_tree_vec (n);
567   for (i = 1; i <= n; ++i)
568     SET_TMPL_ARGS_LEVEL (new_args, i,
569                          TMPL_ARGS_LEVEL (args, i + extra_levels));
570
571   return new_args;
572 }
573
574 /* The inverse of get_innermost_template_args: Return all but the innermost
575    EXTRA_LEVELS levels of template arguments from the ARGS.  */
576
577 static tree
578 strip_innermost_template_args (tree args, int extra_levels)
579 {
580   tree new_args;
581   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
582   int i;
583
584   gcc_assert (n >= 0);
585
586   /* If N is 1, just return the outermost set of template arguments.  */
587   if (n == 1)
588     return TMPL_ARGS_LEVEL (args, 1);
589
590   /* If we're not removing anything, just return the arguments we were
591      given.  */
592   gcc_assert (extra_levels >= 0);
593   if (extra_levels == 0)
594     return args;
595
596   /* Make a new set of arguments, not containing the inner arguments.  */
597   new_args = make_tree_vec (n);
598   for (i = 1; i <= n; ++i)
599     SET_TMPL_ARGS_LEVEL (new_args, i,
600                          TMPL_ARGS_LEVEL (args, i));
601
602   return new_args;
603 }
604
605 /* We've got a template header coming up; push to a new level for storing
606    the parms.  */
607
608 void
609 begin_template_parm_list (void)
610 {
611   /* We use a non-tag-transparent scope here, which causes pushtag to
612      put tags in this scope, rather than in the enclosing class or
613      namespace scope.  This is the right thing, since we want
614      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
615      global template class, push_template_decl handles putting the
616      TEMPLATE_DECL into top-level scope.  For a nested template class,
617      e.g.:
618
619        template <class T> struct S1 {
620          template <class T> struct S2 {};
621        };
622
623      pushtag contains special code to call pushdecl_with_scope on the
624      TEMPLATE_DECL for S2.  */
625   begin_scope (sk_template_parms, NULL);
626   ++processing_template_decl;
627   ++processing_template_parmlist;
628   note_template_header (0);
629 }
630
631 /* This routine is called when a specialization is declared.  If it is
632    invalid to declare a specialization here, an error is reported and
633    false is returned, otherwise this routine will return true.  */
634
635 static bool
636 check_specialization_scope (void)
637 {
638   tree scope = current_scope ();
639
640   /* [temp.expl.spec]
641
642      An explicit specialization shall be declared in the namespace of
643      which the template is a member, or, for member templates, in the
644      namespace of which the enclosing class or enclosing class
645      template is a member.  An explicit specialization of a member
646      function, member class or static data member of a class template
647      shall be declared in the namespace of which the class template
648      is a member.  */
649   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
650     {
651       error ("explicit specialization in non-namespace scope %qD", scope);
652       return false;
653     }
654
655   /* [temp.expl.spec]
656
657      In an explicit specialization declaration for a member of a class
658      template or a member template that appears in namespace scope,
659      the member template and some of its enclosing class templates may
660      remain unspecialized, except that the declaration shall not
661      explicitly specialize a class member template if its enclosing
662      class templates are not explicitly specialized as well.  */
663   if (current_template_parms)
664     {
665       error ("enclosing class templates are not explicitly specialized");
666       return false;
667     }
668
669   return true;
670 }
671
672 /* We've just seen template <>.  */
673
674 bool
675 begin_specialization (void)
676 {
677   begin_scope (sk_template_spec, NULL);
678   note_template_header (1);
679   return check_specialization_scope ();
680 }
681
682 /* Called at then end of processing a declaration preceded by
683    template<>.  */
684
685 void
686 end_specialization (void)
687 {
688   finish_scope ();
689   reset_specialization ();
690 }
691
692 /* Any template <>'s that we have seen thus far are not referring to a
693    function specialization.  */
694
695 void
696 reset_specialization (void)
697 {
698   processing_specialization = 0;
699   template_header_count = 0;
700 }
701
702 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
703    it was of the form template <>.  */
704
705 static void
706 note_template_header (int specialization)
707 {
708   processing_specialization = specialization;
709   template_header_count++;
710 }
711
712 /* We're beginning an explicit instantiation.  */
713
714 void
715 begin_explicit_instantiation (void)
716 {
717   gcc_assert (!processing_explicit_instantiation);
718   processing_explicit_instantiation = true;
719 }
720
721
722 void
723 end_explicit_instantiation (void)
724 {
725   gcc_assert (processing_explicit_instantiation);
726   processing_explicit_instantiation = false;
727 }
728
729 /* An explicit specialization or partial specialization TMPL is being
730    declared.  Check that the namespace in which the specialization is
731    occurring is permissible.  Returns false iff it is invalid to
732    specialize TMPL in the current namespace.  */
733
734 static bool
735 check_specialization_namespace (tree tmpl)
736 {
737   tree tpl_ns = decl_namespace_context (tmpl);
738
739   /* [tmpl.expl.spec]
740
741      An explicit specialization shall be declared in the namespace of
742      which the template is a member, or, for member templates, in the
743      namespace of which the enclosing class or enclosing class
744      template is a member.  An explicit specialization of a member
745      function, member class or static data member of a class template
746      shall be declared in the namespace of which the class template is
747      a member.  */
748   if (current_scope() != DECL_CONTEXT (tmpl)
749       && !at_namespace_scope_p ())
750     {
751       error ("specialization of %qD must appear at namespace scope", tmpl);
752       return false;
753     }
754   if (is_associated_namespace (current_namespace, tpl_ns))
755     /* Same or super-using namespace.  */
756     return true;
757   else
758     {
759       permerror (input_location, "specialization of %qD in different namespace", tmpl);
760       permerror (input_location, "  from definition of %q+#D", tmpl);
761       return false;
762     }
763 }
764
765 /* SPEC is an explicit instantiation.  Check that it is valid to
766    perform this explicit instantiation in the current namespace.  */
767
768 static void
769 check_explicit_instantiation_namespace (tree spec)
770 {
771   tree ns;
772
773   /* DR 275: An explicit instantiation shall appear in an enclosing
774      namespace of its template.  */
775   ns = decl_namespace_context (spec);
776   if (!is_ancestor (current_namespace, ns))
777     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
778                "(which does not enclose namespace %qD)",
779                spec, current_namespace, ns);
780 }
781
782 /* The TYPE is being declared.  If it is a template type, that means it
783    is a partial specialization.  Do appropriate error-checking.  */
784
785 tree
786 maybe_process_partial_specialization (tree type)
787 {
788   tree context;
789
790   if (type == error_mark_node)
791     return error_mark_node;
792
793   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
794     {
795       error ("name of class shadows template template parameter %qD",
796              TYPE_NAME (type));
797       return error_mark_node;
798     }
799
800   context = TYPE_CONTEXT (type);
801
802   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
803     {
804       /* This is for ordinary explicit specialization and partial
805          specialization of a template class such as:
806
807            template <> class C<int>;
808
809          or:
810
811            template <class T> class C<T*>;
812
813          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
814
815       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
816           && !COMPLETE_TYPE_P (type))
817         {
818           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
819           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
820           if (processing_template_decl)
821             {
822               if (push_template_decl (TYPE_MAIN_DECL (type))
823                   == error_mark_node)
824                 return error_mark_node;
825             }
826         }
827       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
828         error ("specialization of %qT after instantiation", type);
829     }
830   else if (CLASS_TYPE_P (type)
831            && !CLASSTYPE_USE_TEMPLATE (type)
832            && CLASSTYPE_TEMPLATE_INFO (type)
833            && context && CLASS_TYPE_P (context)
834            && CLASSTYPE_TEMPLATE_INFO (context))
835     {
836       /* This is for an explicit specialization of member class
837          template according to [temp.expl.spec/18]:
838
839            template <> template <class U> class C<int>::D;
840
841          The context `C<int>' must be an implicit instantiation.
842          Otherwise this is just a member class template declared
843          earlier like:
844
845            template <> class C<int> { template <class U> class D; };
846            template <> template <class U> class C<int>::D;
847
848          In the first case, `C<int>::D' is a specialization of `C<T>::D'
849          while in the second case, `C<int>::D' is a primary template
850          and `C<T>::D' may not exist.  */
851
852       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
853           && !COMPLETE_TYPE_P (type))
854         {
855           tree t;
856           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
857
858           if (current_namespace
859               != decl_namespace_context (tmpl))
860             {
861               permerror (input_location, "specializing %q#T in different namespace", type);
862               permerror (input_location, "  from definition of %q+#D", tmpl);
863             }
864
865           /* Check for invalid specialization after instantiation:
866
867                template <> template <> class C<int>::D<int>;
868                template <> template <class U> class C<int>::D;  */
869
870           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
871                t; t = TREE_CHAIN (t))
872             {
873               tree inst = TREE_VALUE (t);
874               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
875                 {
876                   /* We already have a full specialization of this partial
877                      instantiation.  Reassign it to the new member
878                      specialization template.  */
879                   spec_entry elt;
880                   spec_entry **slot;
881
882                   elt.tmpl = most_general_template (tmpl);
883                   elt.args = CLASSTYPE_TI_ARGS (inst);
884                   elt.spec = inst;
885
886                   htab_remove_elt (type_specializations, &elt);
887
888                   elt.tmpl = tmpl;
889                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
890
891                   slot = (spec_entry **)
892                     htab_find_slot (type_specializations, &elt, INSERT);
893                   *slot = GGC_NEW (spec_entry);
894                   **slot = elt;
895                 }
896               else if (COMPLETE_TYPE_P (inst) || TYPE_BEING_DEFINED (inst))
897                 /* But if we've had an implicit instantiation, that's a
898                    problem ([temp.expl.spec]/6).  */
899                 error ("specialization %qT after instantiation %qT",
900                        type, inst);
901             }
902
903           /* Mark TYPE as a specialization.  And as a result, we only
904              have one level of template argument for the innermost
905              class template.  */
906           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
907           CLASSTYPE_TI_ARGS (type)
908             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
909         }
910     }
911   else if (processing_specialization)
912     {
913       error ("explicit specialization of non-template %qT", type);
914       return error_mark_node;
915     }
916
917   return type;
918 }
919
920 /* Returns nonzero if we can optimize the retrieval of specializations
921    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
922    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
923
924 static inline bool
925 optimize_specialization_lookup_p (tree tmpl)
926 {
927   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
928           && DECL_CLASS_SCOPE_P (tmpl)
929           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
930              parameter.  */
931           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
932           /* The optimized lookup depends on the fact that the
933              template arguments for the member function template apply
934              purely to the containing class, which is not true if the
935              containing class is an explicit or partial
936              specialization.  */
937           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
938           && !DECL_MEMBER_TEMPLATE_P (tmpl)
939           && !DECL_CONV_FN_P (tmpl)
940           /* It is possible to have a template that is not a member
941              template and is not a member of a template class:
942
943              template <typename T>
944              struct S { friend A::f(); };
945
946              Here, the friend function is a template, but the context does
947              not have template information.  The optimized lookup relies
948              on having ARGS be the template arguments for both the class
949              and the function template.  */
950           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
951 }
952
953 /* Retrieve the specialization (in the sense of [temp.spec] - a
954    specialization is either an instantiation or an explicit
955    specialization) of TMPL for the given template ARGS.  If there is
956    no such specialization, return NULL_TREE.  The ARGS are a vector of
957    arguments, or a vector of vectors of arguments, in the case of
958    templates with more than one level of parameters.
959
960    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
961    then we search for a partial specialization matching ARGS.  This
962    parameter is ignored if TMPL is not a class template.  */
963
964 static tree
965 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
966 {
967   if (args == error_mark_node)
968     return NULL_TREE;
969
970   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
971
972   /* There should be as many levels of arguments as there are
973      levels of parameters.  */
974   gcc_assert (TMPL_ARGS_DEPTH (args)
975               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
976
977   if (optimize_specialization_lookup_p (tmpl))
978     {
979       tree class_template;
980       tree class_specialization;
981       VEC(tree,gc) *methods;
982       tree fns;
983       int idx;
984
985       /* The template arguments actually apply to the containing
986          class.  Find the class specialization with those
987          arguments.  */
988       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
989       class_specialization
990         = retrieve_specialization (class_template, args, 0);
991       if (!class_specialization)
992         return NULL_TREE;
993       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
994          for the specialization.  */
995       idx = class_method_index_for_fn (class_specialization, tmpl);
996       if (idx == -1)
997         return NULL_TREE;
998       /* Iterate through the methods with the indicated name, looking
999          for the one that has an instance of TMPL.  */
1000       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1001       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1002         {
1003           tree fn = OVL_CURRENT (fns);
1004           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1005               /* using-declarations can add base methods to the method vec,
1006                  and we don't want those here.  */
1007               && DECL_CONTEXT (fn) == class_specialization)
1008             return fn;
1009         }
1010       return NULL_TREE;
1011     }
1012   else
1013     {
1014       spec_entry *found;
1015       spec_entry elt;
1016       htab_t specializations;
1017
1018       elt.tmpl = tmpl;
1019       elt.args = args;
1020       elt.spec = NULL_TREE;
1021
1022       if (DECL_CLASS_TEMPLATE_P (tmpl))
1023         specializations = type_specializations;
1024       else
1025         specializations = decl_specializations;
1026
1027       if (hash == 0)
1028         hash = hash_specialization (&elt);
1029       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1030       if (found)
1031         return found->spec;
1032     }
1033
1034   return NULL_TREE;
1035 }
1036
1037 /* Like retrieve_specialization, but for local declarations.  */
1038
1039 static tree
1040 retrieve_local_specialization (tree tmpl)
1041 {
1042   tree spec;
1043
1044   if (local_specializations == NULL)
1045     return NULL_TREE;
1046
1047   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1048                                      htab_hash_pointer (tmpl));
1049   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1050 }
1051
1052 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1053
1054 int
1055 is_specialization_of (tree decl, tree tmpl)
1056 {
1057   tree t;
1058
1059   if (TREE_CODE (decl) == FUNCTION_DECL)
1060     {
1061       for (t = decl;
1062            t != NULL_TREE;
1063            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1064         if (t == tmpl)
1065           return 1;
1066     }
1067   else
1068     {
1069       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1070
1071       for (t = TREE_TYPE (decl);
1072            t != NULL_TREE;
1073            t = CLASSTYPE_USE_TEMPLATE (t)
1074              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1075         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1076           return 1;
1077     }
1078
1079   return 0;
1080 }
1081
1082 /* Returns nonzero iff DECL is a specialization of friend declaration
1083    FRIEND_DECL according to [temp.friend].  */
1084
1085 bool
1086 is_specialization_of_friend (tree decl, tree friend_decl)
1087 {
1088   bool need_template = true;
1089   int template_depth;
1090
1091   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1092               || TREE_CODE (decl) == TYPE_DECL);
1093
1094   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1095      of a template class, we want to check if DECL is a specialization
1096      if this.  */
1097   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1098       && DECL_TEMPLATE_INFO (friend_decl)
1099       && !DECL_USE_TEMPLATE (friend_decl))
1100     {
1101       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1102       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1103       need_template = false;
1104     }
1105   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1106            && !PRIMARY_TEMPLATE_P (friend_decl))
1107     need_template = false;
1108
1109   /* There is nothing to do if this is not a template friend.  */
1110   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1111     return false;
1112
1113   if (is_specialization_of (decl, friend_decl))
1114     return true;
1115
1116   /* [temp.friend/6]
1117      A member of a class template may be declared to be a friend of a
1118      non-template class.  In this case, the corresponding member of
1119      every specialization of the class template is a friend of the
1120      class granting friendship.
1121
1122      For example, given a template friend declaration
1123
1124        template <class T> friend void A<T>::f();
1125
1126      the member function below is considered a friend
1127
1128        template <> struct A<int> {
1129          void f();
1130        };
1131
1132      For this type of template friend, TEMPLATE_DEPTH below will be
1133      nonzero.  To determine if DECL is a friend of FRIEND, we first
1134      check if the enclosing class is a specialization of another.  */
1135
1136   template_depth = template_class_depth (DECL_CONTEXT (friend_decl));
1137   if (template_depth
1138       && DECL_CLASS_SCOPE_P (decl)
1139       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1140                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1141     {
1142       /* Next, we check the members themselves.  In order to handle
1143          a few tricky cases, such as when FRIEND_DECL's are
1144
1145            template <class T> friend void A<T>::g(T t);
1146            template <class T> template <T t> friend void A<T>::h();
1147
1148          and DECL's are
1149
1150            void A<int>::g(int);
1151            template <int> void A<int>::h();
1152
1153          we need to figure out ARGS, the template arguments from
1154          the context of DECL.  This is required for template substitution
1155          of `T' in the function parameter of `g' and template parameter
1156          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1157
1158       tree context = DECL_CONTEXT (decl);
1159       tree args = NULL_TREE;
1160       int current_depth = 0;
1161
1162       while (current_depth < template_depth)
1163         {
1164           if (CLASSTYPE_TEMPLATE_INFO (context))
1165             {
1166               if (current_depth == 0)
1167                 args = TYPE_TI_ARGS (context);
1168               else
1169                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1170               current_depth++;
1171             }
1172           context = TYPE_CONTEXT (context);
1173         }
1174
1175       if (TREE_CODE (decl) == FUNCTION_DECL)
1176         {
1177           bool is_template;
1178           tree friend_type;
1179           tree decl_type;
1180           tree friend_args_type;
1181           tree decl_args_type;
1182
1183           /* Make sure that both DECL and FRIEND_DECL are templates or
1184              non-templates.  */
1185           is_template = DECL_TEMPLATE_INFO (decl)
1186                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1187           if (need_template ^ is_template)
1188             return false;
1189           else if (is_template)
1190             {
1191               /* If both are templates, check template parameter list.  */
1192               tree friend_parms
1193                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1194                                          args, tf_none);
1195               if (!comp_template_parms
1196                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1197                       friend_parms))
1198                 return false;
1199
1200               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1201             }
1202           else
1203             decl_type = TREE_TYPE (decl);
1204
1205           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1206                                               tf_none, NULL_TREE);
1207           if (friend_type == error_mark_node)
1208             return false;
1209
1210           /* Check if return types match.  */
1211           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1212             return false;
1213
1214           /* Check if function parameter types match, ignoring the
1215              `this' parameter.  */
1216           friend_args_type = TYPE_ARG_TYPES (friend_type);
1217           decl_args_type = TYPE_ARG_TYPES (decl_type);
1218           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1219             friend_args_type = TREE_CHAIN (friend_args_type);
1220           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1221             decl_args_type = TREE_CHAIN (decl_args_type);
1222
1223           return compparms (decl_args_type, friend_args_type);
1224         }
1225       else
1226         {
1227           /* DECL is a TYPE_DECL */
1228           bool is_template;
1229           tree decl_type = TREE_TYPE (decl);
1230
1231           /* Make sure that both DECL and FRIEND_DECL are templates or
1232              non-templates.  */
1233           is_template
1234             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1235               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1236
1237           if (need_template ^ is_template)
1238             return false;
1239           else if (is_template)
1240             {
1241               tree friend_parms;
1242               /* If both are templates, check the name of the two
1243                  TEMPLATE_DECL's first because is_friend didn't.  */
1244               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1245                   != DECL_NAME (friend_decl))
1246                 return false;
1247
1248               /* Now check template parameter list.  */
1249               friend_parms
1250                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1251                                          args, tf_none);
1252               return comp_template_parms
1253                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1254                  friend_parms);
1255             }
1256           else
1257             return (DECL_NAME (decl)
1258                     == DECL_NAME (friend_decl));
1259         }
1260     }
1261   return false;
1262 }
1263
1264 /* Register the specialization SPEC as a specialization of TMPL with
1265    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1266    is actually just a friend declaration.  Returns SPEC, or an
1267    equivalent prior declaration, if available.  */
1268
1269 static tree
1270 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1271                          hashval_t hash)
1272 {
1273   tree fn;
1274   spec_entry **slot = NULL;
1275   spec_entry elt;
1276
1277   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1278
1279   if (TREE_CODE (spec) == FUNCTION_DECL
1280       && uses_template_parms (DECL_TI_ARGS (spec)))
1281     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1282        register it; we want the corresponding TEMPLATE_DECL instead.
1283        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1284        the more obvious `uses_template_parms (spec)' to avoid problems
1285        with default function arguments.  In particular, given
1286        something like this:
1287
1288           template <class T> void f(T t1, T t = T())
1289
1290        the default argument expression is not substituted for in an
1291        instantiation unless and until it is actually needed.  */
1292     return spec;
1293
1294   if (optimize_specialization_lookup_p (tmpl))
1295     /* We don't put these specializations in the hash table, but we might
1296        want to give an error about a mismatch.  */
1297     fn = retrieve_specialization (tmpl, args, 0);
1298   else
1299     {
1300       elt.tmpl = tmpl;
1301       elt.args = args;
1302       elt.spec = spec;
1303
1304       if (hash == 0)
1305         hash = hash_specialization (&elt);
1306
1307       slot = (spec_entry **)
1308         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1309       if (*slot)
1310         fn = (*slot)->spec;
1311       else
1312         fn = NULL_TREE;
1313     }
1314
1315   /* We can sometimes try to re-register a specialization that we've
1316      already got.  In particular, regenerate_decl_from_template calls
1317      duplicate_decls which will update the specialization list.  But,
1318      we'll still get called again here anyhow.  It's more convenient
1319      to simply allow this than to try to prevent it.  */
1320   if (fn == spec)
1321     return spec;
1322   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1323     {
1324       if (DECL_TEMPLATE_INSTANTIATION (fn))
1325         {
1326           if (DECL_ODR_USED (fn)
1327               || DECL_EXPLICIT_INSTANTIATION (fn))
1328             {
1329               error ("specialization of %qD after instantiation",
1330                      fn);
1331               return error_mark_node;
1332             }
1333           else
1334             {
1335               tree clone;
1336               /* This situation should occur only if the first
1337                  specialization is an implicit instantiation, the
1338                  second is an explicit specialization, and the
1339                  implicit instantiation has not yet been used.  That
1340                  situation can occur if we have implicitly
1341                  instantiated a member function and then specialized
1342                  it later.
1343
1344                  We can also wind up here if a friend declaration that
1345                  looked like an instantiation turns out to be a
1346                  specialization:
1347
1348                    template <class T> void foo(T);
1349                    class S { friend void foo<>(int) };
1350                    template <> void foo(int);
1351
1352                  We transform the existing DECL in place so that any
1353                  pointers to it become pointers to the updated
1354                  declaration.
1355
1356                  If there was a definition for the template, but not
1357                  for the specialization, we want this to look as if
1358                  there were no definition, and vice versa.  */
1359               DECL_INITIAL (fn) = NULL_TREE;
1360               duplicate_decls (spec, fn, is_friend);
1361               /* The call to duplicate_decls will have applied
1362                  [temp.expl.spec]:
1363
1364                    An explicit specialization of a function template
1365                    is inline only if it is explicitly declared to be,
1366                    and independently of whether its function template
1367                    is.
1368
1369                 to the primary function; now copy the inline bits to
1370                 the various clones.  */
1371               FOR_EACH_CLONE (clone, fn)
1372                 {
1373                   DECL_DECLARED_INLINE_P (clone)
1374                     = DECL_DECLARED_INLINE_P (fn);
1375                   DECL_SOURCE_LOCATION (clone)
1376                     = DECL_SOURCE_LOCATION (fn);
1377                 }
1378               check_specialization_namespace (fn);
1379
1380               return fn;
1381             }
1382         }
1383       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1384         {
1385           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1386             /* Dup decl failed, but this is a new definition. Set the
1387                line number so any errors match this new
1388                definition.  */
1389             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1390
1391           return fn;
1392         }
1393     }
1394   else if (fn)
1395     return duplicate_decls (spec, fn, is_friend);
1396
1397   /* A specialization must be declared in the same namespace as the
1398      template it is specializing.  */
1399   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1400       && !check_specialization_namespace (tmpl))
1401     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1402
1403   if (!optimize_specialization_lookup_p (tmpl))
1404     {
1405       gcc_assert (tmpl && args && spec);
1406       *slot = GGC_NEW (spec_entry);
1407       **slot = elt;
1408       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1409           && PRIMARY_TEMPLATE_P (tmpl)
1410           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1411         /* TMPL is a forward declaration of a template function; keep a list
1412            of all specializations in case we need to reassign them to a friend
1413            template later in tsubst_friend_function.  */
1414         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1415           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1416     }
1417
1418   return spec;
1419 }
1420
1421 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1422    TMPL and ARGS members, ignores SPEC.  */
1423
1424 static int
1425 eq_specializations (const void *p1, const void *p2)
1426 {
1427   const spec_entry *e1 = (const spec_entry *)p1;
1428   const spec_entry *e2 = (const spec_entry *)p2;
1429
1430   return (e1->tmpl == e2->tmpl
1431           && comp_template_args (e1->args, e2->args));
1432 }
1433
1434 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1435
1436 static hashval_t
1437 hash_tmpl_and_args (tree tmpl, tree args)
1438 {
1439   hashval_t val = DECL_UID (tmpl);
1440   return iterative_hash_template_arg (args, val);
1441 }
1442
1443 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1444    ignoring SPEC.  */
1445
1446 static hashval_t
1447 hash_specialization (const void *p)
1448 {
1449   const spec_entry *e = (const spec_entry *)p;
1450   return hash_tmpl_and_args (e->tmpl, e->args);
1451 }
1452
1453 /* Recursively calculate a hash value for a template argument ARG, for use
1454    in the hash tables of template specializations.  */
1455
1456 static hashval_t
1457 iterative_hash_template_arg (tree arg, hashval_t val)
1458 {
1459   unsigned HOST_WIDE_INT i;
1460   enum tree_code code;
1461   char tclass;
1462
1463   if (arg == NULL_TREE)
1464     return iterative_hash_object (arg, val);
1465
1466   if (!TYPE_P (arg))
1467     STRIP_NOPS (arg);
1468
1469   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1470     /* We can get one of these when re-hashing a previous entry in the middle
1471        of substituting into a pack expansion.  Just look through it.  */
1472     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1473
1474   code = TREE_CODE (arg);
1475   tclass = TREE_CODE_CLASS (code);
1476
1477   val = iterative_hash_object (code, val);
1478
1479   switch (code)
1480     {
1481     case ERROR_MARK:
1482       return val;
1483
1484     case IDENTIFIER_NODE:
1485       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1486
1487     case TREE_VEC:
1488       {
1489         int i, len = TREE_VEC_LENGTH (arg);
1490         for (i = 0; i < len; ++i)
1491           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1492         return val;
1493       }
1494
1495     case TYPE_PACK_EXPANSION:
1496     case EXPR_PACK_EXPANSION:
1497       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1498
1499     case TYPE_ARGUMENT_PACK:
1500     case NONTYPE_ARGUMENT_PACK:
1501       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1502
1503     case TREE_LIST:
1504       for (; arg; arg = TREE_CHAIN (arg))
1505         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1506       return val;
1507
1508     case OVERLOAD:
1509       for (; arg; arg = OVL_CHAIN (arg))
1510         val = iterative_hash_template_arg (OVL_FUNCTION (arg), val);
1511       return val;
1512
1513     case CONSTRUCTOR:
1514       {
1515         tree field, value;
1516         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1517           {
1518             val = iterative_hash_template_arg (field, val);
1519             val = iterative_hash_template_arg (value, val);
1520           }
1521         return val;
1522       }
1523
1524     case PARM_DECL:
1525       if (!DECL_ARTIFICIAL (arg))
1526         val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1527       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1528
1529     case TARGET_EXPR:
1530       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1531
1532     case PTRMEM_CST:
1533       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1534       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1535
1536     case TEMPLATE_PARM_INDEX:
1537       val = iterative_hash_template_arg
1538         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1539       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1540       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1541
1542     case TRAIT_EXPR:
1543       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1544       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1545       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1546
1547     case BASELINK:
1548       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1549                                          val);
1550       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1551                                           val);
1552
1553     case MODOP_EXPR:
1554       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1555       code = TREE_CODE (TREE_OPERAND (arg, 1));
1556       val = iterative_hash_object (code, val);
1557       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1558
1559     case ARRAY_TYPE:
1560       /* layout_type sets structural equality for arrays of
1561          incomplete type, so we can't rely on the canonical type
1562          for hashing.  */
1563       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1564       return iterative_hash_template_arg (TYPE_DOMAIN (arg), val);
1565
1566     default:
1567       switch (tclass)
1568         {
1569         case tcc_type:
1570           if (TYPE_CANONICAL (arg))
1571             return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1572                                           val);
1573           else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1574             return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1575           /* Otherwise just compare the types during lookup.  */
1576           return val;
1577
1578         case tcc_declaration:
1579         case tcc_constant:
1580           return iterative_hash_expr (arg, val);
1581
1582         default:
1583           gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1584           {
1585             unsigned n = TREE_OPERAND_LENGTH (arg);
1586             for (i = 0; i < n; ++i)
1587               val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1588             return val;
1589           }
1590         }
1591     }
1592   gcc_unreachable ();
1593   return 0;
1594 }
1595
1596 /* Unregister the specialization SPEC as a specialization of TMPL.
1597    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1598    if the SPEC was listed as a specialization of TMPL.
1599
1600    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1601
1602 bool
1603 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1604 {
1605   spec_entry **slot;
1606   spec_entry elt;
1607
1608   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1609   elt.args = TI_ARGS (tinfo);
1610   elt.spec = NULL_TREE;
1611
1612   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1613   if (*slot)
1614     {
1615       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1616       gcc_assert (new_spec != NULL_TREE);
1617       (*slot)->spec = new_spec;
1618       return 1;
1619     }
1620
1621   return 0;
1622 }
1623
1624 /* Compare an entry in the local specializations hash table P1 (which
1625    is really a pointer to a TREE_LIST) with P2 (which is really a
1626    DECL).  */
1627
1628 static int
1629 eq_local_specializations (const void *p1, const void *p2)
1630 {
1631   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1632 }
1633
1634 /* Hash P1, an entry in the local specializations table.  */
1635
1636 static hashval_t
1637 hash_local_specialization (const void* p1)
1638 {
1639   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1640 }
1641
1642 /* Like register_specialization, but for local declarations.  We are
1643    registering SPEC, an instantiation of TMPL.  */
1644
1645 static void
1646 register_local_specialization (tree spec, tree tmpl)
1647 {
1648   void **slot;
1649
1650   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1651                                    htab_hash_pointer (tmpl), INSERT);
1652   *slot = build_tree_list (spec, tmpl);
1653 }
1654
1655 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1656    specialized class.  */
1657
1658 bool
1659 explicit_class_specialization_p (tree type)
1660 {
1661   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1662     return false;
1663   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1664 }
1665
1666 /* Print the list of functions at FNS, going through all the overloads
1667    for each element of the list.  Alternatively, FNS can not be a
1668    TREE_LIST, in which case it will be printed together with all the
1669    overloads.
1670
1671    MORE and *STR should respectively be FALSE and NULL when the function
1672    is called from the outside.  They are used internally on recursive
1673    calls.  print_candidates manages the two parameters and leaves NULL
1674    in *STR when it ends.  */
1675
1676 static void
1677 print_candidates_1 (tree fns, bool more, const char **str)
1678 {
1679   tree fn, fn2;
1680   char *spaces = NULL;
1681
1682   for (fn = fns; fn; fn = OVL_NEXT (fn))
1683     if (TREE_CODE (fn) == TREE_LIST)
1684       {
1685         gcc_assert (!OVL_NEXT (fn) && !is_overloaded_fn (fn));
1686         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1687           print_candidates_1 (TREE_VALUE (fn2),
1688                               TREE_CHAIN (fn2) || more, str);
1689       }
1690     else
1691       {
1692         if (!*str)
1693           {
1694             /* Pick the prefix string.  */
1695             if (!more && !OVL_NEXT (fns))
1696               {
1697                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1698                 continue;
1699               }
1700
1701             *str = _("candidates are:");
1702             spaces = get_spaces (*str);
1703           }
1704         error ("%s %+#D", *str, OVL_CURRENT (fn));
1705         *str = spaces ? spaces : *str;
1706       }
1707
1708   if (!more)
1709     {
1710       free (spaces);
1711       *str = NULL;
1712     }
1713 }
1714
1715 /* Print the list of candidate FNS in an error message.  */
1716
1717 void
1718 print_candidates (tree fns)
1719 {
1720   const char *str = NULL;
1721   print_candidates_1 (fns, false, &str);
1722   gcc_assert (str == NULL);
1723 }
1724
1725 /* Returns the template (one of the functions given by TEMPLATE_ID)
1726    which can be specialized to match the indicated DECL with the
1727    explicit template args given in TEMPLATE_ID.  The DECL may be
1728    NULL_TREE if none is available.  In that case, the functions in
1729    TEMPLATE_ID are non-members.
1730
1731    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1732    specialization of a member template.
1733
1734    The TEMPLATE_COUNT is the number of references to qualifying
1735    template classes that appeared in the name of the function. See
1736    check_explicit_specialization for a more accurate description.
1737
1738    TSK indicates what kind of template declaration (if any) is being
1739    declared.  TSK_TEMPLATE indicates that the declaration given by
1740    DECL, though a FUNCTION_DECL, has template parameters, and is
1741    therefore a template function.
1742
1743    The template args (those explicitly specified and those deduced)
1744    are output in a newly created vector *TARGS_OUT.
1745
1746    If it is impossible to determine the result, an error message is
1747    issued.  The error_mark_node is returned to indicate failure.  */
1748
1749 static tree
1750 determine_specialization (tree template_id,
1751                           tree decl,
1752                           tree* targs_out,
1753                           int need_member_template,
1754                           int template_count,
1755                           tmpl_spec_kind tsk)
1756 {
1757   tree fns;
1758   tree targs;
1759   tree explicit_targs;
1760   tree candidates = NULL_TREE;
1761   /* A TREE_LIST of templates of which DECL may be a specialization.
1762      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1763      corresponding TREE_PURPOSE is the set of template arguments that,
1764      when used to instantiate the template, would produce a function
1765      with the signature of DECL.  */
1766   tree templates = NULL_TREE;
1767   int header_count;
1768   struct cp_binding_level *b;
1769
1770   *targs_out = NULL_TREE;
1771
1772   if (template_id == error_mark_node || decl == error_mark_node)
1773     return error_mark_node;
1774
1775   fns = TREE_OPERAND (template_id, 0);
1776   explicit_targs = TREE_OPERAND (template_id, 1);
1777
1778   if (fns == error_mark_node)
1779     return error_mark_node;
1780
1781   /* Check for baselinks.  */
1782   if (BASELINK_P (fns))
1783     fns = BASELINK_FUNCTIONS (fns);
1784
1785   if (!is_overloaded_fn (fns))
1786     {
1787       error ("%qD is not a function template", fns);
1788       return error_mark_node;
1789     }
1790
1791   /* Count the number of template headers specified for this
1792      specialization.  */
1793   header_count = 0;
1794   for (b = current_binding_level;
1795        b->kind == sk_template_parms;
1796        b = b->level_chain)
1797     ++header_count;
1798
1799   for (; fns; fns = OVL_NEXT (fns))
1800     {
1801       tree fn = OVL_CURRENT (fns);
1802
1803       if (TREE_CODE (fn) == TEMPLATE_DECL)
1804         {
1805           tree decl_arg_types;
1806           tree fn_arg_types;
1807
1808           /* In case of explicit specialization, we need to check if
1809              the number of template headers appearing in the specialization
1810              is correct. This is usually done in check_explicit_specialization,
1811              but the check done there cannot be exhaustive when specializing
1812              member functions. Consider the following code:
1813
1814              template <> void A<int>::f(int);
1815              template <> template <> void A<int>::f(int);
1816
1817              Assuming that A<int> is not itself an explicit specialization
1818              already, the first line specializes "f" which is a non-template
1819              member function, whilst the second line specializes "f" which
1820              is a template member function. So both lines are syntactically
1821              correct, and check_explicit_specialization does not reject
1822              them.
1823
1824              Here, we can do better, as we are matching the specialization
1825              against the declarations. We count the number of template
1826              headers, and we check if they match TEMPLATE_COUNT + 1
1827              (TEMPLATE_COUNT is the number of qualifying template classes,
1828              plus there must be another header for the member template
1829              itself).
1830
1831              Notice that if header_count is zero, this is not a
1832              specialization but rather a template instantiation, so there
1833              is no check we can perform here.  */
1834           if (header_count && header_count != template_count + 1)
1835             continue;
1836
1837           /* Check that the number of template arguments at the
1838              innermost level for DECL is the same as for FN.  */
1839           if (current_binding_level->kind == sk_template_parms
1840               && !current_binding_level->explicit_spec_p
1841               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1842                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1843                                       (current_template_parms))))
1844             continue;
1845
1846           /* DECL might be a specialization of FN.  */
1847           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1848           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1849
1850           /* For a non-static member function, we need to make sure
1851              that the const qualification is the same.  Since
1852              get_bindings does not try to merge the "this" parameter,
1853              we must do the comparison explicitly.  */
1854           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1855               && !same_type_p (TREE_VALUE (fn_arg_types),
1856                                TREE_VALUE (decl_arg_types)))
1857             continue;
1858
1859           /* Skip the "this" parameter and, for constructors of
1860              classes with virtual bases, the VTT parameter.  A
1861              full specialization of a constructor will have a VTT
1862              parameter, but a template never will.  */ 
1863           decl_arg_types 
1864             = skip_artificial_parms_for (decl, decl_arg_types);
1865           fn_arg_types 
1866             = skip_artificial_parms_for (fn, fn_arg_types);
1867
1868           /* Check that the number of function parameters matches.
1869              For example,
1870                template <class T> void f(int i = 0);
1871                template <> void f<int>();
1872              The specialization f<int> is invalid but is not caught
1873              by get_bindings below.  */
1874           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1875             continue;
1876
1877           /* Function templates cannot be specializations; there are
1878              no partial specializations of functions.  Therefore, if
1879              the type of DECL does not match FN, there is no
1880              match.  */
1881           if (tsk == tsk_template)
1882             {
1883               if (compparms (fn_arg_types, decl_arg_types))
1884                 candidates = tree_cons (NULL_TREE, fn, candidates);
1885               continue;
1886             }
1887
1888           /* See whether this function might be a specialization of this
1889              template.  */
1890           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1891
1892           if (!targs)
1893             /* We cannot deduce template arguments that when used to
1894                specialize TMPL will produce DECL.  */
1895             continue;
1896
1897           /* Save this template, and the arguments deduced.  */
1898           templates = tree_cons (targs, fn, templates);
1899         }
1900       else if (need_member_template)
1901         /* FN is an ordinary member function, and we need a
1902            specialization of a member template.  */
1903         ;
1904       else if (TREE_CODE (fn) != FUNCTION_DECL)
1905         /* We can get IDENTIFIER_NODEs here in certain erroneous
1906            cases.  */
1907         ;
1908       else if (!DECL_FUNCTION_MEMBER_P (fn))
1909         /* This is just an ordinary non-member function.  Nothing can
1910            be a specialization of that.  */
1911         ;
1912       else if (DECL_ARTIFICIAL (fn))
1913         /* Cannot specialize functions that are created implicitly.  */
1914         ;
1915       else
1916         {
1917           tree decl_arg_types;
1918
1919           /* This is an ordinary member function.  However, since
1920              we're here, we can assume it's enclosing class is a
1921              template class.  For example,
1922
1923                template <typename T> struct S { void f(); };
1924                template <> void S<int>::f() {}
1925
1926              Here, S<int>::f is a non-template, but S<int> is a
1927              template class.  If FN has the same type as DECL, we
1928              might be in business.  */
1929
1930           if (!DECL_TEMPLATE_INFO (fn))
1931             /* Its enclosing class is an explicit specialization
1932                of a template class.  This is not a candidate.  */
1933             continue;
1934
1935           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1936                             TREE_TYPE (TREE_TYPE (fn))))
1937             /* The return types differ.  */
1938             continue;
1939
1940           /* Adjust the type of DECL in case FN is a static member.  */
1941           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1942           if (DECL_STATIC_FUNCTION_P (fn)
1943               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1944             decl_arg_types = TREE_CHAIN (decl_arg_types);
1945
1946           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1947                          decl_arg_types))
1948             /* They match!  */
1949             candidates = tree_cons (NULL_TREE, fn, candidates);
1950         }
1951     }
1952
1953   if (templates && TREE_CHAIN (templates))
1954     {
1955       /* We have:
1956
1957            [temp.expl.spec]
1958
1959            It is possible for a specialization with a given function
1960            signature to be instantiated from more than one function
1961            template.  In such cases, explicit specification of the
1962            template arguments must be used to uniquely identify the
1963            function template specialization being specialized.
1964
1965          Note that here, there's no suggestion that we're supposed to
1966          determine which of the candidate templates is most
1967          specialized.  However, we, also have:
1968
1969            [temp.func.order]
1970
1971            Partial ordering of overloaded function template
1972            declarations is used in the following contexts to select
1973            the function template to which a function template
1974            specialization refers:
1975
1976            -- when an explicit specialization refers to a function
1977               template.
1978
1979          So, we do use the partial ordering rules, at least for now.
1980          This extension can only serve to make invalid programs valid,
1981          so it's safe.  And, there is strong anecdotal evidence that
1982          the committee intended the partial ordering rules to apply;
1983          the EDG front end has that behavior, and John Spicer claims
1984          that the committee simply forgot to delete the wording in
1985          [temp.expl.spec].  */
1986       tree tmpl = most_specialized_instantiation (templates);
1987       if (tmpl != error_mark_node)
1988         {
1989           templates = tmpl;
1990           TREE_CHAIN (templates) = NULL_TREE;
1991         }
1992     }
1993
1994   if (templates == NULL_TREE && candidates == NULL_TREE)
1995     {
1996       error ("template-id %qD for %q+D does not match any template "
1997              "declaration", template_id, decl);
1998       if (header_count && header_count != template_count + 1)
1999         inform (input_location, "saw %d %<template<>%>, need %d for "
2000                 "specializing a member function template",
2001                 header_count, template_count + 1);
2002       return error_mark_node;
2003     }
2004   else if ((templates && TREE_CHAIN (templates))
2005            || (candidates && TREE_CHAIN (candidates))
2006            || (templates && candidates))
2007     {
2008       error ("ambiguous template specialization %qD for %q+D",
2009              template_id, decl);
2010       candidates = chainon (candidates, templates);
2011       print_candidates (candidates);
2012       return error_mark_node;
2013     }
2014
2015   /* We have one, and exactly one, match.  */
2016   if (candidates)
2017     {
2018       tree fn = TREE_VALUE (candidates);
2019       *targs_out = copy_node (DECL_TI_ARGS (fn));
2020       /* DECL is a re-declaration or partial instantiation of a template
2021          function.  */
2022       if (TREE_CODE (fn) == TEMPLATE_DECL)
2023         return fn;
2024       /* It was a specialization of an ordinary member function in a
2025          template class.  */
2026       return DECL_TI_TEMPLATE (fn);
2027     }
2028
2029   /* It was a specialization of a template.  */
2030   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2031   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2032     {
2033       *targs_out = copy_node (targs);
2034       SET_TMPL_ARGS_LEVEL (*targs_out,
2035                            TMPL_ARGS_DEPTH (*targs_out),
2036                            TREE_PURPOSE (templates));
2037     }
2038   else
2039     *targs_out = TREE_PURPOSE (templates);
2040   return TREE_VALUE (templates);
2041 }
2042
2043 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2044    but with the default argument values filled in from those in the
2045    TMPL_TYPES.  */
2046
2047 static tree
2048 copy_default_args_to_explicit_spec_1 (tree spec_types,
2049                                       tree tmpl_types)
2050 {
2051   tree new_spec_types;
2052
2053   if (!spec_types)
2054     return NULL_TREE;
2055
2056   if (spec_types == void_list_node)
2057     return void_list_node;
2058
2059   /* Substitute into the rest of the list.  */
2060   new_spec_types =
2061     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2062                                           TREE_CHAIN (tmpl_types));
2063
2064   /* Add the default argument for this parameter.  */
2065   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2066                          TREE_VALUE (spec_types),
2067                          new_spec_types);
2068 }
2069
2070 /* DECL is an explicit specialization.  Replicate default arguments
2071    from the template it specializes.  (That way, code like:
2072
2073      template <class T> void f(T = 3);
2074      template <> void f(double);
2075      void g () { f (); }
2076
2077    works, as required.)  An alternative approach would be to look up
2078    the correct default arguments at the call-site, but this approach
2079    is consistent with how implicit instantiations are handled.  */
2080
2081 static void
2082 copy_default_args_to_explicit_spec (tree decl)
2083 {
2084   tree tmpl;
2085   tree spec_types;
2086   tree tmpl_types;
2087   tree new_spec_types;
2088   tree old_type;
2089   tree new_type;
2090   tree t;
2091   tree object_type = NULL_TREE;
2092   tree in_charge = NULL_TREE;
2093   tree vtt = NULL_TREE;
2094
2095   /* See if there's anything we need to do.  */
2096   tmpl = DECL_TI_TEMPLATE (decl);
2097   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2098   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2099     if (TREE_PURPOSE (t))
2100       break;
2101   if (!t)
2102     return;
2103
2104   old_type = TREE_TYPE (decl);
2105   spec_types = TYPE_ARG_TYPES (old_type);
2106
2107   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2108     {
2109       /* Remove the this pointer, but remember the object's type for
2110          CV quals.  */
2111       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2112       spec_types = TREE_CHAIN (spec_types);
2113       tmpl_types = TREE_CHAIN (tmpl_types);
2114
2115       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2116         {
2117           /* DECL may contain more parameters than TMPL due to the extra
2118              in-charge parameter in constructors and destructors.  */
2119           in_charge = spec_types;
2120           spec_types = TREE_CHAIN (spec_types);
2121         }
2122       if (DECL_HAS_VTT_PARM_P (decl))
2123         {
2124           vtt = spec_types;
2125           spec_types = TREE_CHAIN (spec_types);
2126         }
2127     }
2128
2129   /* Compute the merged default arguments.  */
2130   new_spec_types =
2131     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2132
2133   /* Compute the new FUNCTION_TYPE.  */
2134   if (object_type)
2135     {
2136       if (vtt)
2137         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2138                                          TREE_VALUE (vtt),
2139                                          new_spec_types);
2140
2141       if (in_charge)
2142         /* Put the in-charge parameter back.  */
2143         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2144                                          TREE_VALUE (in_charge),
2145                                          new_spec_types);
2146
2147       new_type = build_method_type_directly (object_type,
2148                                              TREE_TYPE (old_type),
2149                                              new_spec_types);
2150     }
2151   else
2152     new_type = build_function_type (TREE_TYPE (old_type),
2153                                     new_spec_types);
2154   new_type = cp_build_type_attribute_variant (new_type,
2155                                               TYPE_ATTRIBUTES (old_type));
2156   new_type = build_exception_variant (new_type,
2157                                       TYPE_RAISES_EXCEPTIONS (old_type));
2158   TREE_TYPE (decl) = new_type;
2159 }
2160
2161 /* Check to see if the function just declared, as indicated in
2162    DECLARATOR, and in DECL, is a specialization of a function
2163    template.  We may also discover that the declaration is an explicit
2164    instantiation at this point.
2165
2166    Returns DECL, or an equivalent declaration that should be used
2167    instead if all goes well.  Issues an error message if something is
2168    amiss.  Returns error_mark_node if the error is not easily
2169    recoverable.
2170
2171    FLAGS is a bitmask consisting of the following flags:
2172
2173    2: The function has a definition.
2174    4: The function is a friend.
2175
2176    The TEMPLATE_COUNT is the number of references to qualifying
2177    template classes that appeared in the name of the function.  For
2178    example, in
2179
2180      template <class T> struct S { void f(); };
2181      void S<int>::f();
2182
2183    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2184    classes are not counted in the TEMPLATE_COUNT, so that in
2185
2186      template <class T> struct S {};
2187      template <> struct S<int> { void f(); }
2188      template <> void S<int>::f();
2189
2190    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2191    invalid; there should be no template <>.)
2192
2193    If the function is a specialization, it is marked as such via
2194    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2195    is set up correctly, and it is added to the list of specializations
2196    for that template.  */
2197
2198 tree
2199 check_explicit_specialization (tree declarator,
2200                                tree decl,
2201                                int template_count,
2202                                int flags)
2203 {
2204   int have_def = flags & 2;
2205   int is_friend = flags & 4;
2206   int specialization = 0;
2207   int explicit_instantiation = 0;
2208   int member_specialization = 0;
2209   tree ctype = DECL_CLASS_CONTEXT (decl);
2210   tree dname = DECL_NAME (decl);
2211   tmpl_spec_kind tsk;
2212
2213   if (is_friend)
2214     {
2215       if (!processing_specialization)
2216         tsk = tsk_none;
2217       else
2218         tsk = tsk_excessive_parms;
2219     }
2220   else
2221     tsk = current_tmpl_spec_kind (template_count);
2222
2223   switch (tsk)
2224     {
2225     case tsk_none:
2226       if (processing_specialization)
2227         {
2228           specialization = 1;
2229           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2230         }
2231       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2232         {
2233           if (is_friend)
2234             /* This could be something like:
2235
2236                template <class T> void f(T);
2237                class S { friend void f<>(int); }  */
2238             specialization = 1;
2239           else
2240             {
2241               /* This case handles bogus declarations like template <>
2242                  template <class T> void f<int>(); */
2243
2244               error ("template-id %qD in declaration of primary template",
2245                      declarator);
2246               return decl;
2247             }
2248         }
2249       break;
2250
2251     case tsk_invalid_member_spec:
2252       /* The error has already been reported in
2253          check_specialization_scope.  */
2254       return error_mark_node;
2255
2256     case tsk_invalid_expl_inst:
2257       error ("template parameter list used in explicit instantiation");
2258
2259       /* Fall through.  */
2260
2261     case tsk_expl_inst:
2262       if (have_def)
2263         error ("definition provided for explicit instantiation");
2264
2265       explicit_instantiation = 1;
2266       break;
2267
2268     case tsk_excessive_parms:
2269     case tsk_insufficient_parms:
2270       if (tsk == tsk_excessive_parms)
2271         error ("too many template parameter lists in declaration of %qD",
2272                decl);
2273       else if (template_header_count)
2274         error("too few template parameter lists in declaration of %qD", decl);
2275       else
2276         error("explicit specialization of %qD must be introduced by "
2277               "%<template <>%>", decl);
2278
2279       /* Fall through.  */
2280     case tsk_expl_spec:
2281       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2282       if (ctype)
2283         member_specialization = 1;
2284       else
2285         specialization = 1;
2286       break;
2287
2288     case tsk_template:
2289       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2290         {
2291           /* This case handles bogus declarations like template <>
2292              template <class T> void f<int>(); */
2293
2294           if (uses_template_parms (declarator))
2295             error ("function template partial specialization %qD "
2296                    "is not allowed", declarator);
2297           else
2298             error ("template-id %qD in declaration of primary template",
2299                    declarator);
2300           return decl;
2301         }
2302
2303       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2304         /* This is a specialization of a member template, without
2305            specialization the containing class.  Something like:
2306
2307              template <class T> struct S {
2308                template <class U> void f (U);
2309              };
2310              template <> template <class U> void S<int>::f(U) {}
2311
2312            That's a specialization -- but of the entire template.  */
2313         specialization = 1;
2314       break;
2315
2316     default:
2317       gcc_unreachable ();
2318     }
2319
2320   if (specialization || member_specialization)
2321     {
2322       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2323       for (; t; t = TREE_CHAIN (t))
2324         if (TREE_PURPOSE (t))
2325           {
2326             permerror (input_location, 
2327                        "default argument specified in explicit specialization");
2328             break;
2329           }
2330     }
2331
2332   if (specialization || member_specialization || explicit_instantiation)
2333     {
2334       tree tmpl = NULL_TREE;
2335       tree targs = NULL_TREE;
2336
2337       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2338       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2339         {
2340           tree fns;
2341
2342           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2343           if (ctype)
2344             fns = dname;
2345           else
2346             {
2347               /* If there is no class context, the explicit instantiation
2348                  must be at namespace scope.  */
2349               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2350
2351               /* Find the namespace binding, using the declaration
2352                  context.  */
2353               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2354                                            false, true);
2355               if (fns == error_mark_node || !is_overloaded_fn (fns))
2356                 {
2357                   error ("%qD is not a template function", dname);
2358                   fns = error_mark_node;
2359                 }
2360               else
2361                 {
2362                   tree fn = OVL_CURRENT (fns);
2363                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2364                                                 CP_DECL_CONTEXT (fn)))
2365                     error ("%qD is not declared in %qD",
2366                            decl, current_namespace);
2367                 }
2368             }
2369
2370           declarator = lookup_template_function (fns, NULL_TREE);
2371         }
2372
2373       if (declarator == error_mark_node)
2374         return error_mark_node;
2375
2376       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2377         {
2378           if (!explicit_instantiation)
2379             /* A specialization in class scope.  This is invalid,
2380                but the error will already have been flagged by
2381                check_specialization_scope.  */
2382             return error_mark_node;
2383           else
2384             {
2385               /* It's not valid to write an explicit instantiation in
2386                  class scope, e.g.:
2387
2388                    class C { template void f(); }
2389
2390                    This case is caught by the parser.  However, on
2391                    something like:
2392
2393                    template class C { void f(); };
2394
2395                    (which is invalid) we can get here.  The error will be
2396                    issued later.  */
2397               ;
2398             }
2399
2400           return decl;
2401         }
2402       else if (ctype != NULL_TREE
2403                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2404                    IDENTIFIER_NODE))
2405         {
2406           /* Find the list of functions in ctype that have the same
2407              name as the declared function.  */
2408           tree name = TREE_OPERAND (declarator, 0);
2409           tree fns = NULL_TREE;
2410           int idx;
2411
2412           if (constructor_name_p (name, ctype))
2413             {
2414               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2415
2416               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2417                   : !CLASSTYPE_DESTRUCTORS (ctype))
2418                 {
2419                   /* From [temp.expl.spec]:
2420
2421                      If such an explicit specialization for the member
2422                      of a class template names an implicitly-declared
2423                      special member function (clause _special_), the
2424                      program is ill-formed.
2425
2426                      Similar language is found in [temp.explicit].  */
2427                   error ("specialization of implicitly-declared special member function");
2428                   return error_mark_node;
2429                 }
2430
2431               name = is_constructor ? ctor_identifier : dtor_identifier;
2432             }
2433
2434           if (!DECL_CONV_FN_P (decl))
2435             {
2436               idx = lookup_fnfields_1 (ctype, name);
2437               if (idx >= 0)
2438                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2439             }
2440           else
2441             {
2442               VEC(tree,gc) *methods;
2443               tree ovl;
2444
2445               /* For a type-conversion operator, we cannot do a
2446                  name-based lookup.  We might be looking for `operator
2447                  int' which will be a specialization of `operator T'.
2448                  So, we find *all* the conversion operators, and then
2449                  select from them.  */
2450               fns = NULL_TREE;
2451
2452               methods = CLASSTYPE_METHOD_VEC (ctype);
2453               if (methods)
2454                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2455                      VEC_iterate (tree, methods, idx, ovl);
2456                      ++idx)
2457                   {
2458                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2459                       /* There are no more conversion functions.  */
2460                       break;
2461
2462                     /* Glue all these conversion functions together
2463                        with those we already have.  */
2464                     for (; ovl; ovl = OVL_NEXT (ovl))
2465                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2466                   }
2467             }
2468
2469           if (fns == NULL_TREE)
2470             {
2471               error ("no member function %qD declared in %qT", name, ctype);
2472               return error_mark_node;
2473             }
2474           else
2475             TREE_OPERAND (declarator, 0) = fns;
2476         }
2477
2478       /* Figure out what exactly is being specialized at this point.
2479          Note that for an explicit instantiation, even one for a
2480          member function, we cannot tell apriori whether the
2481          instantiation is for a member template, or just a member
2482          function of a template class.  Even if a member template is
2483          being instantiated, the member template arguments may be
2484          elided if they can be deduced from the rest of the
2485          declaration.  */
2486       tmpl = determine_specialization (declarator, decl,
2487                                        &targs,
2488                                        member_specialization,
2489                                        template_count,
2490                                        tsk);
2491
2492       if (!tmpl || tmpl == error_mark_node)
2493         /* We couldn't figure out what this declaration was
2494            specializing.  */
2495         return error_mark_node;
2496       else
2497         {
2498           tree gen_tmpl = most_general_template (tmpl);
2499
2500           if (explicit_instantiation)
2501             {
2502               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2503                  is done by do_decl_instantiation later.  */
2504
2505               int arg_depth = TMPL_ARGS_DEPTH (targs);
2506               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2507
2508               if (arg_depth > parm_depth)
2509                 {
2510                   /* If TMPL is not the most general template (for
2511                      example, if TMPL is a friend template that is
2512                      injected into namespace scope), then there will
2513                      be too many levels of TARGS.  Remove some of them
2514                      here.  */
2515                   int i;
2516                   tree new_targs;
2517
2518                   new_targs = make_tree_vec (parm_depth);
2519                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2520                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2521                       = TREE_VEC_ELT (targs, i);
2522                   targs = new_targs;
2523                 }
2524
2525               return instantiate_template (tmpl, targs, tf_error);
2526             }
2527
2528           /* If we thought that the DECL was a member function, but it
2529              turns out to be specializing a static member function,
2530              make DECL a static member function as well.  */
2531           if (DECL_STATIC_FUNCTION_P (tmpl)
2532               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2533             revert_static_member_fn (decl);
2534
2535           /* If this is a specialization of a member template of a
2536              template class, we want to return the TEMPLATE_DECL, not
2537              the specialization of it.  */
2538           if (tsk == tsk_template)
2539             {
2540               tree result = DECL_TEMPLATE_RESULT (tmpl);
2541               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2542               DECL_INITIAL (result) = NULL_TREE;
2543               if (have_def)
2544                 {
2545                   tree parm;
2546                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2547                   DECL_SOURCE_LOCATION (result)
2548                     = DECL_SOURCE_LOCATION (decl);
2549                   /* We want to use the argument list specified in the
2550                      definition, not in the original declaration.  */
2551                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2552                   for (parm = DECL_ARGUMENTS (result); parm;
2553                        parm = TREE_CHAIN (parm))
2554                     DECL_CONTEXT (parm) = result;
2555                 }
2556               return register_specialization (tmpl, gen_tmpl, targs,
2557                                               is_friend, 0);
2558             }
2559
2560           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2561           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2562
2563           /* Inherit default function arguments from the template
2564              DECL is specializing.  */
2565           copy_default_args_to_explicit_spec (decl);
2566
2567           /* This specialization has the same protection as the
2568              template it specializes.  */
2569           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2570           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2571
2572           /* 7.1.1-1 [dcl.stc]
2573
2574              A storage-class-specifier shall not be specified in an
2575              explicit specialization...
2576
2577              The parser rejects these, so unless action is taken here,
2578              explicit function specializations will always appear with
2579              global linkage.
2580
2581              The action recommended by the C++ CWG in response to C++
2582              defect report 605 is to make the storage class and linkage
2583              of the explicit specialization match the templated function:
2584
2585              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2586            */
2587           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2588             {
2589               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2590               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2591
2592               /* This specialization has the same linkage and visibility as
2593                  the function template it specializes.  */
2594               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2595               if (! TREE_PUBLIC (decl))
2596                 {
2597                   DECL_INTERFACE_KNOWN (decl) = 1;
2598                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2599                 }
2600               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2601               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2602                 {
2603                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2604                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2605                 }
2606             }
2607
2608           /* If DECL is a friend declaration, declared using an
2609              unqualified name, the namespace associated with DECL may
2610              have been set incorrectly.  For example, in:
2611
2612                template <typename T> void f(T);
2613                namespace N {
2614                  struct S { friend void f<int>(int); }
2615                }
2616
2617              we will have set the DECL_CONTEXT for the friend
2618              declaration to N, rather than to the global namespace.  */
2619           if (DECL_NAMESPACE_SCOPE_P (decl))
2620             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2621
2622           if (is_friend && !have_def)
2623             /* This is not really a declaration of a specialization.
2624                It's just the name of an instantiation.  But, it's not
2625                a request for an instantiation, either.  */
2626             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2627           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2628             /* This is indeed a specialization.  In case of constructors
2629                and destructors, we need in-charge and not-in-charge
2630                versions in V3 ABI.  */
2631             clone_function_decl (decl, /*update_method_vec_p=*/0);
2632
2633           /* Register this specialization so that we can find it
2634              again.  */
2635           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2636         }
2637     }
2638
2639   return decl;
2640 }
2641
2642 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2643    parameters.  These are represented in the same format used for
2644    DECL_TEMPLATE_PARMS.  */
2645
2646 int
2647 comp_template_parms (const_tree parms1, const_tree parms2)
2648 {
2649   const_tree p1;
2650   const_tree p2;
2651
2652   if (parms1 == parms2)
2653     return 1;
2654
2655   for (p1 = parms1, p2 = parms2;
2656        p1 != NULL_TREE && p2 != NULL_TREE;
2657        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2658     {
2659       tree t1 = TREE_VALUE (p1);
2660       tree t2 = TREE_VALUE (p2);
2661       int i;
2662
2663       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2664       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2665
2666       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2667         return 0;
2668
2669       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2670         {
2671           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2672           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2673
2674           /* If either of the template parameters are invalid, assume
2675              they match for the sake of error recovery. */
2676           if (parm1 == error_mark_node || parm2 == error_mark_node)
2677             return 1;
2678
2679           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2680             return 0;
2681
2682           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2683               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2684                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2685             continue;
2686           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2687             return 0;
2688         }
2689     }
2690
2691   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2692     /* One set of parameters has more parameters lists than the
2693        other.  */
2694     return 0;
2695
2696   return 1;
2697 }
2698
2699 /* Determine whether PARM is a parameter pack.  */
2700
2701 bool 
2702 template_parameter_pack_p (const_tree parm)
2703 {
2704   /* Determine if we have a non-type template parameter pack.  */
2705   if (TREE_CODE (parm) == PARM_DECL)
2706     return (DECL_TEMPLATE_PARM_P (parm) 
2707             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2708
2709   /* If this is a list of template parameters, we could get a
2710      TYPE_DECL or a TEMPLATE_DECL.  */ 
2711   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2712     parm = TREE_TYPE (parm);
2713
2714   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2715            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2716           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2717 }
2718
2719 /* Determine if T is a function parameter pack.  */
2720
2721 bool
2722 function_parameter_pack_p (const_tree t)
2723 {
2724   if (t && TREE_CODE (t) == PARM_DECL)
2725     return FUNCTION_PARAMETER_PACK_P (t);
2726   return false;
2727 }
2728
2729 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2730    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2731
2732 tree
2733 get_function_template_decl (const_tree primary_func_tmpl_inst)
2734 {
2735   if (! primary_func_tmpl_inst
2736       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2737       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2738     return NULL;
2739
2740   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2741 }
2742
2743 /* Return true iff the function parameter PARAM_DECL was expanded
2744    from the function parameter pack PACK.  */
2745
2746 bool
2747 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2748 {
2749   if (DECL_ARTIFICIAL (param_decl)
2750       || !function_parameter_pack_p (pack))
2751     return false;
2752
2753   /* The parameter pack and its pack arguments have the same
2754      DECL_PARM_INDEX.  */
2755   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2756 }
2757
2758 /* Determine whether ARGS describes a variadic template args list,
2759    i.e., one that is terminated by a template argument pack.  */
2760
2761 static bool 
2762 template_args_variadic_p (tree args)
2763 {
2764   int nargs;
2765   tree last_parm;
2766
2767   if (args == NULL_TREE)
2768     return false;
2769
2770   args = INNERMOST_TEMPLATE_ARGS (args);
2771   nargs = TREE_VEC_LENGTH (args);
2772
2773   if (nargs == 0)
2774     return false;
2775
2776   last_parm = TREE_VEC_ELT (args, nargs - 1);
2777
2778   return ARGUMENT_PACK_P (last_parm);
2779 }
2780
2781 /* Generate a new name for the parameter pack name NAME (an
2782    IDENTIFIER_NODE) that incorporates its */
2783
2784 static tree
2785 make_ith_pack_parameter_name (tree name, int i)
2786 {
2787   /* Munge the name to include the parameter index.  */
2788 #define NUMBUF_LEN 128
2789   char numbuf[NUMBUF_LEN];
2790   char* newname;
2791   int newname_len;
2792
2793   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2794   newname_len = IDENTIFIER_LENGTH (name)
2795                 + strlen (numbuf) + 2;
2796   newname = (char*)alloca (newname_len);
2797   snprintf (newname, newname_len,
2798             "%s#%i", IDENTIFIER_POINTER (name), i);
2799   return get_identifier (newname);
2800 }
2801
2802 /* Return true if T is a primary function
2803    or class template instantiation.  */
2804
2805 bool
2806 primary_template_instantiation_p (const_tree t)
2807 {
2808   if (!t)
2809     return false;
2810
2811   if (TREE_CODE (t) == FUNCTION_DECL)
2812     return DECL_LANG_SPECIFIC (t)
2813            && DECL_TEMPLATE_INSTANTIATION (t)
2814            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2815   else if (CLASS_TYPE_P (t))
2816     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2817            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2818   return false;
2819 }
2820
2821 /* Return true if PARM is a template template parameter.  */
2822
2823 bool
2824 template_template_parameter_p (const_tree parm)
2825 {
2826   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2827 }
2828
2829 /* Return the template parameters of T if T is a
2830    primary template instantiation, NULL otherwise.  */
2831
2832 tree
2833 get_primary_template_innermost_parameters (const_tree t)
2834 {
2835   tree parms = NULL, template_info = NULL;
2836
2837   if ((template_info = get_template_info (t))
2838       && primary_template_instantiation_p (t))
2839     parms = INNERMOST_TEMPLATE_PARMS
2840         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2841
2842   return parms;
2843 }
2844
2845 /* Return the template parameters of the LEVELth level from the full list
2846    of template parameters PARMS.  */
2847
2848 tree
2849 get_template_parms_at_level (tree parms, int level)
2850 {
2851   tree p;
2852   if (!parms
2853       || TREE_CODE (parms) != TREE_LIST
2854       || level > TMPL_PARMS_DEPTH (parms))
2855     return NULL_TREE;
2856
2857   for (p = parms; p; p = TREE_CHAIN (p))
2858     if (TMPL_PARMS_DEPTH (p) == level)
2859       return p;
2860
2861   return NULL_TREE;
2862 }
2863
2864 /* Returns the template arguments of T if T is a template instantiation,
2865    NULL otherwise.  */
2866
2867 tree
2868 get_template_innermost_arguments (const_tree t)
2869 {
2870   tree args = NULL, template_info = NULL;
2871
2872   if ((template_info = get_template_info (t))
2873       && TI_ARGS (template_info))
2874     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2875
2876   return args;
2877 }
2878
2879 /* Return the argument pack elements of T if T is a template argument pack,
2880    NULL otherwise.  */
2881
2882 tree
2883 get_template_argument_pack_elems (const_tree t)
2884 {
2885   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2886       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2887     return NULL;
2888
2889   return ARGUMENT_PACK_ARGS (t);
2890 }
2891
2892 /* Structure used to track the progress of find_parameter_packs_r.  */
2893 struct find_parameter_pack_data 
2894 {
2895   /* TREE_LIST that will contain all of the parameter packs found by
2896      the traversal.  */
2897   tree* parameter_packs;
2898
2899   /* Set of AST nodes that have been visited by the traversal.  */
2900   struct pointer_set_t *visited;
2901 };
2902
2903 /* Identifies all of the argument packs that occur in a template
2904    argument and appends them to the TREE_LIST inside DATA, which is a
2905    find_parameter_pack_data structure. This is a subroutine of
2906    make_pack_expansion and uses_parameter_packs.  */
2907 static tree
2908 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2909 {
2910   tree t = *tp;
2911   struct find_parameter_pack_data* ppd = 
2912     (struct find_parameter_pack_data*)data;
2913   bool parameter_pack_p = false;
2914
2915   /* Identify whether this is a parameter pack or not.  */
2916   switch (TREE_CODE (t))
2917     {
2918     case TEMPLATE_PARM_INDEX:
2919       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2920         parameter_pack_p = true;
2921       break;
2922
2923     case TEMPLATE_TYPE_PARM:
2924     case TEMPLATE_TEMPLATE_PARM:
2925       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2926         parameter_pack_p = true;
2927       break;
2928
2929     case PARM_DECL:
2930       if (FUNCTION_PARAMETER_PACK_P (t))
2931         {
2932           /* We don't want to walk into the type of a PARM_DECL,
2933              because we don't want to see the type parameter pack.  */
2934           *walk_subtrees = 0;
2935           parameter_pack_p = true;
2936         }
2937       break;
2938
2939     default:
2940       /* Not a parameter pack.  */
2941       break;
2942     }
2943
2944   if (parameter_pack_p)
2945     {
2946       /* Add this parameter pack to the list.  */
2947       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2948     }
2949
2950   if (TYPE_P (t))
2951     cp_walk_tree (&TYPE_CONTEXT (t), 
2952                   &find_parameter_packs_r, ppd, ppd->visited);
2953
2954   /* This switch statement will return immediately if we don't find a
2955      parameter pack.  */
2956   switch (TREE_CODE (t)) 
2957     {
2958     case TEMPLATE_PARM_INDEX:
2959       return NULL_TREE;
2960
2961     case BOUND_TEMPLATE_TEMPLATE_PARM:
2962       /* Check the template itself.  */
2963       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2964                     &find_parameter_packs_r, ppd, ppd->visited);
2965       /* Check the template arguments.  */
2966       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2967                     ppd->visited);
2968       *walk_subtrees = 0;
2969       return NULL_TREE;
2970
2971     case TEMPLATE_TYPE_PARM:
2972     case TEMPLATE_TEMPLATE_PARM:
2973       return NULL_TREE;
2974
2975     case PARM_DECL:
2976       return NULL_TREE;
2977
2978     case RECORD_TYPE:
2979       if (TYPE_PTRMEMFUNC_P (t))
2980         return NULL_TREE;
2981       /* Fall through.  */
2982
2983     case UNION_TYPE:
2984     case ENUMERAL_TYPE:
2985       if (TYPE_TEMPLATE_INFO (t))
2986         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
2987                       &find_parameter_packs_r, ppd, ppd->visited);
2988
2989       *walk_subtrees = 0;
2990       return NULL_TREE;
2991
2992     case TEMPLATE_DECL:
2993       cp_walk_tree (&TREE_TYPE (t),
2994                     &find_parameter_packs_r, ppd, ppd->visited);
2995       return NULL_TREE;
2996  
2997     case TYPENAME_TYPE:
2998       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2999                    ppd, ppd->visited);
3000       *walk_subtrees = 0;
3001       return NULL_TREE;
3002       
3003     case TYPE_PACK_EXPANSION:
3004     case EXPR_PACK_EXPANSION:
3005       *walk_subtrees = 0;
3006       return NULL_TREE;
3007
3008     case INTEGER_TYPE:
3009       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3010                     ppd, ppd->visited);
3011       *walk_subtrees = 0;
3012       return NULL_TREE;
3013
3014     case IDENTIFIER_NODE:
3015       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3016                     ppd->visited);
3017       *walk_subtrees = 0;
3018       return NULL_TREE;
3019
3020     default:
3021       return NULL_TREE;
3022     }
3023
3024   return NULL_TREE;
3025 }
3026
3027 /* Determines if the expression or type T uses any parameter packs.  */
3028 bool
3029 uses_parameter_packs (tree t)
3030 {
3031   tree parameter_packs = NULL_TREE;
3032   struct find_parameter_pack_data ppd;
3033   ppd.parameter_packs = &parameter_packs;
3034   ppd.visited = pointer_set_create ();
3035   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3036   pointer_set_destroy (ppd.visited);
3037   return parameter_packs != NULL_TREE;
3038 }
3039
3040 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3041    representation a base-class initializer into a parameter pack
3042    expansion. If all goes well, the resulting node will be an
3043    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3044    respectively.  */
3045 tree 
3046 make_pack_expansion (tree arg)
3047 {
3048   tree result;
3049   tree parameter_packs = NULL_TREE;
3050   bool for_types = false;
3051   struct find_parameter_pack_data ppd;
3052
3053   if (!arg || arg == error_mark_node)
3054     return arg;
3055
3056   if (TREE_CODE (arg) == TREE_LIST)
3057     {
3058       /* The only time we will see a TREE_LIST here is for a base
3059          class initializer.  In this case, the TREE_PURPOSE will be a
3060          _TYPE node (representing the base class expansion we're
3061          initializing) and the TREE_VALUE will be a TREE_LIST
3062          containing the initialization arguments. 
3063
3064          The resulting expansion looks somewhat different from most
3065          expansions. Rather than returning just one _EXPANSION, we
3066          return a TREE_LIST whose TREE_PURPOSE is a
3067          TYPE_PACK_EXPANSION containing the bases that will be
3068          initialized.  The TREE_VALUE will be identical to the
3069          original TREE_VALUE, which is a list of arguments that will
3070          be passed to each base.  We do not introduce any new pack
3071          expansion nodes into the TREE_VALUE (although it is possible
3072          that some already exist), because the TREE_PURPOSE and
3073          TREE_VALUE all need to be expanded together with the same
3074          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3075          resulting TREE_PURPOSE will mention the parameter packs in
3076          both the bases and the arguments to the bases.  */
3077       tree purpose;
3078       tree value;
3079       tree parameter_packs = NULL_TREE;
3080
3081       /* Determine which parameter packs will be used by the base
3082          class expansion.  */
3083       ppd.visited = pointer_set_create ();
3084       ppd.parameter_packs = &parameter_packs;
3085       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3086                     &ppd, ppd.visited);
3087
3088       if (parameter_packs == NULL_TREE)
3089         {
3090           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3091           pointer_set_destroy (ppd.visited);
3092           return error_mark_node;
3093         }
3094
3095       if (TREE_VALUE (arg) != void_type_node)
3096         {
3097           /* Collect the sets of parameter packs used in each of the
3098              initialization arguments.  */
3099           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3100             {
3101               /* Determine which parameter packs will be expanded in this
3102                  argument.  */
3103               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3104                             &ppd, ppd.visited);
3105             }
3106         }
3107
3108       pointer_set_destroy (ppd.visited);
3109
3110       /* Create the pack expansion type for the base type.  */
3111       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3112       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3113       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3114
3115       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3116          they will rarely be compared to anything.  */
3117       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3118
3119       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3120     }
3121
3122   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3123     for_types = true;
3124
3125   /* Build the PACK_EXPANSION_* node.  */
3126   result = for_types
3127      ? cxx_make_type (TYPE_PACK_EXPANSION)
3128      : make_node (EXPR_PACK_EXPANSION);
3129   SET_PACK_EXPANSION_PATTERN (result, arg);
3130   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3131     {
3132       /* Propagate type and const-expression information.  */
3133       TREE_TYPE (result) = TREE_TYPE (arg);
3134       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3135     }
3136   else
3137     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3138        they will rarely be compared to anything.  */
3139     SET_TYPE_STRUCTURAL_EQUALITY (result);
3140
3141   /* Determine which parameter packs will be expanded.  */
3142   ppd.parameter_packs = &parameter_packs;
3143   ppd.visited = pointer_set_create ();
3144   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3145   pointer_set_destroy (ppd.visited);
3146
3147   /* Make sure we found some parameter packs.  */
3148   if (parameter_packs == NULL_TREE)
3149     {
3150       if (TYPE_P (arg))
3151         error ("expansion pattern %<%T%> contains no argument packs", arg);
3152       else
3153         error ("expansion pattern %<%E%> contains no argument packs", arg);
3154       return error_mark_node;
3155     }
3156   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3157
3158   return result;
3159 }
3160
3161 /* Checks T for any "bare" parameter packs, which have not yet been
3162    expanded, and issues an error if any are found. This operation can
3163    only be done on full expressions or types (e.g., an expression
3164    statement, "if" condition, etc.), because we could have expressions like:
3165
3166      foo(f(g(h(args)))...)
3167
3168    where "args" is a parameter pack. check_for_bare_parameter_packs
3169    should not be called for the subexpressions args, h(args),
3170    g(h(args)), or f(g(h(args))), because we would produce erroneous
3171    error messages. 
3172
3173    Returns TRUE and emits an error if there were bare parameter packs,
3174    returns FALSE otherwise.  */
3175 bool 
3176 check_for_bare_parameter_packs (tree t)
3177 {
3178   tree parameter_packs = NULL_TREE;
3179   struct find_parameter_pack_data ppd;
3180
3181   if (!processing_template_decl || !t || t == error_mark_node)
3182     return false;
3183
3184   if (TREE_CODE (t) == TYPE_DECL)
3185     t = TREE_TYPE (t);
3186
3187   ppd.parameter_packs = &parameter_packs;
3188   ppd.visited = pointer_set_create ();
3189   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3190   pointer_set_destroy (ppd.visited);
3191
3192   if (parameter_packs) 
3193     {
3194       error ("parameter packs not expanded with %<...%>:");
3195       while (parameter_packs)
3196         {
3197           tree pack = TREE_VALUE (parameter_packs);
3198           tree name = NULL_TREE;
3199
3200           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3201               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3202             name = TYPE_NAME (pack);
3203           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3204             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3205           else
3206             name = DECL_NAME (pack);
3207
3208           if (name)
3209             inform (input_location, "        %qD", name);
3210           else
3211             inform (input_location, "        <anonymous>");
3212
3213           parameter_packs = TREE_CHAIN (parameter_packs);
3214         }
3215
3216       return true;
3217     }
3218
3219   return false;
3220 }
3221
3222 /* Expand any parameter packs that occur in the template arguments in
3223    ARGS.  */
3224 tree
3225 expand_template_argument_pack (tree args)
3226 {
3227   tree result_args = NULL_TREE;
3228   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3229   int num_result_args = -1;
3230   int non_default_args_count = -1;
3231
3232   /* First, determine if we need to expand anything, and the number of
3233      slots we'll need.  */
3234   for (in_arg = 0; in_arg < nargs; ++in_arg)
3235     {
3236       tree arg = TREE_VEC_ELT (args, in_arg);
3237       if (arg == NULL_TREE)
3238         return args;
3239       if (ARGUMENT_PACK_P (arg))
3240         {
3241           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3242           if (num_result_args < 0)
3243             num_result_args = in_arg + num_packed;
3244           else
3245             num_result_args += num_packed;
3246         }
3247       else
3248         {
3249           if (num_result_args >= 0)
3250             num_result_args++;
3251         }
3252     }
3253
3254   /* If no expansion is necessary, we're done.  */
3255   if (num_result_args < 0)
3256     return args;
3257
3258   /* Expand arguments.  */
3259   result_args = make_tree_vec (num_result_args);
3260   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3261     non_default_args_count =
3262       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3263   for (in_arg = 0; in_arg < nargs; ++in_arg)
3264     {
3265       tree arg = TREE_VEC_ELT (args, in_arg);
3266       if (ARGUMENT_PACK_P (arg))
3267         {
3268           tree packed = ARGUMENT_PACK_ARGS (arg);
3269           int i, num_packed = TREE_VEC_LENGTH (packed);
3270           for (i = 0; i < num_packed; ++i, ++out_arg)
3271             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3272           if (non_default_args_count > 0)
3273             non_default_args_count += num_packed;
3274         }
3275       else
3276         {
3277           TREE_VEC_ELT (result_args, out_arg) = arg;
3278           ++out_arg;
3279         }
3280     }
3281   if (non_default_args_count >= 0)
3282     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3283   return result_args;
3284 }
3285
3286 /* Checks if DECL shadows a template parameter.
3287
3288    [temp.local]: A template-parameter shall not be redeclared within its
3289    scope (including nested scopes).
3290
3291    Emits an error and returns TRUE if the DECL shadows a parameter,
3292    returns FALSE otherwise.  */
3293
3294 bool
3295 check_template_shadow (tree decl)
3296 {
3297   tree olddecl;
3298
3299   /* If we're not in a template, we can't possibly shadow a template
3300      parameter.  */
3301   if (!current_template_parms)
3302     return true;
3303
3304   /* Figure out what we're shadowing.  */
3305   if (TREE_CODE (decl) == OVERLOAD)
3306     decl = OVL_CURRENT (decl);
3307   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3308
3309   /* If there's no previous binding for this name, we're not shadowing
3310      anything, let alone a template parameter.  */
3311   if (!olddecl)
3312     return true;
3313
3314   /* If we're not shadowing a template parameter, we're done.  Note
3315      that OLDDECL might be an OVERLOAD (or perhaps even an
3316      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3317      node.  */
3318   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3319     return true;
3320
3321   /* We check for decl != olddecl to avoid bogus errors for using a
3322      name inside a class.  We check TPFI to avoid duplicate errors for
3323      inline member templates.  */
3324   if (decl == olddecl
3325       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3326     return true;
3327
3328   error ("declaration of %q+#D", decl);
3329   error (" shadows template parm %q+#D", olddecl);
3330   return false;
3331 }
3332
3333 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3334    ORIG_LEVEL, DECL, and TYPE.  */
3335
3336 static tree
3337 build_template_parm_index (int index,
3338                            int level,
3339                            int orig_level,
3340                            tree decl,
3341                            tree type)
3342 {
3343   tree t = make_node (TEMPLATE_PARM_INDEX);
3344   TEMPLATE_PARM_IDX (t) = index;
3345   TEMPLATE_PARM_LEVEL (t) = level;
3346   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3347   TEMPLATE_PARM_DECL (t) = decl;
3348   TREE_TYPE (t) = type;
3349   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3350   TREE_READONLY (t) = TREE_READONLY (decl);
3351
3352   return t;
3353 }
3354
3355 /* Find the canonical type parameter for the given template type
3356    parameter.  Returns the canonical type parameter, which may be TYPE
3357    if no such parameter existed.  */
3358 static tree
3359 canonical_type_parameter (tree type)
3360 {
3361   tree list;
3362   int idx = TEMPLATE_TYPE_IDX (type);
3363   if (!canonical_template_parms)
3364     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3365
3366   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3367     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3368
3369   list = VEC_index (tree, canonical_template_parms, idx);
3370   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3371     list = TREE_CHAIN (list);
3372
3373   if (list)
3374     return TREE_VALUE (list);
3375   else
3376     {
3377       VEC_replace(tree, canonical_template_parms, idx,
3378                   tree_cons (NULL_TREE, type, 
3379                              VEC_index (tree, canonical_template_parms, idx)));
3380       return type;
3381     }
3382 }
3383
3384 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3385    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3386    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3387    new one is created.  */
3388
3389 static tree
3390 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3391                             tsubst_flags_t complain)
3392 {
3393   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3394       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3395           != TEMPLATE_PARM_LEVEL (index) - levels)
3396       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3397     {
3398       tree orig_decl = TEMPLATE_PARM_DECL (index);
3399       tree decl, t;
3400
3401       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3402                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3403       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3404       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3405       DECL_ARTIFICIAL (decl) = 1;
3406       SET_DECL_TEMPLATE_PARM_P (decl);
3407
3408       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3409                                      TEMPLATE_PARM_LEVEL (index) - levels,
3410                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3411                                      decl, type);
3412       TEMPLATE_PARM_DESCENDANTS (index) = t;
3413       TEMPLATE_PARM_PARAMETER_PACK (t) 
3414         = TEMPLATE_PARM_PARAMETER_PACK (index);
3415
3416         /* Template template parameters need this.  */
3417       if (TREE_CODE (decl) == TEMPLATE_DECL)
3418         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3419           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3420            args, complain);
3421     }
3422
3423   return TEMPLATE_PARM_DESCENDANTS (index);
3424 }
3425
3426 /* Process information from new template parameter PARM and append it to the
3427    LIST being built.  This new parameter is a non-type parameter iff
3428    IS_NON_TYPE is true. This new parameter is a parameter
3429    pack iff IS_PARAMETER_PACK is true.  The location of PARM is in 
3430    PARM_LOC.  */
3431
3432 tree
3433 process_template_parm (tree list, location_t parm_loc, tree parm, bool is_non_type, 
3434                        bool is_parameter_pack)
3435 {
3436   tree decl = 0;
3437   tree defval;
3438   tree err_parm_list;
3439   int idx = 0;
3440
3441   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3442   defval = TREE_PURPOSE (parm);
3443
3444   if (list)
3445     {
3446       tree p = tree_last (list);
3447
3448       if (p && TREE_VALUE (p) != error_mark_node)
3449         {
3450           p = TREE_VALUE (p);
3451           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3452             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3453           else
3454             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3455         }
3456
3457       ++idx;
3458     }
3459   else
3460     idx = 0;
3461
3462   if (is_non_type)
3463     {
3464       parm = TREE_VALUE (parm);
3465
3466       SET_DECL_TEMPLATE_PARM_P (parm);
3467
3468       if (TREE_TYPE (parm) == error_mark_node)
3469         {
3470           err_parm_list = build_tree_list (defval, parm);
3471           TREE_VALUE (err_parm_list) = error_mark_node;
3472            return chainon (list, err_parm_list);
3473         }
3474       else
3475       {
3476         /* [temp.param]
3477
3478            The top-level cv-qualifiers on the template-parameter are
3479            ignored when determining its type.  */
3480         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3481         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3482           {
3483             err_parm_list = build_tree_list (defval, parm);
3484             TREE_VALUE (err_parm_list) = error_mark_node;
3485              return chainon (list, err_parm_list);
3486           }
3487
3488         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3489           {
3490             /* This template parameter is not a parameter pack, but it
3491                should be. Complain about "bare" parameter packs.  */
3492             check_for_bare_parameter_packs (TREE_TYPE (parm));
3493             
3494             /* Recover by calling this a parameter pack.  */
3495             is_parameter_pack = true;
3496           }
3497       }
3498
3499       /* A template parameter is not modifiable.  */
3500       TREE_CONSTANT (parm) = 1;
3501       TREE_READONLY (parm) = 1;
3502       decl = build_decl (parm_loc,
3503                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3504       TREE_CONSTANT (decl) = 1;
3505       TREE_READONLY (decl) = 1;
3506       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3507         = build_template_parm_index (idx, processing_template_decl,
3508                                      processing_template_decl,
3509                                      decl, TREE_TYPE (parm));
3510
3511       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3512         = is_parameter_pack;
3513     }
3514   else
3515     {
3516       tree t;
3517       parm = TREE_VALUE (TREE_VALUE (parm));
3518
3519       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3520         {
3521           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3522           /* This is for distinguishing between real templates and template
3523              template parameters */
3524           TREE_TYPE (parm) = t;
3525           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3526           decl = parm;
3527         }
3528       else
3529         {
3530           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3531           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3532           decl = build_decl (parm_loc,
3533                              TYPE_DECL, parm, t);
3534         }
3535
3536       TYPE_NAME (t) = decl;
3537       TYPE_STUB_DECL (t) = decl;
3538       parm = decl;
3539       TEMPLATE_TYPE_PARM_INDEX (t)
3540         = build_template_parm_index (idx, processing_template_decl,
3541                                      processing_template_decl,
3542                                      decl, TREE_TYPE (parm));
3543       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3544       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3545     }
3546   DECL_ARTIFICIAL (decl) = 1;
3547   SET_DECL_TEMPLATE_PARM_P (decl);
3548   pushdecl (decl);
3549   parm = build_tree_list (defval, parm);
3550   return chainon (list, parm);
3551 }
3552
3553 /* The end of a template parameter list has been reached.  Process the
3554    tree list into a parameter vector, converting each parameter into a more
3555    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3556    as PARM_DECLs.  */
3557
3558 tree
3559 end_template_parm_list (tree parms)
3560 {
3561   int nparms;
3562   tree parm, next;
3563   tree saved_parmlist = make_tree_vec (list_length (parms));
3564
3565   current_template_parms
3566     = tree_cons (size_int (processing_template_decl),
3567                  saved_parmlist, current_template_parms);
3568
3569   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3570     {
3571       next = TREE_CHAIN (parm);
3572       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3573       TREE_CHAIN (parm) = NULL_TREE;
3574     }
3575
3576   --processing_template_parmlist;
3577
3578   return saved_parmlist;
3579 }
3580
3581 /* end_template_decl is called after a template declaration is seen.  */
3582
3583 void
3584 end_template_decl (void)
3585 {
3586   reset_specialization ();
3587
3588   if (! processing_template_decl)
3589     return;
3590
3591   /* This matches the pushlevel in begin_template_parm_list.  */
3592   finish_scope ();
3593
3594   --processing_template_decl;
3595   current_template_parms = TREE_CHAIN (current_template_parms);
3596 }
3597
3598 /* Within the declaration of a template, return all levels of template
3599    parameters that apply.  The template parameters are represented as
3600    a TREE_VEC, in the form documented in cp-tree.h for template
3601    arguments.  */
3602
3603 static tree
3604 current_template_args (void)
3605 {
3606   tree header;
3607   tree args = NULL_TREE;
3608   int length = TMPL_PARMS_DEPTH (current_template_parms);
3609   int l = length;
3610
3611   /* If there is only one level of template parameters, we do not
3612      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3613      TREE_VEC containing the arguments.  */
3614   if (length > 1)
3615     args = make_tree_vec (length);
3616
3617   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3618     {
3619       tree a = copy_node (TREE_VALUE (header));
3620       int i;
3621
3622       TREE_TYPE (a) = NULL_TREE;
3623       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3624         {
3625           tree t = TREE_VEC_ELT (a, i);
3626
3627           /* T will be a list if we are called from within a
3628              begin/end_template_parm_list pair, but a vector directly
3629              if within a begin/end_member_template_processing pair.  */
3630           if (TREE_CODE (t) == TREE_LIST)
3631             {
3632               t = TREE_VALUE (t);
3633
3634               if (!error_operand_p (t))
3635                 {
3636                   if (TREE_CODE (t) == TYPE_DECL
3637                       || TREE_CODE (t) == TEMPLATE_DECL)
3638                     {
3639                       t = TREE_TYPE (t);
3640                       
3641                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3642                         {
3643                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3644                              with a single element, which expands T.  */
3645                           tree vec = make_tree_vec (1);
3646 #ifdef ENABLE_CHECKING
3647                           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3648                                 (vec, TREE_VEC_LENGTH (vec));
3649 #endif
3650                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3651                           
3652                           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3653                           SET_ARGUMENT_PACK_ARGS (t, vec);
3654                         }
3655                     }
3656                   else
3657                     {
3658                       t = DECL_INITIAL (t);
3659                       
3660                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3661                         {
3662                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3663                              with a single element, which expands T.  */
3664                           tree vec = make_tree_vec (1);
3665                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3666 #ifdef ENABLE_CHECKING
3667                           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3668                                 (vec, TREE_VEC_LENGTH (vec));
3669 #endif
3670                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3671                           
3672                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3673                           SET_ARGUMENT_PACK_ARGS (t, vec);
3674                           TREE_TYPE (t) = type;
3675                         }
3676                     }
3677                   TREE_VEC_ELT (a, i) = t;
3678                 }
3679             }
3680         }
3681
3682 #ifdef ENABLE_CHECKING
3683       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3684 #endif
3685
3686       if (length > 1)
3687         TREE_VEC_ELT (args, --l) = a;
3688       else
3689         args = a;
3690     }
3691
3692   return args;
3693 }
3694
3695 /* Update the declared TYPE by doing any lookups which were thought to be
3696    dependent, but are not now that we know the SCOPE of the declarator.  */
3697
3698 tree
3699 maybe_update_decl_type (tree orig_type, tree scope)
3700 {
3701   tree type = orig_type;
3702
3703   if (type == NULL_TREE)
3704     return type;
3705
3706   if (TREE_CODE (orig_type) == TYPE_DECL)
3707     type = TREE_TYPE (type);
3708
3709   if (scope && TYPE_P (scope) && dependent_type_p (scope)
3710       && dependent_type_p (type)
3711       /* Don't bother building up the args in this case.  */
3712       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
3713     {
3714       /* tsubst in the args corresponding to the template parameters,
3715          including auto if present.  Most things will be unchanged, but
3716          make_typename_type and tsubst_qualified_id will resolve
3717          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
3718       tree args = current_template_args ();
3719       tree auto_node = type_uses_auto (type);
3720       if (auto_node)
3721         {
3722           tree auto_vec = make_tree_vec (1);
3723           TREE_VEC_ELT (auto_vec, 0) = auto_node;
3724           args = add_to_template_args (args, auto_vec);
3725         }
3726       push_scope (scope);
3727       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
3728       pop_scope (scope);
3729     }
3730
3731   if (type == error_mark_node)
3732     return orig_type;
3733
3734   if (TREE_CODE (orig_type) == TYPE_DECL)
3735     {
3736       if (same_type_p (type, TREE_TYPE (orig_type)))
3737         type = orig_type;
3738       else
3739         type = TYPE_NAME (type);
3740     }
3741   return type;
3742 }
3743
3744 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3745    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3746    a member template.  Used by push_template_decl below.  */
3747
3748 static tree
3749 build_template_decl (tree decl, tree parms, bool member_template_p)
3750 {
3751   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3752   DECL_TEMPLATE_PARMS (tmpl) = parms;
3753   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3754   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3755
3756   return tmpl;
3757 }
3758
3759 struct template_parm_data
3760 {
3761   /* The level of the template parameters we are currently
3762      processing.  */
3763   int level;
3764
3765   /* The index of the specialization argument we are currently
3766      processing.  */
3767   int current_arg;
3768
3769   /* An array whose size is the number of template parameters.  The
3770      elements are nonzero if the parameter has been used in any one
3771      of the arguments processed so far.  */
3772   int* parms;
3773
3774   /* An array whose size is the number of template arguments.  The
3775      elements are nonzero if the argument makes use of template
3776      parameters of this level.  */
3777   int* arg_uses_template_parms;
3778 };
3779
3780 /* Subroutine of push_template_decl used to see if each template
3781    parameter in a partial specialization is used in the explicit
3782    argument list.  If T is of the LEVEL given in DATA (which is
3783    treated as a template_parm_data*), then DATA->PARMS is marked
3784    appropriately.  */
3785
3786 static int
3787 mark_template_parm (tree t, void* data)
3788 {
3789   int level;
3790   int idx;
3791   struct template_parm_data* tpd = (struct template_parm_data*) data;
3792
3793   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3794     {
3795       level = TEMPLATE_PARM_LEVEL (t);
3796       idx = TEMPLATE_PARM_IDX (t);
3797     }
3798   else
3799     {
3800       level = TEMPLATE_TYPE_LEVEL (t);
3801       idx = TEMPLATE_TYPE_IDX (t);
3802     }
3803
3804   if (level == tpd->level)
3805     {
3806       tpd->parms[idx] = 1;
3807       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3808     }
3809
3810   /* Return zero so that for_each_template_parm will continue the
3811      traversal of the tree; we want to mark *every* template parm.  */
3812   return 0;
3813 }
3814
3815 /* Process the partial specialization DECL.  */
3816
3817 static tree
3818 process_partial_specialization (tree decl)
3819 {
3820   tree type = TREE_TYPE (decl);
3821   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3822   tree specargs = CLASSTYPE_TI_ARGS (type);
3823   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3824   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3825   tree inner_parms;
3826   int nargs = TREE_VEC_LENGTH (inner_args);
3827   int ntparms;
3828   int  i;
3829   int did_error_intro = 0;
3830   struct template_parm_data tpd;
3831   struct template_parm_data tpd2;
3832
3833   gcc_assert (current_template_parms);
3834
3835   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3836   ntparms = TREE_VEC_LENGTH (inner_parms);
3837
3838   /* We check that each of the template parameters given in the
3839      partial specialization is used in the argument list to the
3840      specialization.  For example:
3841
3842        template <class T> struct S;
3843        template <class T> struct S<T*>;
3844
3845      The second declaration is OK because `T*' uses the template
3846      parameter T, whereas
3847
3848        template <class T> struct S<int>;
3849
3850      is no good.  Even trickier is:
3851
3852        template <class T>
3853        struct S1
3854        {
3855           template <class U>
3856           struct S2;
3857           template <class U>
3858           struct S2<T>;
3859        };
3860
3861      The S2<T> declaration is actually invalid; it is a
3862      full-specialization.  Of course,
3863
3864           template <class U>
3865           struct S2<T (*)(U)>;
3866
3867      or some such would have been OK.  */
3868   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3869   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3870   memset (tpd.parms, 0, sizeof (int) * ntparms);
3871
3872   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3873   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3874   for (i = 0; i < nargs; ++i)
3875     {
3876       tpd.current_arg = i;
3877       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3878                               &mark_template_parm,
3879                               &tpd,
3880                               NULL,
3881                               /*include_nondeduced_p=*/false);
3882     }
3883   for (i = 0; i < ntparms; ++i)
3884     if (tpd.parms[i] == 0)
3885       {
3886         /* One of the template parms was not used in the
3887            specialization.  */
3888         if (!did_error_intro)
3889           {
3890             error ("template parameters not used in partial specialization:");
3891             did_error_intro = 1;
3892           }
3893
3894         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3895       }
3896
3897   /* [temp.class.spec]
3898
3899      The argument list of the specialization shall not be identical to
3900      the implicit argument list of the primary template.  */
3901   if (comp_template_args
3902       (inner_args,
3903        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3904                                                    (maintmpl)))))
3905     error ("partial specialization %qT does not specialize any template arguments", type);
3906
3907   /* [temp.class.spec]
3908
3909      A partially specialized non-type argument expression shall not
3910      involve template parameters of the partial specialization except
3911      when the argument expression is a simple identifier.
3912
3913      The type of a template parameter corresponding to a specialized
3914      non-type argument shall not be dependent on a parameter of the
3915      specialization. 
3916
3917      Also, we verify that pack expansions only occur at the
3918      end of the argument list.  */
3919   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3920   tpd2.parms = 0;
3921   for (i = 0; i < nargs; ++i)
3922     {
3923       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3924       tree arg = TREE_VEC_ELT (inner_args, i);
3925       tree packed_args = NULL_TREE;
3926       int j, len = 1;
3927
3928       if (ARGUMENT_PACK_P (arg))
3929         {
3930           /* Extract the arguments from the argument pack. We'll be
3931              iterating over these in the following loop.  */
3932           packed_args = ARGUMENT_PACK_ARGS (arg);
3933           len = TREE_VEC_LENGTH (packed_args);
3934         }
3935
3936       for (j = 0; j < len; j++)
3937         {
3938           if (packed_args)
3939             /* Get the Jth argument in the parameter pack.  */
3940             arg = TREE_VEC_ELT (packed_args, j);
3941
3942           if (PACK_EXPANSION_P (arg))
3943             {
3944               /* Pack expansions must come at the end of the
3945                  argument list.  */
3946               if ((packed_args && j < len - 1)
3947                   || (!packed_args && i < nargs - 1))
3948                 {
3949                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3950                     error ("parameter pack argument %qE must be at the "
3951                            "end of the template argument list", arg);
3952                   else
3953                     error ("parameter pack argument %qT must be at the "
3954                            "end of the template argument list", arg);
3955                 }
3956             }
3957
3958           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3959             /* We only care about the pattern.  */
3960             arg = PACK_EXPANSION_PATTERN (arg);
3961
3962           if (/* These first two lines are the `non-type' bit.  */
3963               !TYPE_P (arg)
3964               && TREE_CODE (arg) != TEMPLATE_DECL
3965               /* This next line is the `argument expression is not just a
3966                  simple identifier' condition and also the `specialized
3967                  non-type argument' bit.  */
3968               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3969             {
3970               if ((!packed_args && tpd.arg_uses_template_parms[i])
3971                   || (packed_args && uses_template_parms (arg)))
3972                 error ("template argument %qE involves template parameter(s)",
3973                        arg);
3974               else 
3975                 {
3976                   /* Look at the corresponding template parameter,
3977                      marking which template parameters its type depends
3978                      upon.  */
3979                   tree type = TREE_TYPE (parm);
3980
3981                   if (!tpd2.parms)
3982                     {
3983                       /* We haven't yet initialized TPD2.  Do so now.  */
3984                       tpd2.arg_uses_template_parms 
3985                         = (int *) alloca (sizeof (int) * nargs);
3986                       /* The number of parameters here is the number in the
3987                          main template, which, as checked in the assertion
3988                          above, is NARGS.  */
3989                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3990                       tpd2.level = 
3991                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3992                     }
3993
3994                   /* Mark the template parameters.  But this time, we're
3995                      looking for the template parameters of the main
3996                      template, not in the specialization.  */
3997                   tpd2.current_arg = i;
3998                   tpd2.arg_uses_template_parms[i] = 0;
3999                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4000                   for_each_template_parm (type,
4001                                           &mark_template_parm,
4002                                           &tpd2,
4003                                           NULL,
4004                                           /*include_nondeduced_p=*/false);
4005
4006                   if (tpd2.arg_uses_template_parms [i])
4007                     {
4008                       /* The type depended on some template parameters.
4009                          If they are fully specialized in the
4010                          specialization, that's OK.  */
4011                       int j;
4012                       int count = 0;
4013                       for (j = 0; j < nargs; ++j)
4014                         if (tpd2.parms[j] != 0
4015                             && tpd.arg_uses_template_parms [j])
4016                           ++count;
4017                       if (count != 0)
4018                         error_n (input_location, count,
4019                                  "type %qT of template argument %qE depends "
4020                                  "on a template parameter",
4021                                  "type %qT of template argument %qE depends "
4022                                  "on template parameters",
4023                                  type,
4024                                  arg);
4025                     }
4026                 }
4027             }
4028         }
4029     }
4030
4031   /* We should only get here once.  */
4032   gcc_assert (!COMPLETE_TYPE_P (type));
4033
4034   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4035     = tree_cons (specargs, inner_parms,
4036                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4037   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4038   return decl;
4039 }
4040
4041 /* Check that a template declaration's use of default arguments and
4042    parameter packs is not invalid.  Here, PARMS are the template
4043    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4044    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4045    specialization.
4046    
4047
4048    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4049    declaration (but not a definition); 1 indicates a declaration, 2
4050    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4051    emitted for extraneous default arguments.
4052
4053    Returns TRUE if there were no errors found, FALSE otherwise. */
4054
4055 bool
4056 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4057                          int is_partial, int is_friend_decl)
4058 {
4059   const char *msg;
4060   int last_level_to_check;
4061   tree parm_level;
4062   bool no_errors = true;
4063
4064   /* [temp.param]
4065
4066      A default template-argument shall not be specified in a
4067      function template declaration or a function template definition, nor
4068      in the template-parameter-list of the definition of a member of a
4069      class template.  */
4070
4071   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4072     /* You can't have a function template declaration in a local
4073        scope, nor you can you define a member of a class template in a
4074        local scope.  */
4075     return true;
4076
4077   if (current_class_type
4078       && !TYPE_BEING_DEFINED (current_class_type)
4079       && DECL_LANG_SPECIFIC (decl)
4080       && DECL_DECLARES_FUNCTION_P (decl)
4081       /* If this is either a friend defined in the scope of the class
4082          or a member function.  */
4083       && (DECL_FUNCTION_MEMBER_P (decl)
4084           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4085           : DECL_FRIEND_CONTEXT (decl)
4086           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4087           : false)
4088       /* And, if it was a member function, it really was defined in
4089          the scope of the class.  */
4090       && (!DECL_FUNCTION_MEMBER_P (decl)
4091           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4092     /* We already checked these parameters when the template was
4093        declared, so there's no need to do it again now.  This function
4094        was defined in class scope, but we're processing it's body now
4095        that the class is complete.  */
4096     return true;
4097
4098   /* Core issue 226 (C++0x only): the following only applies to class
4099      templates.  */
4100   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4101     {
4102       /* [temp.param]
4103
4104          If a template-parameter has a default template-argument, all
4105          subsequent template-parameters shall have a default
4106          template-argument supplied.  */
4107       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4108         {
4109           tree inner_parms = TREE_VALUE (parm_level);
4110           int ntparms = TREE_VEC_LENGTH (inner_parms);
4111           int seen_def_arg_p = 0;
4112           int i;
4113
4114           for (i = 0; i < ntparms; ++i)
4115             {
4116               tree parm = TREE_VEC_ELT (inner_parms, i);
4117
4118               if (parm == error_mark_node)
4119                 continue;
4120
4121               if (TREE_PURPOSE (parm))
4122                 seen_def_arg_p = 1;
4123               else if (seen_def_arg_p
4124                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4125                 {
4126                   error ("no default argument for %qD", TREE_VALUE (parm));
4127                   /* For better subsequent error-recovery, we indicate that
4128                      there should have been a default argument.  */
4129                   TREE_PURPOSE (parm) = error_mark_node;
4130                   no_errors = false;
4131                 }
4132               else if (is_primary
4133                        && !is_partial
4134                        && !is_friend_decl
4135                        /* Don't complain about an enclosing partial
4136                           specialization.  */
4137                        && parm_level == parms
4138                        && TREE_CODE (decl) == TYPE_DECL
4139                        && i < ntparms - 1
4140                        && template_parameter_pack_p (TREE_VALUE (parm)))
4141                 {
4142                   /* A primary class template can only have one
4143                      parameter pack, at the end of the template
4144                      parameter list.  */
4145
4146                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4147                     error ("parameter pack %qE must be at the end of the"
4148                            " template parameter list", TREE_VALUE (parm));
4149                   else
4150                     error ("parameter pack %qT must be at the end of the"
4151                            " template parameter list", 
4152                            TREE_TYPE (TREE_VALUE (parm)));
4153
4154                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4155                     = error_mark_node;
4156                   no_errors = false;
4157                 }
4158             }
4159         }
4160     }
4161
4162   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4163       || is_partial 
4164       || !is_primary
4165       || is_friend_decl)
4166     /* For an ordinary class template, default template arguments are
4167        allowed at the innermost level, e.g.:
4168          template <class T = int>
4169          struct S {};
4170        but, in a partial specialization, they're not allowed even
4171        there, as we have in [temp.class.spec]:
4172
4173          The template parameter list of a specialization shall not
4174          contain default template argument values.
4175
4176        So, for a partial specialization, or for a function template
4177        (in C++98/C++03), we look at all of them.  */
4178     ;
4179   else
4180     /* But, for a primary class template that is not a partial
4181        specialization we look at all template parameters except the
4182        innermost ones.  */
4183     parms = TREE_CHAIN (parms);
4184
4185   /* Figure out what error message to issue.  */
4186   if (is_friend_decl == 2)
4187     msg = G_("default template arguments may not be used in function template "
4188              "friend re-declaration");
4189   else if (is_friend_decl)
4190     msg = G_("default template arguments may not be used in function template "
4191              "friend declarations");
4192   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4193     msg = G_("default template arguments may not be used in function templates "
4194              "without -std=c++0x or -std=gnu++0x");
4195   else if (is_partial)
4196     msg = G_("default template arguments may not be used in "
4197              "partial specializations");
4198   else
4199     msg = G_("default argument for template parameter for class enclosing %qD");
4200
4201   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4202     /* If we're inside a class definition, there's no need to
4203        examine the parameters to the class itself.  On the one
4204        hand, they will be checked when the class is defined, and,
4205        on the other, default arguments are valid in things like:
4206          template <class T = double>
4207          struct S { template <class U> void f(U); };
4208        Here the default argument for `S' has no bearing on the
4209        declaration of `f'.  */
4210     last_level_to_check = template_class_depth (current_class_type) + 1;
4211   else
4212     /* Check everything.  */
4213     last_level_to_check = 0;
4214
4215   for (parm_level = parms;
4216        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4217        parm_level = TREE_CHAIN (parm_level))
4218     {
4219       tree inner_parms = TREE_VALUE (parm_level);
4220       int i;
4221       int ntparms;
4222
4223       ntparms = TREE_VEC_LENGTH (inner_parms);
4224       for (i = 0; i < ntparms; ++i)
4225         {
4226           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4227             continue;
4228
4229           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4230             {
4231               if (msg)
4232                 {
4233                   no_errors = false;
4234                   if (is_friend_decl == 2)
4235                     return no_errors;
4236
4237                   error (msg, decl);
4238                   msg = 0;
4239                 }
4240
4241               /* Clear out the default argument so that we are not
4242                  confused later.  */
4243               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4244             }
4245         }
4246
4247       /* At this point, if we're still interested in issuing messages,
4248          they must apply to classes surrounding the object declared.  */
4249       if (msg)
4250         msg = G_("default argument for template parameter for class "
4251                  "enclosing %qD");
4252     }
4253
4254   return no_errors;
4255 }
4256
4257 /* Worker for push_template_decl_real, called via
4258    for_each_template_parm.  DATA is really an int, indicating the
4259    level of the parameters we are interested in.  If T is a template
4260    parameter of that level, return nonzero.  */
4261
4262 static int
4263 template_parm_this_level_p (tree t, void* data)
4264 {
4265   int this_level = *(int *)data;
4266   int level;
4267
4268   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4269     level = TEMPLATE_PARM_LEVEL (t);
4270   else
4271     level = TEMPLATE_TYPE_LEVEL (t);
4272   return level == this_level;
4273 }
4274
4275 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4276    parameters given by current_template_args, or reuses a
4277    previously existing one, if appropriate.  Returns the DECL, or an
4278    equivalent one, if it is replaced via a call to duplicate_decls.
4279
4280    If IS_FRIEND is true, DECL is a friend declaration.  */
4281
4282 tree
4283 push_template_decl_real (tree decl, bool is_friend)
4284 {
4285   tree tmpl;
4286   tree args;
4287   tree info;
4288   tree ctx;
4289   int primary;
4290   int is_partial;
4291   int new_template_p = 0;
4292   /* True if the template is a member template, in the sense of
4293      [temp.mem].  */
4294   bool member_template_p = false;
4295
4296   if (decl == error_mark_node || !current_template_parms)
4297     return error_mark_node;
4298
4299   /* See if this is a partial specialization.  */
4300   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4301                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4302                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4303
4304   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4305     is_friend = true;
4306
4307   if (is_friend)
4308     /* For a friend, we want the context of the friend function, not
4309        the type of which it is a friend.  */
4310     ctx = DECL_CONTEXT (decl);
4311   else if (CP_DECL_CONTEXT (decl)
4312            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4313     /* In the case of a virtual function, we want the class in which
4314        it is defined.  */
4315     ctx = CP_DECL_CONTEXT (decl);
4316   else
4317     /* Otherwise, if we're currently defining some class, the DECL
4318        is assumed to be a member of the class.  */
4319     ctx = current_scope ();
4320
4321   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4322     ctx = NULL_TREE;
4323
4324   if (!DECL_CONTEXT (decl))
4325     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4326
4327   /* See if this is a primary template.  */
4328   if (is_friend && ctx)
4329     /* A friend template that specifies a class context, i.e.
4330          template <typename T> friend void A<T>::f();
4331        is not primary.  */
4332     primary = 0;
4333   else
4334     primary = template_parm_scope_p ();
4335
4336   if (primary)
4337     {
4338       if (DECL_CLASS_SCOPE_P (decl))
4339         member_template_p = true;
4340       if (TREE_CODE (decl) == TYPE_DECL
4341           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4342         {
4343           error ("template class without a name");
4344           return error_mark_node;
4345         }
4346       else if (TREE_CODE (decl) == FUNCTION_DECL)
4347         {
4348           if (DECL_DESTRUCTOR_P (decl))
4349             {
4350               /* [temp.mem]
4351
4352                  A destructor shall not be a member template.  */
4353               error ("destructor %qD declared as member template", decl);
4354               return error_mark_node;
4355             }
4356           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4357               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
4358                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4359                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4360                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4361                       == void_list_node)))
4362             {
4363               /* [basic.stc.dynamic.allocation]
4364
4365                  An allocation function can be a function
4366                  template. ... Template allocation functions shall
4367                  have two or more parameters.  */
4368               error ("invalid template declaration of %qD", decl);
4369               return error_mark_node;
4370             }
4371         }
4372       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4373                && CLASS_TYPE_P (TREE_TYPE (decl)))
4374         /* OK */;
4375       else
4376         {
4377           error ("template declaration of %q#D", decl);
4378           return error_mark_node;
4379         }
4380     }
4381
4382   /* Check to see that the rules regarding the use of default
4383      arguments are not being violated.  */
4384   check_default_tmpl_args (decl, current_template_parms,
4385                            primary, is_partial, /*is_friend_decl=*/0);
4386
4387   /* Ensure that there are no parameter packs in the type of this
4388      declaration that have not been expanded.  */
4389   if (TREE_CODE (decl) == FUNCTION_DECL)
4390     {
4391       /* Check each of the arguments individually to see if there are
4392          any bare parameter packs.  */
4393       tree type = TREE_TYPE (decl);
4394       tree arg = DECL_ARGUMENTS (decl);
4395       tree argtype = TYPE_ARG_TYPES (type);
4396
4397       while (arg && argtype)
4398         {
4399           if (!FUNCTION_PARAMETER_PACK_P (arg)
4400               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4401             {
4402             /* This is a PARM_DECL that contains unexpanded parameter
4403                packs. We have already complained about this in the
4404                check_for_bare_parameter_packs call, so just replace
4405                these types with ERROR_MARK_NODE.  */
4406               TREE_TYPE (arg) = error_mark_node;
4407               TREE_VALUE (argtype) = error_mark_node;
4408             }
4409
4410           arg = TREE_CHAIN (arg);
4411           argtype = TREE_CHAIN (argtype);
4412         }
4413
4414       /* Check for bare parameter packs in the return type and the
4415          exception specifiers.  */
4416       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4417         /* Errors were already issued, set return type to int
4418            as the frontend doesn't expect error_mark_node as
4419            the return type.  */
4420         TREE_TYPE (type) = integer_type_node;
4421       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4422         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4423     }
4424   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4425     {
4426       TREE_TYPE (decl) = error_mark_node;
4427       return error_mark_node;
4428     }
4429
4430   if (is_partial)
4431     return process_partial_specialization (decl);
4432
4433   args = current_template_args ();
4434
4435   if (!ctx
4436       || TREE_CODE (ctx) == FUNCTION_DECL
4437       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4438       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4439     {
4440       if (DECL_LANG_SPECIFIC (decl)
4441           && DECL_TEMPLATE_INFO (decl)
4442           && DECL_TI_TEMPLATE (decl))
4443         tmpl = DECL_TI_TEMPLATE (decl);
4444       /* If DECL is a TYPE_DECL for a class-template, then there won't
4445          be DECL_LANG_SPECIFIC.  The information equivalent to
4446          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4447       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4448                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4449                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4450         {
4451           /* Since a template declaration already existed for this
4452              class-type, we must be redeclaring it here.  Make sure
4453              that the redeclaration is valid.  */
4454           redeclare_class_template (TREE_TYPE (decl),
4455                                     current_template_parms);
4456           /* We don't need to create a new TEMPLATE_DECL; just use the
4457              one we already had.  */
4458           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4459         }
4460       else
4461         {
4462           tmpl = build_template_decl (decl, current_template_parms,
4463                                       member_template_p);
4464           new_template_p = 1;
4465
4466           if (DECL_LANG_SPECIFIC (decl)
4467               && DECL_TEMPLATE_SPECIALIZATION (decl))
4468             {
4469               /* A specialization of a member template of a template
4470                  class.  */
4471               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4472               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4473               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4474             }
4475         }
4476     }
4477   else
4478     {
4479       tree a, t, current, parms;
4480       int i;
4481       tree tinfo = get_template_info (decl);
4482
4483       if (!tinfo)
4484         {
4485           error ("template definition of non-template %q#D", decl);
4486           return error_mark_node;
4487         }
4488
4489       tmpl = TI_TEMPLATE (tinfo);
4490
4491       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4492           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4493           && DECL_TEMPLATE_SPECIALIZATION (decl)
4494           && DECL_MEMBER_TEMPLATE_P (tmpl))
4495         {
4496           tree new_tmpl;
4497
4498           /* The declaration is a specialization of a member
4499              template, declared outside the class.  Therefore, the
4500              innermost template arguments will be NULL, so we
4501              replace them with the arguments determined by the
4502              earlier call to check_explicit_specialization.  */
4503           args = DECL_TI_ARGS (decl);
4504
4505           new_tmpl
4506             = build_template_decl (decl, current_template_parms,
4507                                    member_template_p);
4508           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4509           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4510           DECL_TI_TEMPLATE (decl) = new_tmpl;
4511           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4512           DECL_TEMPLATE_INFO (new_tmpl)
4513             = build_template_info (tmpl, args);
4514
4515           register_specialization (new_tmpl,
4516                                    most_general_template (tmpl),
4517                                    args,
4518                                    is_friend, 0);
4519           return decl;
4520         }
4521
4522       /* Make sure the template headers we got make sense.  */
4523
4524       parms = DECL_TEMPLATE_PARMS (tmpl);
4525       i = TMPL_PARMS_DEPTH (parms);
4526       if (TMPL_ARGS_DEPTH (args) != i)
4527         {
4528           error ("expected %d levels of template parms for %q#D, got %d",
4529                  i, decl, TMPL_ARGS_DEPTH (args));
4530         }
4531       else
4532         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4533           {
4534             a = TMPL_ARGS_LEVEL (args, i);
4535             t = INNERMOST_TEMPLATE_PARMS (parms);
4536
4537             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4538               {
4539                 if (current == decl)
4540                   error ("got %d template parameters for %q#D",
4541                          TREE_VEC_LENGTH (a), decl);
4542                 else
4543                   error ("got %d template parameters for %q#T",
4544                          TREE_VEC_LENGTH (a), current);
4545                 error ("  but %d required", TREE_VEC_LENGTH (t));
4546                 return error_mark_node;
4547               }
4548
4549             if (current == decl)
4550               current = ctx;
4551             else
4552               current = (TYPE_P (current)
4553                          ? TYPE_CONTEXT (current)
4554                          : DECL_CONTEXT (current));
4555           }
4556
4557       /* Check that the parms are used in the appropriate qualifying scopes
4558          in the declarator.  */
4559       if (!comp_template_args
4560           (TI_ARGS (tinfo),
4561            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4562         {
4563           error ("\
4564 template arguments to %qD do not match original template %qD",
4565                  decl, DECL_TEMPLATE_RESULT (tmpl));
4566           if (!uses_template_parms (TI_ARGS (tinfo)))
4567             inform (input_location, "use template<> for an explicit specialization");
4568           /* Avoid crash in import_export_decl.  */
4569           DECL_INTERFACE_KNOWN (decl) = 1;
4570           return error_mark_node;
4571         }
4572     }
4573
4574   DECL_TEMPLATE_RESULT (tmpl) = decl;
4575   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4576
4577   /* Push template declarations for global functions and types.  Note
4578      that we do not try to push a global template friend declared in a
4579      template class; such a thing may well depend on the template
4580      parameters of the class.  */
4581   if (new_template_p && !ctx
4582       && !(is_friend && template_class_depth (current_class_type) > 0))
4583     {
4584       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4585       if (tmpl == error_mark_node)
4586         return error_mark_node;
4587
4588       /* Hide template friend classes that haven't been declared yet.  */
4589       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4590         {
4591           DECL_ANTICIPATED (tmpl) = 1;
4592           DECL_FRIEND_P (tmpl) = 1;
4593         }
4594     }
4595
4596   if (primary)
4597     {
4598       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4599       int i;
4600
4601       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4602       if (DECL_CONV_FN_P (tmpl))
4603         {
4604           int depth = TMPL_PARMS_DEPTH (parms);
4605
4606           /* It is a conversion operator. See if the type converted to
4607              depends on innermost template operands.  */
4608
4609           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4610                                          depth))
4611             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4612         }
4613
4614       /* Give template template parms a DECL_CONTEXT of the template
4615          for which they are a parameter.  */
4616       parms = INNERMOST_TEMPLATE_PARMS (parms);
4617       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4618         {
4619           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4620           if (TREE_CODE (parm) == TEMPLATE_DECL)
4621             DECL_CONTEXT (parm) = tmpl;
4622
4623           if (TREE_CODE (TREE_TYPE (parm)) == TEMPLATE_TYPE_PARM)
4624             DECL_CONTEXT (TYPE_NAME (TREE_TYPE (parm))) = tmpl;
4625         }
4626     }
4627
4628   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4629      back to its most general template.  If TMPL is a specialization,
4630      ARGS may only have the innermost set of arguments.  Add the missing
4631      argument levels if necessary.  */
4632   if (DECL_TEMPLATE_INFO (tmpl))
4633     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4634
4635   info = build_template_info (tmpl, args);
4636
4637   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4638     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4639   else if (DECL_LANG_SPECIFIC (decl))
4640     DECL_TEMPLATE_INFO (decl) = info;
4641
4642   return DECL_TEMPLATE_RESULT (tmpl);
4643 }
4644
4645 tree
4646 push_template_decl (tree decl)
4647 {
4648   return push_template_decl_real (decl, false);
4649 }
4650
4651 /* Called when a class template TYPE is redeclared with the indicated
4652    template PARMS, e.g.:
4653
4654      template <class T> struct S;
4655      template <class T> struct S {};  */
4656
4657 bool
4658 redeclare_class_template (tree type, tree parms)
4659 {
4660   tree tmpl;
4661   tree tmpl_parms;
4662   int i;
4663
4664   if (!TYPE_TEMPLATE_INFO (type))
4665     {
4666       error ("%qT is not a template type", type);
4667       return false;
4668     }
4669
4670   tmpl = TYPE_TI_TEMPLATE (type);
4671   if (!PRIMARY_TEMPLATE_P (tmpl))
4672     /* The type is nested in some template class.  Nothing to worry
4673        about here; there are no new template parameters for the nested
4674        type.  */
4675     return true;
4676
4677   if (!parms)
4678     {
4679       error ("template specifiers not specified in declaration of %qD",
4680              tmpl);
4681       return false;
4682     }
4683
4684   parms = INNERMOST_TEMPLATE_PARMS (parms);
4685   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4686
4687   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4688     {
4689       error_n (input_location, TREE_VEC_LENGTH (parms),
4690                "redeclared with %d template parameter",
4691                "redeclared with %d template parameters",
4692                TREE_VEC_LENGTH (parms));
4693       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
4694                 "previous declaration %q+D used %d template parameter",
4695                 "previous declaration %q+D used %d template parameters",
4696                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
4697       return false;
4698     }
4699
4700   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4701     {
4702       tree tmpl_parm;
4703       tree parm;
4704       tree tmpl_default;
4705       tree parm_default;
4706
4707       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4708           || TREE_VEC_ELT (parms, i) == error_mark_node)
4709         continue;
4710
4711       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4712       if (tmpl_parm == error_mark_node)
4713         return false;
4714
4715       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4716       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4717       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4718
4719       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4720          TEMPLATE_DECL.  */
4721       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4722           || (TREE_CODE (tmpl_parm) != TYPE_DECL
4723               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4724           || (TREE_CODE (tmpl_parm) != PARM_DECL
4725               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4726                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4727           || (TREE_CODE (tmpl_parm) == PARM_DECL
4728               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4729                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
4730         {
4731           error ("template parameter %q+#D", tmpl_parm);
4732           error ("redeclared here as %q#D", parm);
4733           return false;
4734         }
4735
4736       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4737         {
4738           /* We have in [temp.param]:
4739
4740              A template-parameter may not be given default arguments
4741              by two different declarations in the same scope.  */
4742           error_at (input_location, "redefinition of default argument for %q#D", parm);
4743           inform (DECL_SOURCE_LOCATION (tmpl_parm),
4744                   "original definition appeared here");
4745           return false;
4746         }
4747
4748       if (parm_default != NULL_TREE)
4749         /* Update the previous template parameters (which are the ones
4750            that will really count) with the new default value.  */
4751         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4752       else if (tmpl_default != NULL_TREE)
4753         /* Update the new parameters, too; they'll be used as the
4754            parameters for any members.  */
4755         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4756     }
4757
4758     return true;
4759 }
4760
4761 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4762    (possibly simplified) expression.  */
4763
4764 tree
4765 fold_non_dependent_expr (tree expr)
4766 {
4767   if (expr == NULL_TREE)
4768     return NULL_TREE;
4769
4770   /* If we're in a template, but EXPR isn't value dependent, simplify
4771      it.  We're supposed to treat:
4772
4773        template <typename T> void f(T[1 + 1]);
4774        template <typename T> void f(T[2]);
4775
4776      as two declarations of the same function, for example.  */
4777   if (processing_template_decl
4778       && !type_dependent_expression_p (expr)
4779       && !value_dependent_expression_p (expr))
4780     {
4781       HOST_WIDE_INT saved_processing_template_decl;
4782
4783       saved_processing_template_decl = processing_template_decl;
4784       processing_template_decl = 0;
4785       expr = tsubst_copy_and_build (expr,
4786                                     /*args=*/NULL_TREE,
4787                                     tf_error,
4788                                     /*in_decl=*/NULL_TREE,
4789                                     /*function_p=*/false,
4790                                     /*integral_constant_expression_p=*/true);
4791       processing_template_decl = saved_processing_template_decl;
4792     }
4793   return expr;
4794 }
4795
4796 /* EXPR is an expression which is used in a constant-expression context.
4797    For instance, it could be a VAR_DECL with a constant initializer.
4798    Extract the innermost constant expression.
4799
4800    This is basically a more powerful version of
4801    integral_constant_value, which can be used also in templates where
4802    initializers can maintain a syntactic rather than semantic form
4803    (even if they are non-dependent, for access-checking purposes).  */
4804
4805 static tree
4806 fold_decl_constant_value (tree expr)
4807 {
4808   tree const_expr = expr;
4809   do
4810     {
4811       expr = fold_non_dependent_expr (const_expr);
4812       const_expr = integral_constant_value (expr);
4813     }
4814   while (expr != const_expr);
4815
4816   return expr;
4817 }
4818
4819 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4820    must be a function or a pointer-to-function type, as specified
4821    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4822    and check that the resulting function has external linkage.  */
4823
4824 static tree
4825 convert_nontype_argument_function (tree type, tree expr)
4826 {
4827   tree fns = expr;
4828   tree fn, fn_no_ptr;
4829
4830   fn = instantiate_type (type, fns, tf_none);
4831   if (fn == error_mark_node)
4832     return error_mark_node;
4833
4834   fn_no_ptr = fn;
4835   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4836     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4837   if (TREE_CODE (fn_no_ptr) == BASELINK)
4838     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4839  
4840   /* [temp.arg.nontype]/1
4841
4842      A template-argument for a non-type, non-template template-parameter
4843      shall be one of:
4844      [...]
4845      -- the address of an object or function with external linkage.  */
4846   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4847     {
4848       error ("%qE is not a valid template argument for type %qT "
4849              "because function %qD has not external linkage",
4850              expr, type, fn_no_ptr);
4851       return NULL_TREE;
4852     }
4853
4854   return fn;
4855 }
4856
4857 /* Subroutine of convert_nontype_argument.
4858    Check if EXPR of type TYPE is a valid pointer-to-member constant.
4859    Emit an error otherwise.  */
4860
4861 static bool
4862 check_valid_ptrmem_cst_expr (tree type, tree expr)
4863 {
4864   STRIP_NOPS (expr);
4865   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
4866     return true;
4867   error ("%qE is not a valid template argument for type %qT",
4868          expr, type);
4869   error ("it must be a pointer-to-member of the form `&X::Y'");
4870   return false;
4871 }
4872
4873 /* Attempt to convert the non-type template parameter EXPR to the
4874    indicated TYPE.  If the conversion is successful, return the
4875    converted value.  If the conversion is unsuccessful, return
4876    NULL_TREE if we issued an error message, or error_mark_node if we
4877    did not.  We issue error messages for out-and-out bad template
4878    parameters, but not simply because the conversion failed, since we
4879    might be just trying to do argument deduction.  Both TYPE and EXPR
4880    must be non-dependent.
4881
4882    The conversion follows the special rules described in
4883    [temp.arg.nontype], and it is much more strict than an implicit
4884    conversion.
4885
4886    This function is called twice for each template argument (see
4887    lookup_template_class for a more accurate description of this
4888    problem). This means that we need to handle expressions which
4889    are not valid in a C++ source, but can be created from the
4890    first call (for instance, casts to perform conversions). These
4891    hacks can go away after we fix the double coercion problem.  */
4892
4893 static tree
4894 convert_nontype_argument (tree type, tree expr)
4895 {
4896   tree expr_type;
4897
4898   /* Detect immediately string literals as invalid non-type argument.
4899      This special-case is not needed for correctness (we would easily
4900      catch this later), but only to provide better diagnostic for this
4901      common user mistake. As suggested by DR 100, we do not mention
4902      linkage issues in the diagnostic as this is not the point.  */
4903   if (TREE_CODE (expr) == STRING_CST)
4904     {
4905       error ("%qE is not a valid template argument for type %qT "
4906              "because string literals can never be used in this context",
4907              expr, type);
4908       return NULL_TREE;
4909     }
4910
4911   /* If we are in a template, EXPR may be non-dependent, but still
4912      have a syntactic, rather than semantic, form.  For example, EXPR
4913      might be a SCOPE_REF, rather than the VAR_DECL to which the
4914      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4915      so that access checking can be performed when the template is
4916      instantiated -- but here we need the resolved form so that we can
4917      convert the argument.  */
4918   expr = fold_non_dependent_expr (expr);
4919   if (error_operand_p (expr))
4920     return error_mark_node;
4921   expr_type = TREE_TYPE (expr);
4922
4923   /* HACK: Due to double coercion, we can get a
4924      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4925      which is the tree that we built on the first call (see
4926      below when coercing to reference to object or to reference to
4927      function). We just strip everything and get to the arg.
4928      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4929      for examples.  */
4930   if (TREE_CODE (expr) == NOP_EXPR)
4931     {
4932       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4933         {
4934           /* ??? Maybe we could use convert_from_reference here, but we
4935              would need to relax its constraints because the NOP_EXPR
4936              could actually change the type to something more cv-qualified,
4937              and this is not folded by convert_from_reference.  */
4938           tree addr = TREE_OPERAND (expr, 0);
4939           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4940           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4941           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4942           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4943                       (TREE_TYPE (expr_type),
4944                        TREE_TYPE (TREE_TYPE (addr))));
4945
4946           expr = TREE_OPERAND (addr, 0);
4947           expr_type = TREE_TYPE (expr);
4948         }
4949
4950       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4951          parameter is a pointer to object, through decay and
4952          qualification conversion. Let's strip everything.  */
4953       else if (TYPE_PTROBV_P (type))
4954         {
4955           STRIP_NOPS (expr);
4956           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4957           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4958           /* Skip the ADDR_EXPR only if it is part of the decay for
4959              an array. Otherwise, it is part of the original argument
4960              in the source code.  */
4961           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4962             expr = TREE_OPERAND (expr, 0);
4963           expr_type = TREE_TYPE (expr);
4964         }
4965     }
4966
4967   /* [temp.arg.nontype]/5, bullet 1
4968
4969      For a non-type template-parameter of integral or enumeration type,
4970      integral promotions (_conv.prom_) and integral conversions
4971      (_conv.integral_) are applied.  */
4972   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
4973     {
4974       if (!INTEGRAL_OR_ENUMERATION_TYPE_P (expr_type))
4975         return error_mark_node;
4976
4977       expr = fold_decl_constant_value (expr);
4978       /* Notice that there are constant expressions like '4 % 0' which
4979          do not fold into integer constants.  */
4980       if (TREE_CODE (expr) != INTEGER_CST)
4981         {
4982           error ("%qE is not a valid template argument for type %qT "
4983                  "because it is a non-constant expression", expr, type);
4984           return NULL_TREE;
4985         }
4986
4987       /* At this point, an implicit conversion does what we want,
4988          because we already know that the expression is of integral
4989          type.  */
4990       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4991       if (expr == error_mark_node)
4992         return error_mark_node;
4993
4994       /* Conversion was allowed: fold it to a bare integer constant.  */
4995       expr = fold (expr);
4996     }
4997   /* [temp.arg.nontype]/5, bullet 2
4998
4999      For a non-type template-parameter of type pointer to object,
5000      qualification conversions (_conv.qual_) and the array-to-pointer
5001      conversion (_conv.array_) are applied.  */
5002   else if (TYPE_PTROBV_P (type))
5003     {
5004       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5005
5006          A template-argument for a non-type, non-template template-parameter
5007          shall be one of: [...]
5008
5009          -- the name of a non-type template-parameter;
5010          -- the address of an object or function with external linkage, [...]
5011             expressed as "& id-expression" where the & is optional if the name
5012             refers to a function or array, or if the corresponding
5013             template-parameter is a reference.
5014
5015         Here, we do not care about functions, as they are invalid anyway
5016         for a parameter of type pointer-to-object.  */
5017
5018       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5019         /* Non-type template parameters are OK.  */
5020         ;
5021       else if (TREE_CODE (expr) != ADDR_EXPR
5022                && TREE_CODE (expr_type) != ARRAY_TYPE)
5023         {
5024           if (TREE_CODE (expr) == VAR_DECL)
5025             {
5026               error ("%qD is not a valid template argument "
5027                      "because %qD is a variable, not the address of "
5028                      "a variable",
5029                      expr, expr);
5030               return NULL_TREE;
5031             }
5032           /* Other values, like integer constants, might be valid
5033              non-type arguments of some other type.  */
5034           return error_mark_node;
5035         }
5036       else
5037         {
5038           tree decl;
5039
5040           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5041                   ? TREE_OPERAND (expr, 0) : expr);
5042           if (TREE_CODE (decl) != VAR_DECL)
5043             {
5044               error ("%qE is not a valid template argument of type %qT "
5045                      "because %qE is not a variable",
5046                      expr, type, decl);
5047               return NULL_TREE;
5048             }
5049           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5050             {
5051               error ("%qE is not a valid template argument of type %qT "
5052                      "because %qD does not have external linkage",
5053                      expr, type, decl);
5054               return NULL_TREE;
5055             }
5056         }
5057
5058       expr = decay_conversion (expr);
5059       if (expr == error_mark_node)
5060         return error_mark_node;
5061
5062       expr = perform_qualification_conversions (type, expr);
5063       if (expr == error_mark_node)
5064         return error_mark_node;
5065     }
5066   /* [temp.arg.nontype]/5, bullet 3
5067
5068      For a non-type template-parameter of type reference to object, no
5069      conversions apply. The type referred to by the reference may be more
5070      cv-qualified than the (otherwise identical) type of the
5071      template-argument. The template-parameter is bound directly to the
5072      template-argument, which must be an lvalue.  */
5073   else if (TYPE_REF_OBJ_P (type))
5074     {
5075       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5076                                                       expr_type))
5077         return error_mark_node;
5078
5079       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5080         {
5081           error ("%qE is not a valid template argument for type %qT "
5082                  "because of conflicts in cv-qualification", expr, type);
5083           return NULL_TREE;
5084         }
5085
5086       if (!real_lvalue_p (expr))
5087         {
5088           error ("%qE is not a valid template argument for type %qT "
5089                  "because it is not an lvalue", expr, type);
5090           return NULL_TREE;
5091         }
5092
5093       /* [temp.arg.nontype]/1
5094
5095          A template-argument for a non-type, non-template template-parameter
5096          shall be one of: [...]
5097
5098          -- the address of an object or function with external linkage.  */
5099       if (TREE_CODE (expr) == INDIRECT_REF
5100           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5101         {
5102           expr = TREE_OPERAND (expr, 0);
5103           if (DECL_P (expr))
5104             {
5105               error ("%q#D is not a valid template argument for type %qT "
5106                      "because a reference variable does not have a constant "
5107                      "address", expr, type);
5108               return NULL_TREE;
5109             }
5110         }
5111
5112       if (!DECL_P (expr))
5113         {
5114           error ("%qE is not a valid template argument for type %qT "
5115                  "because it is not an object with external linkage",
5116                  expr, type);
5117           return NULL_TREE;
5118         }
5119
5120       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5121         {
5122           error ("%qE is not a valid template argument for type %qT "
5123                  "because object %qD has not external linkage",
5124                  expr, type, expr);
5125           return NULL_TREE;
5126         }
5127
5128       expr = build_nop (type, build_address (expr));
5129     }
5130   /* [temp.arg.nontype]/5, bullet 4
5131
5132      For a non-type template-parameter of type pointer to function, only
5133      the function-to-pointer conversion (_conv.func_) is applied. If the
5134      template-argument represents a set of overloaded functions (or a
5135      pointer to such), the matching function is selected from the set
5136      (_over.over_).  */
5137   else if (TYPE_PTRFN_P (type))
5138     {
5139       /* If the argument is a template-id, we might not have enough
5140          context information to decay the pointer.  */
5141       if (!type_unknown_p (expr_type))
5142         {
5143           expr = decay_conversion (expr);
5144           if (expr == error_mark_node)
5145             return error_mark_node;
5146         }
5147
5148       expr = convert_nontype_argument_function (type, expr);
5149       if (!expr || expr == error_mark_node)
5150         return expr;
5151
5152       if (TREE_CODE (expr) != ADDR_EXPR)
5153         {
5154           error ("%qE is not a valid template argument for type %qT", expr, type);
5155           error ("it must be the address of a function with external linkage");
5156           return NULL_TREE;
5157         }
5158     }
5159   /* [temp.arg.nontype]/5, bullet 5
5160
5161      For a non-type template-parameter of type reference to function, no
5162      conversions apply. If the template-argument represents a set of
5163      overloaded functions, the matching function is selected from the set
5164      (_over.over_).  */
5165   else if (TYPE_REFFN_P (type))
5166     {
5167       if (TREE_CODE (expr) == ADDR_EXPR)
5168         {
5169           error ("%qE is not a valid template argument for type %qT "
5170                  "because it is a pointer", expr, type);
5171           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5172           return NULL_TREE;
5173         }
5174
5175       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5176       if (!expr || expr == error_mark_node)
5177         return expr;
5178
5179       expr = build_nop (type, build_address (expr));
5180     }
5181   /* [temp.arg.nontype]/5, bullet 6
5182
5183      For a non-type template-parameter of type pointer to member function,
5184      no conversions apply. If the template-argument represents a set of
5185      overloaded member functions, the matching member function is selected
5186      from the set (_over.over_).  */
5187   else if (TYPE_PTRMEMFUNC_P (type))
5188     {
5189       expr = instantiate_type (type, expr, tf_none);
5190       if (expr == error_mark_node)
5191         return error_mark_node;
5192
5193       /* [temp.arg.nontype] bullet 1 says the pointer to member
5194          expression must be a pointer-to-member constant.  */
5195       if (!check_valid_ptrmem_cst_expr (type, expr))
5196         return error_mark_node;
5197
5198       /* There is no way to disable standard conversions in
5199          resolve_address_of_overloaded_function (called by
5200          instantiate_type). It is possible that the call succeeded by
5201          converting &B::I to &D::I (where B is a base of D), so we need
5202          to reject this conversion here.
5203
5204          Actually, even if there was a way to disable standard conversions,
5205          it would still be better to reject them here so that we can
5206          provide a superior diagnostic.  */
5207       if (!same_type_p (TREE_TYPE (expr), type))
5208         {
5209           error ("%qE is not a valid template argument for type %qT "
5210                  "because it is of type %qT", expr, type,
5211                  TREE_TYPE (expr));
5212           /* If we are just one standard conversion off, explain.  */
5213           if (can_convert (type, TREE_TYPE (expr)))
5214             inform (input_location,
5215                     "standard conversions are not allowed in this context");
5216           return NULL_TREE;
5217         }
5218     }
5219   /* [temp.arg.nontype]/5, bullet 7
5220
5221      For a non-type template-parameter of type pointer to data member,
5222      qualification conversions (_conv.qual_) are applied.  */
5223   else if (TYPE_PTRMEM_P (type))
5224     {
5225       /* [temp.arg.nontype] bullet 1 says the pointer to member
5226          expression must be a pointer-to-member constant.  */
5227       if (!check_valid_ptrmem_cst_expr (type, expr))
5228         return error_mark_node;
5229
5230       expr = perform_qualification_conversions (type, expr);
5231       if (expr == error_mark_node)
5232         return expr;
5233     }
5234   /* A template non-type parameter must be one of the above.  */
5235   else
5236     gcc_unreachable ();
5237
5238   /* Sanity check: did we actually convert the argument to the
5239      right type?  */
5240   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
5241   return expr;
5242 }
5243
5244 /* Subroutine of coerce_template_template_parms, which returns 1 if
5245    PARM_PARM and ARG_PARM match using the rule for the template
5246    parameters of template template parameters. Both PARM and ARG are
5247    template parameters; the rest of the arguments are the same as for
5248    coerce_template_template_parms.
5249  */
5250 static int
5251 coerce_template_template_parm (tree parm,
5252                               tree arg,
5253                               tsubst_flags_t complain,
5254                               tree in_decl,
5255                               tree outer_args)
5256 {
5257   if (arg == NULL_TREE || arg == error_mark_node
5258       || parm == NULL_TREE || parm == error_mark_node)
5259     return 0;
5260   
5261   if (TREE_CODE (arg) != TREE_CODE (parm))
5262     return 0;
5263   
5264   switch (TREE_CODE (parm))
5265     {
5266     case TEMPLATE_DECL:
5267       /* We encounter instantiations of templates like
5268          template <template <template <class> class> class TT>
5269          class C;  */
5270       {
5271         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5272         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5273         
5274         if (!coerce_template_template_parms
5275             (parmparm, argparm, complain, in_decl, outer_args))
5276           return 0;
5277       }
5278       /* Fall through.  */
5279       
5280     case TYPE_DECL:
5281       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5282           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5283         /* Argument is a parameter pack but parameter is not.  */
5284         return 0;
5285       break;
5286       
5287     case PARM_DECL:
5288       /* The tsubst call is used to handle cases such as
5289          
5290            template <int> class C {};
5291            template <class T, template <T> class TT> class D {};
5292            D<int, C> d;
5293
5294          i.e. the parameter list of TT depends on earlier parameters.  */
5295       if (!uses_template_parms (TREE_TYPE (arg))
5296           && !same_type_p
5297                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5298                  TREE_TYPE (arg)))
5299         return 0;
5300       
5301       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5302           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5303         /* Argument is a parameter pack but parameter is not.  */
5304         return 0;
5305       
5306       break;
5307
5308     default:
5309       gcc_unreachable ();
5310     }
5311
5312   return 1;
5313 }
5314
5315
5316 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5317    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5318    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5319    or PARM_DECL.
5320
5321    Consider the example:
5322      template <class T> class A;
5323      template<template <class U> class TT> class B;
5324
5325    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5326    the parameters to A, and OUTER_ARGS contains A.  */
5327
5328 static int
5329 coerce_template_template_parms (tree parm_parms,
5330                                 tree arg_parms,
5331                                 tsubst_flags_t complain,
5332                                 tree in_decl,
5333                                 tree outer_args)
5334 {
5335   int nparms, nargs, i;
5336   tree parm, arg;
5337   int variadic_p = 0;
5338
5339   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5340   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5341
5342   nparms = TREE_VEC_LENGTH (parm_parms);
5343   nargs = TREE_VEC_LENGTH (arg_parms);
5344
5345   /* Determine whether we have a parameter pack at the end of the
5346      template template parameter's template parameter list.  */
5347   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5348     {
5349       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5350       
5351       if (parm == error_mark_node)
5352         return 0;
5353
5354       switch (TREE_CODE (parm))
5355         {
5356         case TEMPLATE_DECL:
5357         case TYPE_DECL:
5358           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5359             variadic_p = 1;
5360           break;
5361           
5362         case PARM_DECL:
5363           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5364             variadic_p = 1;
5365           break;
5366           
5367         default:
5368           gcc_unreachable ();
5369         }
5370     }
5371  
5372   if (nargs != nparms
5373       && !(variadic_p && nargs >= nparms - 1))
5374     return 0;
5375
5376   /* Check all of the template parameters except the parameter pack at
5377      the end (if any).  */
5378   for (i = 0; i < nparms - variadic_p; ++i)
5379     {
5380       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
5381           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5382         continue;
5383
5384       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5385       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5386
5387       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5388                                           outer_args))
5389         return 0;
5390
5391     }
5392
5393   if (variadic_p)
5394     {
5395       /* Check each of the template parameters in the template
5396          argument against the template parameter pack at the end of
5397          the template template parameter.  */
5398       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
5399         return 0;
5400
5401       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5402
5403       for (; i < nargs; ++i)
5404         {
5405           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5406             continue;
5407  
5408           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5409  
5410           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5411                                               outer_args))
5412             return 0;
5413         }
5414     }
5415
5416   return 1;
5417 }
5418
5419 /* Verifies that the deduced template arguments (in TARGS) for the
5420    template template parameters (in TPARMS) represent valid bindings,
5421    by comparing the template parameter list of each template argument
5422    to the template parameter list of its corresponding template
5423    template parameter, in accordance with DR150. This
5424    routine can only be called after all template arguments have been
5425    deduced. It will return TRUE if all of the template template
5426    parameter bindings are okay, FALSE otherwise.  */
5427 bool 
5428 template_template_parm_bindings_ok_p (tree tparms, tree targs)
5429 {
5430   int i, ntparms = TREE_VEC_LENGTH (tparms);
5431   bool ret = true;
5432
5433   /* We're dealing with template parms in this process.  */
5434   ++processing_template_decl;
5435
5436   targs = INNERMOST_TEMPLATE_ARGS (targs);
5437
5438   for (i = 0; i < ntparms; ++i)
5439     {
5440       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
5441       tree targ = TREE_VEC_ELT (targs, i);
5442
5443       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
5444         {
5445           tree packed_args = NULL_TREE;
5446           int idx, len = 1;
5447
5448           if (ARGUMENT_PACK_P (targ))
5449             {
5450               /* Look inside the argument pack.  */
5451               packed_args = ARGUMENT_PACK_ARGS (targ);
5452               len = TREE_VEC_LENGTH (packed_args);
5453             }
5454
5455           for (idx = 0; idx < len; ++idx)
5456             {
5457               tree targ_parms = NULL_TREE;
5458
5459               if (packed_args)
5460                 /* Extract the next argument from the argument
5461                    pack.  */
5462                 targ = TREE_VEC_ELT (packed_args, idx);
5463
5464               if (PACK_EXPANSION_P (targ))
5465                 /* Look at the pattern of the pack expansion.  */
5466                 targ = PACK_EXPANSION_PATTERN (targ);
5467
5468               /* Extract the template parameters from the template
5469                  argument.  */
5470               if (TREE_CODE (targ) == TEMPLATE_DECL)
5471                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
5472               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
5473                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
5474
5475               /* Verify that we can coerce the template template
5476                  parameters from the template argument to the template
5477                  parameter.  This requires an exact match.  */
5478               if (targ_parms
5479                   && !coerce_template_template_parms
5480                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
5481                         targ_parms,
5482                         tf_none,
5483                         tparm,
5484                         targs))
5485                 {
5486                   ret = false;
5487                   goto out;
5488                 }
5489             }
5490         }
5491     }
5492
5493  out:
5494
5495   --processing_template_decl;
5496   return ret;
5497 }
5498
5499 /* Convert the indicated template ARG as necessary to match the
5500    indicated template PARM.  Returns the converted ARG, or
5501    error_mark_node if the conversion was unsuccessful.  Error and
5502    warning messages are issued under control of COMPLAIN.  This
5503    conversion is for the Ith parameter in the parameter list.  ARGS is
5504    the full set of template arguments deduced so far.  */
5505
5506 static tree
5507 convert_template_argument (tree parm,
5508                            tree arg,
5509                            tree args,
5510                            tsubst_flags_t complain,
5511                            int i,
5512                            tree in_decl)
5513 {
5514   tree orig_arg;
5515   tree val;
5516   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
5517
5518   if (TREE_CODE (arg) == TREE_LIST
5519       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
5520     {
5521       /* The template argument was the name of some
5522          member function.  That's usually
5523          invalid, but static members are OK.  In any
5524          case, grab the underlying fields/functions
5525          and issue an error later if required.  */
5526       orig_arg = TREE_VALUE (arg);
5527       TREE_TYPE (arg) = unknown_type_node;
5528     }
5529
5530   orig_arg = arg;
5531
5532   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
5533   requires_type = (TREE_CODE (parm) == TYPE_DECL
5534                    || requires_tmpl_type);
5535
5536   /* When determining whether an argument pack expansion is a template,
5537      look at the pattern.  */
5538   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
5539     arg = PACK_EXPANSION_PATTERN (arg);
5540
5541   /* Deal with an injected-class-name used as a template template arg.  */
5542   if (requires_tmpl_type && CLASS_TYPE_P (arg))
5543     {
5544       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
5545       if (TREE_CODE (t) == TEMPLATE_DECL)
5546         {
5547           if (complain & tf_warning_or_error)
5548             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
5549                      " used as template template argument", TYPE_NAME (arg));
5550           else if (flag_pedantic_errors)
5551             t = arg;
5552
5553           arg = t;
5554         }
5555     }
5556
5557   is_tmpl_type = 
5558     ((TREE_CODE (arg) == TEMPLATE_DECL
5559       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
5560      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5561      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
5562
5563   if (is_tmpl_type
5564       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5565           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
5566     arg = TYPE_STUB_DECL (arg);
5567
5568   is_type = TYPE_P (arg) || is_tmpl_type;
5569
5570   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
5571       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
5572     {
5573       permerror (input_location, "to refer to a type member of a template parameter, "
5574                  "use %<typename %E%>", orig_arg);
5575
5576       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
5577                                      TREE_OPERAND (arg, 1),
5578                                      typename_type,
5579                                      complain & tf_error);
5580       arg = orig_arg;
5581       is_type = 1;
5582     }
5583   if (is_type != requires_type)
5584     {
5585       if (in_decl)
5586         {
5587           if (complain & tf_error)
5588             {
5589               error ("type/value mismatch at argument %d in template "
5590                      "parameter list for %qD",
5591                      i + 1, in_decl);
5592               if (is_type)
5593                 error ("  expected a constant of type %qT, got %qT",
5594                        TREE_TYPE (parm),
5595                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
5596               else if (requires_tmpl_type)
5597                 error ("  expected a class template, got %qE", orig_arg);
5598               else
5599                 error ("  expected a type, got %qE", orig_arg);
5600             }
5601         }
5602       return error_mark_node;
5603     }
5604   if (is_tmpl_type ^ requires_tmpl_type)
5605     {
5606       if (in_decl && (complain & tf_error))
5607         {
5608           error ("type/value mismatch at argument %d in template "
5609                  "parameter list for %qD",
5610                  i + 1, in_decl);
5611           if (is_tmpl_type)
5612             error ("  expected a type, got %qT", DECL_NAME (arg));
5613           else
5614             error ("  expected a class template, got %qT", orig_arg);
5615         }
5616       return error_mark_node;
5617     }
5618
5619   if (is_type)
5620     {
5621       if (requires_tmpl_type)
5622         {
5623           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
5624             /* The number of argument required is not known yet.
5625                Just accept it for now.  */
5626             val = TREE_TYPE (arg);
5627           else
5628             {
5629               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5630               tree argparm;
5631
5632               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5633
5634               if (coerce_template_template_parms (parmparm, argparm,
5635                                                   complain, in_decl,
5636                                                   args))
5637                 {
5638                   val = arg;
5639
5640                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5641                      TEMPLATE_DECL.  */
5642                   if (val != error_mark_node)
5643                     {
5644                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5645                         val = TREE_TYPE (val);
5646                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
5647                         val = make_pack_expansion (val);
5648                     }
5649                 }
5650               else
5651                 {
5652                   if (in_decl && (complain & tf_error))
5653                     {
5654                       error ("type/value mismatch at argument %d in "
5655                              "template parameter list for %qD",
5656                              i + 1, in_decl);
5657                       error ("  expected a template of type %qD, got %qT",
5658                              parm, orig_arg);
5659                     }
5660
5661                   val = error_mark_node;
5662                 }
5663             }
5664         }
5665       else
5666         val = orig_arg;
5667       /* We only form one instance of each template specialization.
5668          Therefore, if we use a non-canonical variant (i.e., a
5669          typedef), any future messages referring to the type will use
5670          the typedef, which is confusing if those future uses do not
5671          themselves also use the typedef.  */
5672       if (TYPE_P (val))
5673         val = strip_typedefs (val);
5674     }
5675   else
5676     {
5677       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5678
5679       if (invalid_nontype_parm_type_p (t, complain))
5680         return error_mark_node;
5681
5682       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
5683         {
5684           if (same_type_p (t, TREE_TYPE (orig_arg)))
5685             val = orig_arg;
5686           else
5687             {
5688               /* Not sure if this is reachable, but it doesn't hurt
5689                  to be robust.  */
5690               error ("type mismatch in nontype parameter pack");
5691               val = error_mark_node;
5692             }
5693         }
5694       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5695         /* We used to call digest_init here.  However, digest_init
5696            will report errors, which we don't want when complain
5697            is zero.  More importantly, digest_init will try too
5698            hard to convert things: for example, `0' should not be
5699            converted to pointer type at this point according to
5700            the standard.  Accepting this is not merely an
5701            extension, since deciding whether or not these
5702            conversions can occur is part of determining which
5703            function template to call, or whether a given explicit
5704            argument specification is valid.  */
5705         val = convert_nontype_argument (t, orig_arg);
5706       else
5707         val = orig_arg;
5708
5709       if (val == NULL_TREE)
5710         val = error_mark_node;
5711       else if (val == error_mark_node && (complain & tf_error))
5712         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5713
5714       if (TREE_CODE (val) == SCOPE_REF)
5715         {
5716           /* Strip typedefs from the SCOPE_REF.  */
5717           tree type = strip_typedefs (TREE_TYPE (val));
5718           tree scope = strip_typedefs (TREE_OPERAND (val, 0));
5719           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
5720                                       QUALIFIED_NAME_IS_TEMPLATE (val));
5721         }
5722     }
5723
5724   return val;
5725 }
5726
5727 /* Coerces the remaining template arguments in INNER_ARGS (from
5728    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5729    Returns the coerced argument pack. PARM_IDX is the position of this
5730    parameter in the template parameter list. ARGS is the original
5731    template argument list.  */
5732 static tree
5733 coerce_template_parameter_pack (tree parms,
5734                                 int parm_idx,
5735                                 tree args,
5736                                 tree inner_args,
5737                                 int arg_idx,
5738                                 tree new_args,
5739                                 int* lost,
5740                                 tree in_decl,
5741                                 tsubst_flags_t complain)
5742 {
5743   tree parm = TREE_VEC_ELT (parms, parm_idx);
5744   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5745   tree packed_args;
5746   tree argument_pack;
5747   tree packed_types = NULL_TREE;
5748
5749   if (arg_idx > nargs)
5750     arg_idx = nargs;
5751
5752   packed_args = make_tree_vec (nargs - arg_idx);
5753
5754   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5755       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5756     {
5757       /* When the template parameter is a non-type template
5758          parameter pack whose type uses parameter packs, we need
5759          to look at each of the template arguments
5760          separately. Build a vector of the types for these
5761          non-type template parameters in PACKED_TYPES.  */
5762       tree expansion 
5763         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5764       packed_types = tsubst_pack_expansion (expansion, args,
5765                                             complain, in_decl);
5766
5767       if (packed_types == error_mark_node)
5768         return error_mark_node;
5769
5770       /* Check that we have the right number of arguments.  */
5771       if (arg_idx < nargs
5772           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5773           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5774         {
5775           int needed_parms 
5776             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5777           error ("wrong number of template arguments (%d, should be %d)",
5778                  nargs, needed_parms);
5779           return error_mark_node;
5780         }
5781
5782       /* If we aren't able to check the actual arguments now
5783          (because they haven't been expanded yet), we can at least
5784          verify that all of the types used for the non-type
5785          template parameter pack are, in fact, valid for non-type
5786          template parameters.  */
5787       if (arg_idx < nargs 
5788           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5789         {
5790           int j, len = TREE_VEC_LENGTH (packed_types);
5791           for (j = 0; j < len; ++j)
5792             {
5793               tree t = TREE_VEC_ELT (packed_types, j);
5794               if (invalid_nontype_parm_type_p (t, complain))
5795                 return error_mark_node;
5796             }
5797         }
5798     }
5799
5800   /* Convert the remaining arguments, which will be a part of the
5801      parameter pack "parm".  */
5802   for (; arg_idx < nargs; ++arg_idx)
5803     {
5804       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5805       tree actual_parm = TREE_VALUE (parm);
5806
5807       if (packed_types && !PACK_EXPANSION_P (arg))
5808         {
5809           /* When we have a vector of types (corresponding to the
5810              non-type template parameter pack that uses parameter
5811              packs in its type, as mention above), and the
5812              argument is not an expansion (which expands to a
5813              currently unknown number of arguments), clone the
5814              parm and give it the next type in PACKED_TYPES.  */
5815           actual_parm = copy_node (actual_parm);
5816           TREE_TYPE (actual_parm) = 
5817             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5818         }
5819
5820       if (arg != error_mark_node)
5821         arg = convert_template_argument (actual_parm, 
5822                                          arg, new_args, complain, parm_idx,
5823                                          in_decl);
5824       if (arg == error_mark_node)
5825         (*lost)++;
5826       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5827     }
5828
5829   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5830       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5831     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
5832   else
5833     {
5834       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5835       TREE_TYPE (argument_pack) 
5836         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5837       TREE_CONSTANT (argument_pack) = 1;
5838     }
5839
5840   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5841 #ifdef ENABLE_CHECKING
5842   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
5843                                        TREE_VEC_LENGTH (packed_args));
5844 #endif
5845   return argument_pack;
5846 }
5847
5848 /* Convert all template arguments to their appropriate types, and
5849    return a vector containing the innermost resulting template
5850    arguments.  If any error occurs, return error_mark_node. Error and
5851    warning messages are issued under control of COMPLAIN.
5852
5853    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5854    for arguments not specified in ARGS.  Otherwise, if
5855    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5856    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5857    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5858    ARGS.  */
5859
5860 static tree
5861 coerce_template_parms (tree parms,
5862                        tree args,
5863                        tree in_decl,
5864                        tsubst_flags_t complain,
5865                        bool require_all_args,
5866                        bool use_default_args)
5867 {
5868   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5869   tree inner_args;
5870   tree new_args;
5871   tree new_inner_args;
5872   int saved_unevaluated_operand;
5873   int saved_inhibit_evaluation_warnings;
5874
5875   /* When used as a boolean value, indicates whether this is a
5876      variadic template parameter list. Since it's an int, we can also
5877      subtract it from nparms to get the number of non-variadic
5878      parameters.  */
5879   int variadic_p = 0;
5880
5881   nparms = TREE_VEC_LENGTH (parms);
5882
5883   /* Determine if there are any parameter packs.  */
5884   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5885     {
5886       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5887       if (template_parameter_pack_p (tparm))
5888         ++variadic_p;
5889     }
5890
5891   inner_args = INNERMOST_TEMPLATE_ARGS (args);
5892   /* If there are 0 or 1 parameter packs, we need to expand any argument
5893      packs so that we can deduce a parameter pack from some non-packed args
5894      followed by an argument pack, as in variadic85.C.  If there are more
5895      than that, we need to leave argument packs intact so the arguments are
5896      assigned to the right parameter packs.  This should only happen when
5897      dealing with a nested class inside a partial specialization of a class
5898      template, as in variadic92.C.  */
5899   if (variadic_p <= 1)
5900     inner_args = expand_template_argument_pack (inner_args);
5901
5902   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5903   if ((nargs > nparms && !variadic_p)
5904       || (nargs < nparms - variadic_p
5905           && require_all_args
5906           && (!use_default_args
5907               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5908                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5909     {
5910       if (complain & tf_error)
5911         {
5912           const char *or_more = "";
5913           if (variadic_p)
5914             {
5915               or_more = " or more";
5916               --nparms;
5917             }
5918
5919           error ("wrong number of template arguments (%d, should be %d%s)",
5920                  nargs, nparms, or_more);
5921
5922           if (in_decl)
5923             error ("provided for %q+D", in_decl);
5924         }
5925
5926       return error_mark_node;
5927     }
5928
5929   /* We need to evaluate the template arguments, even though this
5930      template-id may be nested within a "sizeof".  */
5931   saved_unevaluated_operand = cp_unevaluated_operand;
5932   cp_unevaluated_operand = 0;
5933   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
5934   c_inhibit_evaluation_warnings = 0;
5935   new_inner_args = make_tree_vec (nparms);
5936   new_args = add_outermost_template_args (args, new_inner_args);
5937   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5938     {
5939       tree arg;
5940       tree parm;
5941
5942       /* Get the Ith template parameter.  */
5943       parm = TREE_VEC_ELT (parms, parm_idx);
5944  
5945       if (parm == error_mark_node)
5946       {
5947         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5948         continue;
5949       }
5950
5951       /* Calculate the next argument.  */
5952       if (arg_idx < nargs)
5953         arg = TREE_VEC_ELT (inner_args, arg_idx);
5954       else
5955         arg = NULL_TREE;
5956
5957       if (template_parameter_pack_p (TREE_VALUE (parm))
5958           && !(arg && ARGUMENT_PACK_P (arg)))
5959         {
5960           /* All remaining arguments will be placed in the
5961              template parameter pack PARM.  */
5962           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5963                                                 inner_args, arg_idx,
5964                                                 new_args, &lost,
5965                                                 in_decl, complain);
5966
5967           /* Store this argument.  */
5968           if (arg == error_mark_node)
5969             lost++;
5970           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5971
5972           /* We are done with all of the arguments.  */
5973           arg_idx = nargs;
5974           
5975           continue;
5976         }
5977       else if (arg)
5978         {
5979           if (PACK_EXPANSION_P (arg))
5980             {
5981               if (complain & tf_error)
5982                 {
5983                   /* FIXME this restriction was removed by N2555; see
5984                      bug 35722.  */
5985                   /* If ARG is a pack expansion, but PARM is not a
5986                      template parameter pack (if it were, we would have
5987                      handled it above), we're trying to expand into a
5988                      fixed-length argument list.  */
5989                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5990                     sorry ("cannot expand %<%E%> into a fixed-length "
5991                            "argument list", arg);
5992                   else
5993                     sorry ("cannot expand %<%T%> into a fixed-length "
5994                            "argument list", arg);
5995                 }
5996               return error_mark_node;
5997             }
5998         }
5999       else if (require_all_args)
6000         {
6001           /* There must be a default arg in this case.  */
6002           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6003                                      complain, in_decl);
6004           /* The position of the first default template argument,
6005              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6006              Record that.  */
6007           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6008             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6009         }
6010       else
6011         break;
6012
6013       if (arg == error_mark_node)
6014         {
6015           if (complain & tf_error)
6016             error ("template argument %d is invalid", arg_idx + 1);
6017         }
6018       else if (!arg)
6019         /* This only occurs if there was an error in the template
6020            parameter list itself (which we would already have
6021            reported) that we are trying to recover from, e.g., a class
6022            template with a parameter list such as
6023            template<typename..., typename>.  */
6024         return error_mark_node;
6025       else
6026         arg = convert_template_argument (TREE_VALUE (parm),
6027                                          arg, new_args, complain, 
6028                                          parm_idx, in_decl);
6029
6030       if (arg == error_mark_node)
6031         lost++;
6032       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6033     }
6034   cp_unevaluated_operand = saved_unevaluated_operand;
6035   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6036
6037   if (lost)
6038     return error_mark_node;
6039
6040 #ifdef ENABLE_CHECKING
6041   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6042     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6043                                          TREE_VEC_LENGTH (new_inner_args));
6044 #endif
6045
6046   return new_inner_args;
6047 }
6048
6049 /* Returns 1 if template args OT and NT are equivalent.  */
6050
6051 static int
6052 template_args_equal (tree ot, tree nt)
6053 {
6054   if (nt == ot)
6055     return 1;
6056
6057   if (TREE_CODE (nt) == TREE_VEC)
6058     /* For member templates */
6059     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6060   else if (PACK_EXPANSION_P (ot))
6061     return PACK_EXPANSION_P (nt) 
6062       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6063                               PACK_EXPANSION_PATTERN (nt));
6064   else if (ARGUMENT_PACK_P (ot))
6065     {
6066       int i, len;
6067       tree opack, npack;
6068
6069       if (!ARGUMENT_PACK_P (nt))
6070         return 0;
6071
6072       opack = ARGUMENT_PACK_ARGS (ot);
6073       npack = ARGUMENT_PACK_ARGS (nt);
6074       len = TREE_VEC_LENGTH (opack);
6075       if (TREE_VEC_LENGTH (npack) != len)
6076         return 0;
6077       for (i = 0; i < len; ++i)
6078         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6079                                   TREE_VEC_ELT (npack, i)))
6080           return 0;
6081       return 1;
6082     }
6083   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6084     {
6085       /* We get here probably because we are in the middle of substituting
6086          into the pattern of a pack expansion. In that case the
6087          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6088          interested in. So we want to use the initial pack argument for
6089          the comparison.  */
6090       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6091       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6092         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6093       return template_args_equal (ot, nt);
6094     }
6095   else if (TYPE_P (nt))
6096     return TYPE_P (ot) && same_type_p (ot, nt);
6097   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6098     return 0;
6099   else
6100     return cp_tree_equal (ot, nt);
6101 }
6102
6103 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6104    of template arguments.  Returns 0 otherwise.  */
6105
6106 int
6107 comp_template_args (tree oldargs, tree newargs)
6108 {
6109   int i;
6110
6111   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6112     return 0;
6113
6114   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6115     {
6116       tree nt = TREE_VEC_ELT (newargs, i);
6117       tree ot = TREE_VEC_ELT (oldargs, i);
6118
6119       if (! template_args_equal (ot, nt))
6120         return 0;
6121     }
6122   return 1;
6123 }
6124
6125 static void
6126 add_pending_template (tree d)
6127 {
6128   tree ti = (TYPE_P (d)
6129              ? CLASSTYPE_TEMPLATE_INFO (d)
6130              : DECL_TEMPLATE_INFO (d));
6131   struct pending_template *pt;
6132   int level;
6133
6134   if (TI_PENDING_TEMPLATE_FLAG (ti))
6135     return;
6136
6137   /* We are called both from instantiate_decl, where we've already had a
6138      tinst_level pushed, and instantiate_template, where we haven't.
6139      Compensate.  */
6140   level = !current_tinst_level || current_tinst_level->decl != d;
6141
6142   if (level)
6143     push_tinst_level (d);
6144
6145   pt = GGC_NEW (struct pending_template);
6146   pt->next = NULL;
6147   pt->tinst = current_tinst_level;
6148   if (last_pending_template)
6149     last_pending_template->next = pt;
6150   else
6151     pending_templates = pt;
6152
6153   last_pending_template = pt;
6154
6155   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6156
6157   if (level)
6158     pop_tinst_level ();
6159 }
6160
6161
6162 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6163    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
6164    documentation for TEMPLATE_ID_EXPR.  */
6165
6166 tree
6167 lookup_template_function (tree fns, tree arglist)
6168 {
6169   tree type;
6170
6171   if (fns == error_mark_node || arglist == error_mark_node)
6172     return error_mark_node;
6173
6174   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6175   gcc_assert (fns && (is_overloaded_fn (fns)
6176                       || TREE_CODE (fns) == IDENTIFIER_NODE));
6177
6178   if (BASELINK_P (fns))
6179     {
6180       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6181                                          unknown_type_node,
6182                                          BASELINK_FUNCTIONS (fns),
6183                                          arglist);
6184       return fns;
6185     }
6186
6187   type = TREE_TYPE (fns);
6188   if (TREE_CODE (fns) == OVERLOAD || !type)
6189     type = unknown_type_node;
6190
6191   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6192 }
6193
6194 /* Within the scope of a template class S<T>, the name S gets bound
6195    (in build_self_reference) to a TYPE_DECL for the class, not a
6196    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
6197    or one of its enclosing classes, and that type is a template,
6198    return the associated TEMPLATE_DECL.  Otherwise, the original
6199    DECL is returned.
6200
6201    Also handle the case when DECL is a TREE_LIST of ambiguous
6202    injected-class-names from different bases.  */
6203
6204 tree
6205 maybe_get_template_decl_from_type_decl (tree decl)
6206 {
6207   if (decl == NULL_TREE)
6208     return decl;
6209
6210   /* DR 176: A lookup that finds an injected-class-name (10.2
6211      [class.member.lookup]) can result in an ambiguity in certain cases
6212      (for example, if it is found in more than one base class). If all of
6213      the injected-class-names that are found refer to specializations of
6214      the same class template, and if the name is followed by a
6215      template-argument-list, the reference refers to the class template
6216      itself and not a specialization thereof, and is not ambiguous.  */
6217   if (TREE_CODE (decl) == TREE_LIST)
6218     {
6219       tree t, tmpl = NULL_TREE;
6220       for (t = decl; t; t = TREE_CHAIN (t))
6221         {
6222           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
6223           if (!tmpl)
6224             tmpl = elt;
6225           else if (tmpl != elt)
6226             break;
6227         }
6228       if (tmpl && t == NULL_TREE)
6229         return tmpl;
6230       else
6231         return decl;
6232     }
6233
6234   return (decl != NULL_TREE
6235           && DECL_SELF_REFERENCE_P (decl)
6236           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
6237     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
6238 }
6239
6240 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
6241    parameters, find the desired type.
6242
6243    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
6244
6245    IN_DECL, if non-NULL, is the template declaration we are trying to
6246    instantiate.
6247
6248    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
6249    the class we are looking up.
6250
6251    Issue error and warning messages under control of COMPLAIN.
6252
6253    If the template class is really a local class in a template
6254    function, then the FUNCTION_CONTEXT is the function in which it is
6255    being instantiated.
6256
6257    ??? Note that this function is currently called *twice* for each
6258    template-id: the first time from the parser, while creating the
6259    incomplete type (finish_template_type), and the second type during the
6260    real instantiation (instantiate_template_class). This is surely something
6261    that we want to avoid. It also causes some problems with argument
6262    coercion (see convert_nontype_argument for more information on this).  */
6263
6264 tree
6265 lookup_template_class (tree d1,
6266                        tree arglist,
6267                        tree in_decl,
6268                        tree context,
6269                        int entering_scope,
6270                        tsubst_flags_t complain)
6271 {
6272   tree templ = NULL_TREE, parmlist;
6273   tree t;
6274   spec_entry **slot;
6275   spec_entry *entry;
6276   spec_entry elt;
6277   hashval_t hash;
6278
6279   timevar_push (TV_NAME_LOOKUP);
6280
6281   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6282     {
6283       tree value = innermost_non_namespace_value (d1);
6284       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6285         templ = value;
6286       else
6287         {
6288           if (context)
6289             push_decl_namespace (context);
6290           templ = lookup_name (d1);
6291           templ = maybe_get_template_decl_from_type_decl (templ);
6292           if (context)
6293             pop_decl_namespace ();
6294         }
6295       if (templ)
6296         context = DECL_CONTEXT (templ);
6297     }
6298   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6299     {
6300       tree type = TREE_TYPE (d1);
6301
6302       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6303          an implicit typename for the second A.  Deal with it.  */
6304       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6305         type = TREE_TYPE (type);
6306
6307       if (CLASSTYPE_TEMPLATE_INFO (type))
6308         {
6309           templ = CLASSTYPE_TI_TEMPLATE (type);
6310           d1 = DECL_NAME (templ);
6311         }
6312     }
6313   else if (TREE_CODE (d1) == ENUMERAL_TYPE
6314            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
6315     {
6316       templ = TYPE_TI_TEMPLATE (d1);
6317       d1 = DECL_NAME (templ);
6318     }
6319   else if (TREE_CODE (d1) == TEMPLATE_DECL
6320            && DECL_TEMPLATE_RESULT (d1)
6321            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
6322     {
6323       templ = d1;
6324       d1 = DECL_NAME (templ);
6325       context = DECL_CONTEXT (templ);
6326     }
6327
6328   /* Issue an error message if we didn't find a template.  */
6329   if (! templ)
6330     {
6331       if (complain & tf_error)
6332         error ("%qT is not a template", d1);
6333       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6334     }
6335
6336   if (TREE_CODE (templ) != TEMPLATE_DECL
6337          /* Make sure it's a user visible template, if it was named by
6338             the user.  */
6339       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
6340           && !PRIMARY_TEMPLATE_P (templ)))
6341     {
6342       if (complain & tf_error)
6343         {
6344           error ("non-template type %qT used as a template", d1);
6345           if (in_decl)
6346             error ("for template declaration %q+D", in_decl);
6347         }
6348       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6349     }
6350
6351   complain &= ~tf_user;
6352
6353   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
6354     {
6355       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
6356          template arguments */
6357
6358       tree parm;
6359       tree arglist2;
6360       tree outer;
6361
6362       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
6363
6364       /* Consider an example where a template template parameter declared as
6365
6366            template <class T, class U = std::allocator<T> > class TT
6367
6368          The template parameter level of T and U are one level larger than
6369          of TT.  To proper process the default argument of U, say when an
6370          instantiation `TT<int>' is seen, we need to build the full
6371          arguments containing {int} as the innermost level.  Outer levels,
6372          available when not appearing as default template argument, can be
6373          obtained from the arguments of the enclosing template.
6374
6375          Suppose that TT is later substituted with std::vector.  The above
6376          instantiation is `TT<int, std::allocator<T> >' with TT at
6377          level 1, and T at level 2, while the template arguments at level 1
6378          becomes {std::vector} and the inner level 2 is {int}.  */
6379
6380       outer = DECL_CONTEXT (templ);
6381       if (outer)
6382         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
6383       else if (current_template_parms)
6384         /* This is an argument of the current template, so we haven't set
6385            DECL_CONTEXT yet.  */
6386         outer = current_template_args ();
6387
6388       if (outer)
6389         arglist = add_to_template_args (outer, arglist);
6390
6391       arglist2 = coerce_template_parms (parmlist, arglist, templ,
6392                                         complain,
6393                                         /*require_all_args=*/true,
6394                                         /*use_default_args=*/true);
6395       if (arglist2 == error_mark_node
6396           || (!uses_template_parms (arglist2)
6397               && check_instantiated_args (templ, arglist2, complain)))
6398         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6399
6400       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
6401       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
6402     }
6403   else
6404     {
6405       tree template_type = TREE_TYPE (templ);
6406       tree gen_tmpl;
6407       tree type_decl;
6408       tree found = NULL_TREE;
6409       int arg_depth;
6410       int parm_depth;
6411       int is_dependent_type;
6412       int use_partial_inst_tmpl = false;
6413
6414       gen_tmpl = most_general_template (templ);
6415       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
6416       parm_depth = TMPL_PARMS_DEPTH (parmlist);
6417       arg_depth = TMPL_ARGS_DEPTH (arglist);
6418
6419       if (arg_depth == 1 && parm_depth > 1)
6420         {
6421           /* We've been given an incomplete set of template arguments.
6422              For example, given:
6423
6424                template <class T> struct S1 {
6425                  template <class U> struct S2 {};
6426                  template <class U> struct S2<U*> {};
6427                 };
6428
6429              we will be called with an ARGLIST of `U*', but the
6430              TEMPLATE will be `template <class T> template
6431              <class U> struct S1<T>::S2'.  We must fill in the missing
6432              arguments.  */
6433           arglist
6434             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
6435                                            arglist);
6436           arg_depth = TMPL_ARGS_DEPTH (arglist);
6437         }
6438
6439       /* Now we should have enough arguments.  */
6440       gcc_assert (parm_depth == arg_depth);
6441
6442       /* From here on, we're only interested in the most general
6443          template.  */
6444
6445       /* Calculate the BOUND_ARGS.  These will be the args that are
6446          actually tsubst'd into the definition to create the
6447          instantiation.  */
6448       if (parm_depth > 1)
6449         {
6450           /* We have multiple levels of arguments to coerce, at once.  */
6451           int i;
6452           int saved_depth = TMPL_ARGS_DEPTH (arglist);
6453
6454           tree bound_args = make_tree_vec (parm_depth);
6455
6456           for (i = saved_depth,
6457                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
6458                i > 0 && t != NULL_TREE;
6459                --i, t = TREE_CHAIN (t))
6460             {
6461               tree a = coerce_template_parms (TREE_VALUE (t),
6462                                               arglist, gen_tmpl,
6463                                               complain,
6464                                               /*require_all_args=*/true,
6465                                               /*use_default_args=*/true);
6466
6467               /* Don't process further if one of the levels fails.  */
6468               if (a == error_mark_node)
6469                 {
6470                   /* Restore the ARGLIST to its full size.  */
6471                   TREE_VEC_LENGTH (arglist) = saved_depth;
6472                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6473                 }
6474
6475               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
6476
6477               /* We temporarily reduce the length of the ARGLIST so
6478                  that coerce_template_parms will see only the arguments
6479                  corresponding to the template parameters it is
6480                  examining.  */
6481               TREE_VEC_LENGTH (arglist)--;
6482             }
6483
6484           /* Restore the ARGLIST to its full size.  */
6485           TREE_VEC_LENGTH (arglist) = saved_depth;
6486
6487           arglist = bound_args;
6488         }
6489       else
6490         arglist
6491           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
6492                                    INNERMOST_TEMPLATE_ARGS (arglist),
6493                                    gen_tmpl,
6494                                    complain,
6495                                    /*require_all_args=*/true,
6496                                    /*use_default_args=*/true);
6497
6498       if (arglist == error_mark_node)
6499         /* We were unable to bind the arguments.  */
6500         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6501
6502       /* In the scope of a template class, explicit references to the
6503          template class refer to the type of the template, not any
6504          instantiation of it.  For example, in:
6505
6506            template <class T> class C { void f(C<T>); }
6507
6508          the `C<T>' is just the same as `C'.  Outside of the
6509          class, however, such a reference is an instantiation.  */
6510       if ((entering_scope
6511            || !PRIMARY_TEMPLATE_P (gen_tmpl)
6512            || currently_open_class (template_type))
6513           /* comp_template_args is expensive, check it last.  */
6514           && comp_template_args (TYPE_TI_ARGS (template_type),
6515                                  arglist))
6516         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, template_type);
6517
6518       /* If we already have this specialization, return it.  */
6519       elt.tmpl = gen_tmpl;
6520       elt.args = arglist;
6521       hash = hash_specialization (&elt);
6522       entry = (spec_entry *) htab_find_with_hash (type_specializations,
6523                                                   &elt, hash);
6524
6525       if (entry)
6526         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, entry->spec);
6527
6528       is_dependent_type = uses_template_parms (arglist);
6529
6530       /* If the deduced arguments are invalid, then the binding
6531          failed.  */
6532       if (!is_dependent_type
6533           && check_instantiated_args (gen_tmpl,
6534                                       INNERMOST_TEMPLATE_ARGS (arglist),
6535                                       complain))
6536         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6537
6538       if (!is_dependent_type
6539           && !PRIMARY_TEMPLATE_P (gen_tmpl)
6540           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
6541           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
6542         {
6543           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
6544                                       DECL_NAME (gen_tmpl),
6545                                       /*tag_scope=*/ts_global);
6546           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
6547         }
6548
6549       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
6550                         complain, in_decl);
6551       if (!context)
6552         context = global_namespace;
6553
6554       /* Create the type.  */
6555       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
6556         {
6557           if (!is_dependent_type)
6558             {
6559               set_current_access_from_decl (TYPE_NAME (template_type));
6560               t = start_enum (TYPE_IDENTIFIER (template_type),
6561                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
6562                                       arglist, complain, in_decl),
6563                               SCOPED_ENUM_P (template_type));
6564             }
6565           else
6566             {
6567               /* We don't want to call start_enum for this type, since
6568                  the values for the enumeration constants may involve
6569                  template parameters.  And, no one should be interested
6570                  in the enumeration constants for such a type.  */
6571               t = cxx_make_type (ENUMERAL_TYPE);
6572               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
6573             }
6574         }
6575       else
6576         {
6577           t = make_class_type (TREE_CODE (template_type));
6578           CLASSTYPE_DECLARED_CLASS (t)
6579             = CLASSTYPE_DECLARED_CLASS (template_type);
6580           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
6581           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
6582
6583           /* A local class.  Make sure the decl gets registered properly.  */
6584           if (context == current_function_decl)
6585             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
6586
6587           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
6588             /* This instantiation is another name for the primary
6589                template type. Set the TYPE_CANONICAL field
6590                appropriately. */
6591             TYPE_CANONICAL (t) = template_type;
6592           else if (any_template_arguments_need_structural_equality_p (arglist))
6593             /* Some of the template arguments require structural
6594                equality testing, so this template class requires
6595                structural equality testing. */
6596             SET_TYPE_STRUCTURAL_EQUALITY (t);
6597         }
6598
6599       /* If we called start_enum or pushtag above, this information
6600          will already be set up.  */
6601       if (!TYPE_NAME (t))
6602         {
6603           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
6604
6605           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
6606           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
6607           DECL_SOURCE_LOCATION (type_decl)
6608             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
6609         }
6610       else
6611         type_decl = TYPE_NAME (t);
6612
6613       TREE_PRIVATE (type_decl)
6614         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
6615       TREE_PROTECTED (type_decl)
6616         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
6617       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
6618         {
6619           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
6620           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
6621         }
6622
6623       /* Let's consider the explicit specialization of a member
6624          of a class template specialization that is implicitely instantiated,
6625          e.g.:
6626              template<class T>
6627              struct S
6628              {
6629                template<class U> struct M {}; //#0
6630              };
6631
6632              template<>
6633              template<>
6634              struct S<int>::M<char> //#1
6635              {
6636                int i;
6637              };
6638         [temp.expl.spec]/4 says this is valid.
6639
6640         In this case, when we write:
6641         S<int>::M<char> m;
6642
6643         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
6644         the one of #0.
6645
6646         When we encounter #1, we want to store the partial instantiation
6647         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
6648
6649         For all cases other than this "explicit specialization of member of a
6650         class template", we just want to store the most general template into
6651         the CLASSTYPE_TI_TEMPLATE of M.
6652
6653         This case of "explicit specialization of member of a class template"
6654         only happens when:
6655         1/ the enclosing class is an instantiation of, and therefore not
6656         the same as, the context of the most general template, and
6657         2/ we aren't looking at the partial instantiation itself, i.e.
6658         the innermost arguments are not the same as the innermost parms of
6659         the most general template.
6660
6661         So it's only when 1/ and 2/ happens that we want to use the partial
6662         instantiation of the member template in lieu of its most general
6663         template.  */
6664
6665       if (PRIMARY_TEMPLATE_P (gen_tmpl)
6666           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
6667           /* the enclosing class must be an instantiation...  */
6668           && CLASS_TYPE_P (context)
6669           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
6670         {
6671           tree partial_inst_args;
6672           TREE_VEC_LENGTH (arglist)--;
6673           ++processing_template_decl;
6674           partial_inst_args =
6675             tsubst (INNERMOST_TEMPLATE_ARGS
6676                         (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
6677                     arglist, complain, NULL_TREE);
6678           --processing_template_decl;
6679           TREE_VEC_LENGTH (arglist)++;
6680           use_partial_inst_tmpl =
6681             /*...and we must not be looking at the partial instantiation
6682              itself. */
6683             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
6684                                  partial_inst_args);
6685         }
6686
6687       if (!use_partial_inst_tmpl)
6688         /* This case is easy; there are no member templates involved.  */
6689         found = gen_tmpl;
6690       else
6691         {
6692           /* This is a full instantiation of a member template.  Find
6693              the partial instantiation of which this is an instance.  */
6694
6695           /* Temporarily reduce by one the number of levels in the ARGLIST
6696              so as to avoid comparing the last set of arguments.  */
6697           TREE_VEC_LENGTH (arglist)--;
6698           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
6699           TREE_VEC_LENGTH (arglist)++;
6700           found = CLASSTYPE_TI_TEMPLATE (found);
6701         }
6702
6703       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
6704
6705       elt.spec = t;
6706       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
6707                                                        &elt, hash, INSERT);
6708       *slot = GGC_NEW (spec_entry);
6709       **slot = elt;
6710
6711       /* Note this use of the partial instantiation so we can check it
6712          later in maybe_process_partial_specialization.  */
6713       DECL_TEMPLATE_INSTANTIATIONS (templ)
6714         = tree_cons (arglist, t,
6715                      DECL_TEMPLATE_INSTANTIATIONS (templ));
6716
6717       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
6718         /* Now that the type has been registered on the instantiations
6719            list, we set up the enumerators.  Because the enumeration
6720            constants may involve the enumeration type itself, we make
6721            sure to register the type first, and then create the
6722            constants.  That way, doing tsubst_expr for the enumeration
6723            constants won't result in recursive calls here; we'll find
6724            the instantiation and exit above.  */
6725         tsubst_enum (template_type, t, arglist);
6726
6727       if (is_dependent_type)
6728         /* If the type makes use of template parameters, the
6729            code that generates debugging information will crash.  */
6730         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
6731
6732       /* Possibly limit visibility based on template args.  */
6733       TREE_PUBLIC (type_decl) = 1;
6734       determine_visibility (type_decl);
6735
6736       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
6737     }
6738   timevar_pop (TV_NAME_LOOKUP);
6739 }
6740 \f
6741 struct pair_fn_data
6742 {
6743   tree_fn_t fn;
6744   void *data;
6745   /* True when we should also visit template parameters that occur in
6746      non-deduced contexts.  */
6747   bool include_nondeduced_p;
6748   struct pointer_set_t *visited;
6749 };
6750
6751 /* Called from for_each_template_parm via walk_tree.  */
6752
6753 static tree
6754 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6755 {
6756   tree t = *tp;
6757   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6758   tree_fn_t fn = pfd->fn;
6759   void *data = pfd->data;
6760
6761   if (TYPE_P (t)
6762       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6763       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6764                                  pfd->include_nondeduced_p))
6765     return error_mark_node;
6766
6767   switch (TREE_CODE (t))
6768     {
6769     case RECORD_TYPE:
6770       if (TYPE_PTRMEMFUNC_P (t))
6771         break;
6772       /* Fall through.  */
6773
6774     case UNION_TYPE:
6775     case ENUMERAL_TYPE:
6776       if (!TYPE_TEMPLATE_INFO (t))
6777         *walk_subtrees = 0;
6778       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
6779                                        fn, data, pfd->visited, 
6780                                        pfd->include_nondeduced_p))
6781         return error_mark_node;
6782       break;
6783
6784     case INTEGER_TYPE:
6785       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6786                                   fn, data, pfd->visited, 
6787                                   pfd->include_nondeduced_p)
6788           || for_each_template_parm (TYPE_MAX_VALUE (t),
6789                                      fn, data, pfd->visited,
6790                                      pfd->include_nondeduced_p))
6791         return error_mark_node;
6792       break;
6793
6794     case METHOD_TYPE:
6795       /* Since we're not going to walk subtrees, we have to do this
6796          explicitly here.  */
6797       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6798                                   pfd->visited, pfd->include_nondeduced_p))
6799         return error_mark_node;
6800       /* Fall through.  */
6801
6802     case FUNCTION_TYPE:
6803       /* Check the return type.  */
6804       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6805                                   pfd->include_nondeduced_p))
6806         return error_mark_node;
6807
6808       /* Check the parameter types.  Since default arguments are not
6809          instantiated until they are needed, the TYPE_ARG_TYPES may
6810          contain expressions that involve template parameters.  But,
6811          no-one should be looking at them yet.  And, once they're
6812          instantiated, they don't contain template parameters, so
6813          there's no point in looking at them then, either.  */
6814       {
6815         tree parm;
6816
6817         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6818           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6819                                       pfd->visited, pfd->include_nondeduced_p))
6820             return error_mark_node;
6821
6822         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6823            want walk_tree walking into them itself.  */
6824         *walk_subtrees = 0;
6825       }
6826       break;
6827
6828     case TYPEOF_TYPE:
6829       if (pfd->include_nondeduced_p
6830           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6831                                      pfd->visited, 
6832                                      pfd->include_nondeduced_p))
6833         return error_mark_node;
6834       break;
6835
6836     case FUNCTION_DECL:
6837     case VAR_DECL:
6838       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6839           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6840                                      pfd->visited, pfd->include_nondeduced_p))
6841         return error_mark_node;
6842       /* Fall through.  */
6843
6844     case PARM_DECL:
6845     case CONST_DECL:
6846       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6847           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6848                                      pfd->visited, pfd->include_nondeduced_p))
6849         return error_mark_node;
6850       if (DECL_CONTEXT (t)
6851           && pfd->include_nondeduced_p
6852           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6853                                      pfd->visited, pfd->include_nondeduced_p))
6854         return error_mark_node;
6855       break;
6856
6857     case BOUND_TEMPLATE_TEMPLATE_PARM:
6858       /* Record template parameters such as `T' inside `TT<T>'.  */
6859       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6860                                   pfd->include_nondeduced_p))
6861         return error_mark_node;
6862       /* Fall through.  */
6863
6864     case TEMPLATE_TEMPLATE_PARM:
6865     case TEMPLATE_TYPE_PARM:
6866     case TEMPLATE_PARM_INDEX:
6867       if (fn && (*fn)(t, data))
6868         return error_mark_node;
6869       else if (!fn)
6870         return error_mark_node;
6871       break;
6872
6873     case TEMPLATE_DECL:
6874       /* A template template parameter is encountered.  */
6875       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6876           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6877                                      pfd->include_nondeduced_p))
6878         return error_mark_node;
6879
6880       /* Already substituted template template parameter */
6881       *walk_subtrees = 0;
6882       break;
6883
6884     case TYPENAME_TYPE:
6885       if (!fn
6886           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6887                                      data, pfd->visited, 
6888                                      pfd->include_nondeduced_p))
6889         return error_mark_node;
6890       break;
6891
6892     case CONSTRUCTOR:
6893       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6894           && pfd->include_nondeduced_p
6895           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6896                                      (TREE_TYPE (t)), fn, data,
6897                                      pfd->visited, pfd->include_nondeduced_p))
6898         return error_mark_node;
6899       break;
6900
6901     case INDIRECT_REF:
6902     case COMPONENT_REF:
6903       /* If there's no type, then this thing must be some expression
6904          involving template parameters.  */
6905       if (!fn && !TREE_TYPE (t))
6906         return error_mark_node;
6907       break;
6908
6909     case MODOP_EXPR:
6910     case CAST_EXPR:
6911     case REINTERPRET_CAST_EXPR:
6912     case CONST_CAST_EXPR:
6913     case STATIC_CAST_EXPR:
6914     case DYNAMIC_CAST_EXPR:
6915     case ARROW_EXPR:
6916     case DOTSTAR_EXPR:
6917     case TYPEID_EXPR:
6918     case PSEUDO_DTOR_EXPR:
6919       if (!fn)
6920         return error_mark_node;
6921       break;
6922
6923     default:
6924       break;
6925     }
6926
6927   /* We didn't find any template parameters we liked.  */
6928   return NULL_TREE;
6929 }
6930
6931 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6932    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6933    call FN with the parameter and the DATA.
6934    If FN returns nonzero, the iteration is terminated, and
6935    for_each_template_parm returns 1.  Otherwise, the iteration
6936    continues.  If FN never returns a nonzero value, the value
6937    returned by for_each_template_parm is 0.  If FN is NULL, it is
6938    considered to be the function which always returns 1.
6939
6940    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6941    parameters that occur in non-deduced contexts.  When false, only
6942    visits those template parameters that can be deduced.  */
6943
6944 static int
6945 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6946                         struct pointer_set_t *visited,
6947                         bool include_nondeduced_p)
6948 {
6949   struct pair_fn_data pfd;
6950   int result;
6951
6952   /* Set up.  */
6953   pfd.fn = fn;
6954   pfd.data = data;
6955   pfd.include_nondeduced_p = include_nondeduced_p;
6956
6957   /* Walk the tree.  (Conceptually, we would like to walk without
6958      duplicates, but for_each_template_parm_r recursively calls
6959      for_each_template_parm, so we would need to reorganize a fair
6960      bit to use walk_tree_without_duplicates, so we keep our own
6961      visited list.)  */
6962   if (visited)
6963     pfd.visited = visited;
6964   else
6965     pfd.visited = pointer_set_create ();
6966   result = cp_walk_tree (&t,
6967                          for_each_template_parm_r,
6968                          &pfd,
6969                          pfd.visited) != NULL_TREE;
6970
6971   /* Clean up.  */
6972   if (!visited)
6973     {
6974       pointer_set_destroy (pfd.visited);
6975       pfd.visited = 0;
6976     }
6977
6978   return result;
6979 }
6980
6981 /* Returns true if T depends on any template parameter.  */
6982
6983 int
6984 uses_template_parms (tree t)
6985 {
6986   bool dependent_p;
6987   int saved_processing_template_decl;
6988
6989   saved_processing_template_decl = processing_template_decl;
6990   if (!saved_processing_template_decl)
6991     processing_template_decl = 1;
6992   if (TYPE_P (t))
6993     dependent_p = dependent_type_p (t);
6994   else if (TREE_CODE (t) == TREE_VEC)
6995     dependent_p = any_dependent_template_arguments_p (t);
6996   else if (TREE_CODE (t) == TREE_LIST)
6997     dependent_p = (uses_template_parms (TREE_VALUE (t))
6998                    || uses_template_parms (TREE_CHAIN (t)));
6999   else if (TREE_CODE (t) == TYPE_DECL)
7000     dependent_p = dependent_type_p (TREE_TYPE (t));
7001   else if (DECL_P (t)
7002            || EXPR_P (t)
7003            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7004            || TREE_CODE (t) == OVERLOAD
7005            || TREE_CODE (t) == BASELINK
7006            || TREE_CODE (t) == IDENTIFIER_NODE
7007            || TREE_CODE (t) == TRAIT_EXPR
7008            || TREE_CODE (t) == CONSTRUCTOR
7009            || CONSTANT_CLASS_P (t))
7010     dependent_p = (type_dependent_expression_p (t)
7011                    || value_dependent_expression_p (t));
7012   else
7013     {
7014       gcc_assert (t == error_mark_node);
7015       dependent_p = false;
7016     }
7017
7018   processing_template_decl = saved_processing_template_decl;
7019
7020   return dependent_p;
7021 }
7022
7023 /* Returns true if T depends on any template parameter with level LEVEL.  */
7024
7025 int
7026 uses_template_parms_level (tree t, int level)
7027 {
7028   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7029                                  /*include_nondeduced_p=*/true);
7030 }
7031
7032 static int tinst_depth;
7033 extern int max_tinst_depth;
7034 #ifdef GATHER_STATISTICS
7035 int depth_reached;
7036 #endif
7037 static int tinst_level_tick;
7038 static int last_template_error_tick;
7039
7040 /* We're starting to instantiate D; record the template instantiation context
7041    for diagnostics and to restore it later.  */
7042
7043 int
7044 push_tinst_level (tree d)
7045 {
7046   struct tinst_level *new_level;
7047
7048   if (tinst_depth >= max_tinst_depth)
7049     {
7050       /* If the instantiation in question still has unbound template parms,
7051          we don't really care if we can't instantiate it, so just return.
7052          This happens with base instantiation for implicit `typename'.  */
7053       if (uses_template_parms (d))
7054         return 0;
7055
7056       last_template_error_tick = tinst_level_tick;
7057       error ("template instantiation depth exceeds maximum of %d (use "
7058              "-ftemplate-depth= to increase the maximum) instantiating %qD",
7059              max_tinst_depth, d);
7060
7061       print_instantiation_context ();
7062
7063       return 0;
7064     }
7065
7066   new_level = GGC_NEW (struct tinst_level);
7067   new_level->decl = d;
7068   new_level->locus = input_location;
7069   new_level->in_system_header_p = in_system_header;
7070   new_level->next = current_tinst_level;
7071   current_tinst_level = new_level;
7072
7073   ++tinst_depth;
7074 #ifdef GATHER_STATISTICS
7075   if (tinst_depth > depth_reached)
7076     depth_reached = tinst_depth;
7077 #endif
7078
7079   ++tinst_level_tick;
7080   return 1;
7081 }
7082
7083 /* We're done instantiating this template; return to the instantiation
7084    context.  */
7085
7086 void
7087 pop_tinst_level (void)
7088 {
7089   /* Restore the filename and line number stashed away when we started
7090      this instantiation.  */
7091   input_location = current_tinst_level->locus;
7092   current_tinst_level = current_tinst_level->next;
7093   --tinst_depth;
7094   ++tinst_level_tick;
7095 }
7096
7097 /* We're instantiating a deferred template; restore the template
7098    instantiation context in which the instantiation was requested, which
7099    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7100
7101 static tree
7102 reopen_tinst_level (struct tinst_level *level)
7103 {
7104   struct tinst_level *t;
7105
7106   tinst_depth = 0;
7107   for (t = level; t; t = t->next)
7108     ++tinst_depth;
7109
7110   current_tinst_level = level;
7111   pop_tinst_level ();
7112   return level->decl;
7113 }
7114
7115 /* Returns the TINST_LEVEL which gives the original instantiation
7116    context.  */
7117
7118 struct tinst_level *
7119 outermost_tinst_level (void)
7120 {
7121   struct tinst_level *level = current_tinst_level;
7122   if (level)
7123     while (level->next)
7124       level = level->next;
7125   return level;
7126 }
7127
7128 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
7129
7130 bool
7131 parameter_of_template_p (tree parm, tree templ)
7132 {
7133   tree parms;
7134   int i;
7135
7136   if (!parm || !templ)
7137     return false;
7138
7139   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7140   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7141
7142   parms = DECL_TEMPLATE_PARMS (templ);
7143   parms = INNERMOST_TEMPLATE_PARMS (parms);
7144
7145   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7146     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
7147       return true;
7148
7149   return false;
7150 }
7151
7152 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
7153    vector of template arguments, as for tsubst.
7154
7155    Returns an appropriate tsubst'd friend declaration.  */
7156
7157 static tree
7158 tsubst_friend_function (tree decl, tree args)
7159 {
7160   tree new_friend;
7161
7162   if (TREE_CODE (decl) == FUNCTION_DECL
7163       && DECL_TEMPLATE_INSTANTIATION (decl)
7164       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7165     /* This was a friend declared with an explicit template
7166        argument list, e.g.:
7167
7168        friend void f<>(T);
7169
7170        to indicate that f was a template instantiation, not a new
7171        function declaration.  Now, we have to figure out what
7172        instantiation of what template.  */
7173     {
7174       tree template_id, arglist, fns;
7175       tree new_args;
7176       tree tmpl;
7177       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7178
7179       /* Friend functions are looked up in the containing namespace scope.
7180          We must enter that scope, to avoid finding member functions of the
7181          current class with same name.  */
7182       push_nested_namespace (ns);
7183       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7184                          tf_warning_or_error, NULL_TREE,
7185                          /*integral_constant_expression_p=*/false);
7186       pop_nested_namespace (ns);
7187       arglist = tsubst (DECL_TI_ARGS (decl), args,
7188                         tf_warning_or_error, NULL_TREE);
7189       template_id = lookup_template_function (fns, arglist);
7190
7191       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7192       tmpl = determine_specialization (template_id, new_friend,
7193                                        &new_args,
7194                                        /*need_member_template=*/0,
7195                                        TREE_VEC_LENGTH (args),
7196                                        tsk_none);
7197       return instantiate_template (tmpl, new_args, tf_error);
7198     }
7199
7200   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7201
7202   /* The NEW_FRIEND will look like an instantiation, to the
7203      compiler, but is not an instantiation from the point of view of
7204      the language.  For example, we might have had:
7205
7206      template <class T> struct S {
7207        template <class U> friend void f(T, U);
7208      };
7209
7210      Then, in S<int>, template <class U> void f(int, U) is not an
7211      instantiation of anything.  */
7212   if (new_friend == error_mark_node)
7213     return error_mark_node;
7214
7215   DECL_USE_TEMPLATE (new_friend) = 0;
7216   if (TREE_CODE (decl) == TEMPLATE_DECL)
7217     {
7218       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7219       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7220         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7221     }
7222
7223   /* The mangled name for the NEW_FRIEND is incorrect.  The function
7224      is not a template instantiation and should not be mangled like
7225      one.  Therefore, we forget the mangling here; we'll recompute it
7226      later if we need it.  */
7227   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7228     {
7229       SET_DECL_RTL (new_friend, NULL_RTX);
7230       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7231     }
7232
7233   if (DECL_NAMESPACE_SCOPE_P (new_friend))
7234     {
7235       tree old_decl;
7236       tree new_friend_template_info;
7237       tree new_friend_result_template_info;
7238       tree ns;
7239       int  new_friend_is_defn;
7240
7241       /* We must save some information from NEW_FRIEND before calling
7242          duplicate decls since that function will free NEW_FRIEND if
7243          possible.  */
7244       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7245       new_friend_is_defn =
7246             (DECL_INITIAL (DECL_TEMPLATE_RESULT
7247                            (template_for_substitution (new_friend)))
7248              != NULL_TREE);
7249       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
7250         {
7251           /* This declaration is a `primary' template.  */
7252           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
7253
7254           new_friend_result_template_info
7255             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
7256         }
7257       else
7258         new_friend_result_template_info = NULL_TREE;
7259
7260       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
7261       if (new_friend_is_defn)
7262         DECL_INITIAL (new_friend) = error_mark_node;
7263
7264       /* Inside pushdecl_namespace_level, we will push into the
7265          current namespace. However, the friend function should go
7266          into the namespace of the template.  */
7267       ns = decl_namespace_context (new_friend);
7268       push_nested_namespace (ns);
7269       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
7270       pop_nested_namespace (ns);
7271
7272       if (old_decl == error_mark_node)
7273         return error_mark_node;
7274
7275       if (old_decl != new_friend)
7276         {
7277           /* This new friend declaration matched an existing
7278              declaration.  For example, given:
7279
7280                template <class T> void f(T);
7281                template <class U> class C {
7282                  template <class T> friend void f(T) {}
7283                };
7284
7285              the friend declaration actually provides the definition
7286              of `f', once C has been instantiated for some type.  So,
7287              old_decl will be the out-of-class template declaration,
7288              while new_friend is the in-class definition.
7289
7290              But, if `f' was called before this point, the
7291              instantiation of `f' will have DECL_TI_ARGS corresponding
7292              to `T' but not to `U', references to which might appear
7293              in the definition of `f'.  Previously, the most general
7294              template for an instantiation of `f' was the out-of-class
7295              version; now it is the in-class version.  Therefore, we
7296              run through all specialization of `f', adding to their
7297              DECL_TI_ARGS appropriately.  In particular, they need a
7298              new set of outer arguments, corresponding to the
7299              arguments for this class instantiation.
7300
7301              The same situation can arise with something like this:
7302
7303                friend void f(int);
7304                template <class T> class C {
7305                  friend void f(T) {}
7306                };
7307
7308              when `C<int>' is instantiated.  Now, `f(int)' is defined
7309              in the class.  */
7310
7311           if (!new_friend_is_defn)
7312             /* On the other hand, if the in-class declaration does
7313                *not* provide a definition, then we don't want to alter
7314                existing definitions.  We can just leave everything
7315                alone.  */
7316             ;
7317           else
7318             {
7319               tree new_template = TI_TEMPLATE (new_friend_template_info);
7320               tree new_args = TI_ARGS (new_friend_template_info);
7321
7322               /* Overwrite whatever template info was there before, if
7323                  any, with the new template information pertaining to
7324                  the declaration.  */
7325               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
7326
7327               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
7328                 /* We should have called reregister_specialization in
7329                    duplicate_decls.  */
7330                 gcc_assert (retrieve_specialization (new_template,
7331                                                      new_args, 0)
7332                             == old_decl);
7333               else
7334                 {
7335                   tree t;
7336
7337                   /* Indicate that the old function template is a partial
7338                      instantiation.  */
7339                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
7340                     = new_friend_result_template_info;
7341
7342                   gcc_assert (new_template
7343                               == most_general_template (new_template));
7344                   gcc_assert (new_template != old_decl);
7345
7346                   /* Reassign any specializations already in the hash table
7347                      to the new more general template, and add the
7348                      additional template args.  */
7349                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
7350                        t != NULL_TREE;
7351                        t = TREE_CHAIN (t))
7352                     {
7353                       tree spec = TREE_VALUE (t);
7354                       spec_entry elt;
7355
7356                       elt.tmpl = old_decl;
7357                       elt.args = DECL_TI_ARGS (spec);
7358                       elt.spec = NULL_TREE;
7359
7360                       htab_remove_elt (decl_specializations, &elt);
7361
7362                       DECL_TI_ARGS (spec)
7363                         = add_outermost_template_args (new_args,
7364                                                        DECL_TI_ARGS (spec));
7365
7366                       register_specialization
7367                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
7368
7369                     }
7370                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
7371                 }
7372             }
7373
7374           /* The information from NEW_FRIEND has been merged into OLD_DECL
7375              by duplicate_decls.  */
7376           new_friend = old_decl;
7377         }
7378     }
7379   else
7380     {
7381       tree context = DECL_CONTEXT (new_friend);
7382       bool dependent_p;
7383
7384       /* In the code
7385            template <class T> class C {
7386              template <class U> friend void C1<U>::f (); // case 1
7387              friend void C2<T>::f ();                    // case 2
7388            };
7389          we only need to make sure CONTEXT is a complete type for
7390          case 2.  To distinguish between the two cases, we note that
7391          CONTEXT of case 1 remains dependent type after tsubst while
7392          this isn't true for case 2.  */
7393       ++processing_template_decl;
7394       dependent_p = dependent_type_p (context);
7395       --processing_template_decl;
7396
7397       if (!dependent_p
7398           && !complete_type_or_else (context, NULL_TREE))
7399         return error_mark_node;
7400
7401       if (COMPLETE_TYPE_P (context))
7402         {
7403           /* Check to see that the declaration is really present, and,
7404              possibly obtain an improved declaration.  */
7405           tree fn = check_classfn (context,
7406                                    new_friend, NULL_TREE);
7407
7408           if (fn)
7409             new_friend = fn;
7410         }
7411     }
7412
7413   return new_friend;
7414 }
7415
7416 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
7417    template arguments, as for tsubst.
7418
7419    Returns an appropriate tsubst'd friend type or error_mark_node on
7420    failure.  */
7421
7422 static tree
7423 tsubst_friend_class (tree friend_tmpl, tree args)
7424 {
7425   tree friend_type;
7426   tree tmpl;
7427   tree context;
7428
7429   context = DECL_CONTEXT (friend_tmpl);
7430
7431   if (context)
7432     {
7433       if (TREE_CODE (context) == NAMESPACE_DECL)
7434         push_nested_namespace (context);
7435       else
7436         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
7437     }
7438
7439   /* Look for a class template declaration.  We look for hidden names
7440      because two friend declarations of the same template are the
7441      same.  For example, in:
7442
7443        struct A { 
7444          template <typename> friend class F;
7445        };
7446        template <typename> struct B { 
7447          template <typename> friend class F;
7448        };
7449
7450      both F templates are the same.  */
7451   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
7452                            /*block_p=*/true, 0, 
7453                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
7454
7455   /* But, if we don't find one, it might be because we're in a
7456      situation like this:
7457
7458        template <class T>
7459        struct S {
7460          template <class U>
7461          friend struct S;
7462        };
7463
7464      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
7465      for `S<int>', not the TEMPLATE_DECL.  */
7466   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
7467     {
7468       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
7469       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
7470     }
7471
7472   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
7473     {
7474       /* The friend template has already been declared.  Just
7475          check to see that the declarations match, and install any new
7476          default parameters.  We must tsubst the default parameters,
7477          of course.  We only need the innermost template parameters
7478          because that is all that redeclare_class_template will look
7479          at.  */
7480       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
7481           > TMPL_ARGS_DEPTH (args))
7482         {
7483           tree parms;
7484           location_t saved_input_location;
7485           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
7486                                          args, tf_warning_or_error);
7487
7488           saved_input_location = input_location;
7489           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
7490           redeclare_class_template (TREE_TYPE (tmpl), parms);
7491           input_location = saved_input_location;
7492           
7493         }
7494
7495       friend_type = TREE_TYPE (tmpl);
7496     }
7497   else
7498     {
7499       /* The friend template has not already been declared.  In this
7500          case, the instantiation of the template class will cause the
7501          injection of this template into the global scope.  */
7502       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
7503       if (tmpl == error_mark_node)
7504         return error_mark_node;
7505
7506       /* The new TMPL is not an instantiation of anything, so we
7507          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
7508          the new type because that is supposed to be the corresponding
7509          template decl, i.e., TMPL.  */
7510       DECL_USE_TEMPLATE (tmpl) = 0;
7511       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
7512       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
7513       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
7514         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
7515
7516       /* Inject this template into the global scope.  */
7517       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
7518     }
7519
7520   if (context)
7521     {
7522       if (TREE_CODE (context) == NAMESPACE_DECL)
7523         pop_nested_namespace (context);
7524       else
7525         pop_nested_class ();
7526     }
7527
7528   return friend_type;
7529 }
7530
7531 /* Returns zero if TYPE cannot be completed later due to circularity.
7532    Otherwise returns one.  */
7533
7534 static int
7535 can_complete_type_without_circularity (tree type)
7536 {
7537   if (type == NULL_TREE || type == error_mark_node)
7538     return 0;
7539   else if (COMPLETE_TYPE_P (type))
7540     return 1;
7541   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
7542     return can_complete_type_without_circularity (TREE_TYPE (type));
7543   else if (CLASS_TYPE_P (type)
7544            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
7545     return 0;
7546   else
7547     return 1;
7548 }
7549
7550 /* Apply any attributes which had to be deferred until instantiation
7551    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
7552    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
7553
7554 static void
7555 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
7556                                 tree args, tsubst_flags_t complain, tree in_decl)
7557 {
7558   tree last_dep = NULL_TREE;
7559   tree t;
7560   tree *p;
7561
7562   for (t = attributes; t; t = TREE_CHAIN (t))
7563     if (ATTR_IS_DEPENDENT (t))
7564       {
7565         last_dep = t;
7566         attributes = copy_list (attributes);
7567         break;
7568       }
7569
7570   if (DECL_P (*decl_p))
7571     {
7572       if (TREE_TYPE (*decl_p) == error_mark_node)
7573         return;
7574       p = &DECL_ATTRIBUTES (*decl_p);
7575     }
7576   else
7577     p = &TYPE_ATTRIBUTES (*decl_p);
7578
7579   if (last_dep)
7580     {
7581       tree late_attrs = NULL_TREE;
7582       tree *q = &late_attrs;
7583
7584       for (*p = attributes; *p; )
7585         {
7586           t = *p;
7587           if (ATTR_IS_DEPENDENT (t))
7588             {
7589               *p = TREE_CHAIN (t);
7590               TREE_CHAIN (t) = NULL_TREE;
7591               /* If the first attribute argument is an identifier, don't
7592                  pass it through tsubst.  Attributes like mode, format,
7593                  cleanup and several target specific attributes expect it
7594                  unmodified.  */
7595               if (TREE_VALUE (t)
7596                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
7597                   && TREE_VALUE (TREE_VALUE (t))
7598                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
7599                       == IDENTIFIER_NODE))
7600                 {
7601                   tree chain
7602                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
7603                                    in_decl,
7604                                    /*integral_constant_expression_p=*/false);
7605                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
7606                     TREE_VALUE (t)
7607                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
7608                                    chain);
7609                 }
7610               else
7611                 TREE_VALUE (t)
7612                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
7613                                  /*integral_constant_expression_p=*/false);
7614               *q = t;
7615               q = &TREE_CHAIN (t);
7616             }
7617           else
7618             p = &TREE_CHAIN (t);
7619         }
7620
7621       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
7622     }
7623 }
7624
7625 /* Perform (or defer) access check for typedefs that were referenced
7626    from within the template TMPL code.
7627    This is a subroutine of instantiate_template and instantiate_class_template.
7628    TMPL is the template to consider and TARGS is the list of arguments of
7629    that template.  */
7630
7631 static void
7632 perform_typedefs_access_check (tree tmpl, tree targs)
7633 {
7634   location_t saved_location;
7635   int i;
7636   qualified_typedef_usage_t *iter;
7637
7638   if (!tmpl
7639       || (!CLASS_TYPE_P (tmpl)
7640           && TREE_CODE (tmpl) != FUNCTION_DECL))
7641     return;
7642
7643   saved_location = input_location;
7644   for (i = 0;
7645        VEC_iterate (qualified_typedef_usage_t,
7646                     get_types_needing_access_check (tmpl),
7647                     i, iter);
7648         ++i)
7649     {
7650       tree type_decl = iter->typedef_decl;
7651       tree type_scope = iter->context;
7652
7653       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
7654         continue;
7655
7656       if (uses_template_parms (type_decl))
7657         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
7658       if (uses_template_parms (type_scope))
7659         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
7660
7661       /* Make access check error messages point to the location
7662          of the use of the typedef.  */
7663       input_location = iter->locus;
7664       perform_or_defer_access_check (TYPE_BINFO (type_scope),
7665                                      type_decl, type_decl);
7666     }
7667     input_location = saved_location;
7668 }
7669
7670 tree
7671 instantiate_class_template (tree type)
7672 {
7673   tree templ, args, pattern, t, member;
7674   tree typedecl;
7675   tree pbinfo;
7676   tree base_list;
7677   unsigned int saved_maximum_field_alignment;
7678
7679   if (type == error_mark_node)
7680     return error_mark_node;
7681
7682   if (TYPE_BEING_DEFINED (type)
7683       || COMPLETE_TYPE_P (type)
7684       || uses_template_parms (type))
7685     return type;
7686
7687   /* Figure out which template is being instantiated.  */
7688   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
7689   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7690
7691   /* Determine what specialization of the original template to
7692      instantiate.  */
7693   t = most_specialized_class (type, templ);
7694   if (t == error_mark_node)
7695     {
7696       TYPE_BEING_DEFINED (type) = 1;
7697       return error_mark_node;
7698     }
7699   else if (t)
7700     {
7701       /* This TYPE is actually an instantiation of a partial
7702          specialization.  We replace the innermost set of ARGS with
7703          the arguments appropriate for substitution.  For example,
7704          given:
7705
7706            template <class T> struct S {};
7707            template <class T> struct S<T*> {};
7708
7709          and supposing that we are instantiating S<int*>, ARGS will
7710          presently be {int*} -- but we need {int}.  */
7711       pattern = TREE_TYPE (t);
7712       args = TREE_PURPOSE (t);
7713     }
7714   else
7715     {
7716       pattern = TREE_TYPE (templ);
7717       args = CLASSTYPE_TI_ARGS (type);
7718     }
7719
7720   /* If the template we're instantiating is incomplete, then clearly
7721      there's nothing we can do.  */
7722   if (!COMPLETE_TYPE_P (pattern))
7723     return type;
7724
7725   /* If we've recursively instantiated too many templates, stop.  */
7726   if (! push_tinst_level (type))
7727     return type;
7728
7729   /* Now we're really doing the instantiation.  Mark the type as in
7730      the process of being defined.  */
7731   TYPE_BEING_DEFINED (type) = 1;
7732
7733   /* We may be in the middle of deferred access check.  Disable
7734      it now.  */
7735   push_deferring_access_checks (dk_no_deferred);
7736
7737   push_to_top_level ();
7738   /* Use #pragma pack from the template context.  */
7739   saved_maximum_field_alignment = maximum_field_alignment;
7740   maximum_field_alignment = TYPE_PRECISION (pattern);
7741
7742   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
7743
7744   /* Set the input location to the most specialized template definition.
7745      This is needed if tsubsting causes an error.  */
7746   typedecl = TYPE_MAIN_DECL (pattern);
7747   input_location = DECL_SOURCE_LOCATION (typedecl);
7748
7749   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
7750   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
7751   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
7752   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
7753   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
7754   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
7755   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
7756   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
7757   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
7758   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
7759   TYPE_PACKED (type) = TYPE_PACKED (pattern);
7760   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
7761   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
7762   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
7763   if (ANON_AGGR_TYPE_P (pattern))
7764     SET_ANON_AGGR_TYPE_P (type);
7765   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
7766     {
7767       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
7768       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
7769     }
7770
7771   pbinfo = TYPE_BINFO (pattern);
7772
7773   /* We should never instantiate a nested class before its enclosing
7774      class; we need to look up the nested class by name before we can
7775      instantiate it, and that lookup should instantiate the enclosing
7776      class.  */
7777   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
7778               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
7779               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
7780
7781   base_list = NULL_TREE;
7782   if (BINFO_N_BASE_BINFOS (pbinfo))
7783     {
7784       tree pbase_binfo;
7785       tree context = TYPE_CONTEXT (type);
7786       tree pushed_scope;
7787       int i;
7788
7789       /* We must enter the scope containing the type, as that is where
7790          the accessibility of types named in dependent bases are
7791          looked up from.  */
7792       pushed_scope = push_scope (context ? context : global_namespace);
7793
7794       /* Substitute into each of the bases to determine the actual
7795          basetypes.  */
7796       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
7797         {
7798           tree base;
7799           tree access = BINFO_BASE_ACCESS (pbinfo, i);
7800           tree expanded_bases = NULL_TREE;
7801           int idx, len = 1;
7802
7803           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
7804             {
7805               expanded_bases = 
7806                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
7807                                        args, tf_error, NULL_TREE);
7808               if (expanded_bases == error_mark_node)
7809                 continue;
7810
7811               len = TREE_VEC_LENGTH (expanded_bases);
7812             }
7813
7814           for (idx = 0; idx < len; idx++)
7815             {
7816               if (expanded_bases)
7817                 /* Extract the already-expanded base class.  */
7818                 base = TREE_VEC_ELT (expanded_bases, idx);
7819               else
7820                 /* Substitute to figure out the base class.  */
7821                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
7822                                NULL_TREE);
7823
7824               if (base == error_mark_node)
7825                 continue;
7826
7827               base_list = tree_cons (access, base, base_list);
7828               if (BINFO_VIRTUAL_P (pbase_binfo))
7829                 TREE_TYPE (base_list) = integer_type_node;
7830             }
7831         }
7832
7833       /* The list is now in reverse order; correct that.  */
7834       base_list = nreverse (base_list);
7835
7836       if (pushed_scope)
7837         pop_scope (pushed_scope);
7838     }
7839   /* Now call xref_basetypes to set up all the base-class
7840      information.  */
7841   xref_basetypes (type, base_list);
7842
7843   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7844                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7845                                   args, tf_error, NULL_TREE);
7846
7847   /* Now that our base classes are set up, enter the scope of the
7848      class, so that name lookups into base classes, etc. will work
7849      correctly.  This is precisely analogous to what we do in
7850      begin_class_definition when defining an ordinary non-template
7851      class, except we also need to push the enclosing classes.  */
7852   push_nested_class (type);
7853
7854   /* Now members are processed in the order of declaration.  */
7855   for (member = CLASSTYPE_DECL_LIST (pattern);
7856        member; member = TREE_CHAIN (member))
7857     {
7858       tree t = TREE_VALUE (member);
7859
7860       if (TREE_PURPOSE (member))
7861         {
7862           if (TYPE_P (t))
7863             {
7864               /* Build new CLASSTYPE_NESTED_UTDS.  */
7865
7866               tree newtag;
7867               bool class_template_p;
7868
7869               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7870                                   && TYPE_LANG_SPECIFIC (t)
7871                                   && CLASSTYPE_IS_TEMPLATE (t));
7872               /* If the member is a class template, then -- even after
7873                  substitution -- there may be dependent types in the
7874                  template argument list for the class.  We increment
7875                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7876                  that function will assume that no types are dependent
7877                  when outside of a template.  */
7878               if (class_template_p)
7879                 ++processing_template_decl;
7880               newtag = tsubst (t, args, tf_error, NULL_TREE);
7881               if (class_template_p)
7882                 --processing_template_decl;
7883               if (newtag == error_mark_node)
7884                 continue;
7885
7886               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7887                 {
7888                   tree name = TYPE_IDENTIFIER (t);
7889
7890                   if (class_template_p)
7891                     /* Unfortunately, lookup_template_class sets
7892                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7893                        instantiation (i.e., for the type of a member
7894                        template class nested within a template class.)
7895                        This behavior is required for
7896                        maybe_process_partial_specialization to work
7897                        correctly, but is not accurate in this case;
7898                        the TAG is not an instantiation of anything.
7899                        (The corresponding TEMPLATE_DECL is an
7900                        instantiation, but the TYPE is not.) */
7901                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7902
7903                   /* Now, we call pushtag to put this NEWTAG into the scope of
7904                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7905                      pushtag calling push_template_decl.  We don't have to do
7906                      this for enums because it will already have been done in
7907                      tsubst_enum.  */
7908                   if (name)
7909                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7910                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7911                 }
7912             }
7913           else if (TREE_CODE (t) == FUNCTION_DECL
7914                    || DECL_FUNCTION_TEMPLATE_P (t))
7915             {
7916               /* Build new TYPE_METHODS.  */
7917               tree r;
7918
7919               if (TREE_CODE (t) == TEMPLATE_DECL)
7920                 ++processing_template_decl;
7921               r = tsubst (t, args, tf_error, NULL_TREE);
7922               if (TREE_CODE (t) == TEMPLATE_DECL)
7923                 --processing_template_decl;
7924               set_current_access_from_decl (r);
7925               finish_member_declaration (r);
7926             }
7927           else
7928             {
7929               /* Build new TYPE_FIELDS.  */
7930               if (TREE_CODE (t) == STATIC_ASSERT)
7931                 {
7932                   tree condition = 
7933                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7934                                  tf_warning_or_error, NULL_TREE,
7935                                  /*integral_constant_expression_p=*/true);
7936                   finish_static_assert (condition,
7937                                         STATIC_ASSERT_MESSAGE (t), 
7938                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7939                                         /*member_p=*/true);
7940                 }
7941               else if (TREE_CODE (t) != CONST_DECL)
7942                 {
7943                   tree r;
7944
7945                   /* The file and line for this declaration, to
7946                      assist in error message reporting.  Since we
7947                      called push_tinst_level above, we don't need to
7948                      restore these.  */
7949                   input_location = DECL_SOURCE_LOCATION (t);
7950
7951                   if (TREE_CODE (t) == TEMPLATE_DECL)
7952                     ++processing_template_decl;
7953                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7954                   if (TREE_CODE (t) == TEMPLATE_DECL)
7955                     --processing_template_decl;
7956                   if (TREE_CODE (r) == VAR_DECL)
7957                     {
7958                       /* In [temp.inst]:
7959
7960                            [t]he initialization (and any associated
7961                            side-effects) of a static data member does
7962                            not occur unless the static data member is
7963                            itself used in a way that requires the
7964                            definition of the static data member to
7965                            exist.
7966
7967                          Therefore, we do not substitute into the
7968                          initialized for the static data member here.  */
7969                       finish_static_data_member_decl
7970                         (r,
7971                          /*init=*/NULL_TREE,
7972                          /*init_const_expr_p=*/false,
7973                          /*asmspec_tree=*/NULL_TREE,
7974                          /*flags=*/0);
7975                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7976                         check_static_variable_definition (r, TREE_TYPE (r));
7977                     }
7978                   else if (TREE_CODE (r) == FIELD_DECL)
7979                     {
7980                       /* Determine whether R has a valid type and can be
7981                          completed later.  If R is invalid, then it is
7982                          replaced by error_mark_node so that it will not be
7983                          added to TYPE_FIELDS.  */
7984                       tree rtype = TREE_TYPE (r);
7985                       if (can_complete_type_without_circularity (rtype))
7986                         complete_type (rtype);
7987
7988                       if (!COMPLETE_TYPE_P (rtype))
7989                         {
7990                           cxx_incomplete_type_error (r, rtype);
7991                           r = error_mark_node;
7992                         }
7993                     }
7994
7995                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7996                      such a thing will already have been added to the field
7997                      list by tsubst_enum in finish_member_declaration in the
7998                      CLASSTYPE_NESTED_UTDS case above.  */
7999                   if (!(TREE_CODE (r) == TYPE_DECL
8000                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8001                         && DECL_ARTIFICIAL (r)))
8002                     {
8003                       set_current_access_from_decl (r);
8004                       finish_member_declaration (r);
8005                     }
8006                 }
8007             }
8008         }
8009       else
8010         {
8011           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8012             {
8013               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8014
8015               tree friend_type = t;
8016               bool adjust_processing_template_decl = false;
8017
8018               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8019                 {
8020                   /* template <class T> friend class C;  */
8021                   friend_type = tsubst_friend_class (friend_type, args);
8022                   adjust_processing_template_decl = true;
8023                 }
8024               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8025                 {
8026                   /* template <class T> friend class C::D;  */
8027                   friend_type = tsubst (friend_type, args,
8028                                         tf_warning_or_error, NULL_TREE);
8029                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8030                     friend_type = TREE_TYPE (friend_type);
8031                   adjust_processing_template_decl = true;
8032                 }
8033               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
8034                 {
8035                   /* This could be either
8036
8037                        friend class T::C;
8038
8039                      when dependent_type_p is false or
8040
8041                        template <class U> friend class T::C;
8042
8043                      otherwise.  */
8044                   friend_type = tsubst (friend_type, args,
8045                                         tf_warning_or_error, NULL_TREE);
8046                   /* Bump processing_template_decl for correct
8047                      dependent_type_p calculation.  */
8048                   ++processing_template_decl;
8049                   if (dependent_type_p (friend_type))
8050                     adjust_processing_template_decl = true;
8051                   --processing_template_decl;
8052                 }
8053               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8054                        && hidden_name_p (TYPE_NAME (friend_type)))
8055                 {
8056                   /* friend class C;
8057
8058                      where C hasn't been declared yet.  Let's lookup name
8059                      from namespace scope directly, bypassing any name that
8060                      come from dependent base class.  */
8061                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8062
8063                   /* The call to xref_tag_from_type does injection for friend
8064                      classes.  */
8065                   push_nested_namespace (ns);
8066                   friend_type =
8067                     xref_tag_from_type (friend_type, NULL_TREE,
8068                                         /*tag_scope=*/ts_current);
8069                   pop_nested_namespace (ns);
8070                 }
8071               else if (uses_template_parms (friend_type))
8072                 /* friend class C<T>;  */
8073                 friend_type = tsubst (friend_type, args,
8074                                       tf_warning_or_error, NULL_TREE);
8075               /* Otherwise it's
8076
8077                    friend class C;
8078
8079                  where C is already declared or
8080
8081                    friend class C<int>;
8082
8083                  We don't have to do anything in these cases.  */
8084
8085               if (adjust_processing_template_decl)
8086                 /* Trick make_friend_class into realizing that the friend
8087                    we're adding is a template, not an ordinary class.  It's
8088                    important that we use make_friend_class since it will
8089                    perform some error-checking and output cross-reference
8090                    information.  */
8091                 ++processing_template_decl;
8092
8093               if (friend_type != error_mark_node)
8094                 make_friend_class (type, friend_type, /*complain=*/false);
8095
8096               if (adjust_processing_template_decl)
8097                 --processing_template_decl;
8098             }
8099           else
8100             {
8101               /* Build new DECL_FRIENDLIST.  */
8102               tree r;
8103
8104               /* The file and line for this declaration, to
8105                  assist in error message reporting.  Since we
8106                  called push_tinst_level above, we don't need to
8107                  restore these.  */
8108               input_location = DECL_SOURCE_LOCATION (t);
8109
8110               if (TREE_CODE (t) == TEMPLATE_DECL)
8111                 {
8112                   ++processing_template_decl;
8113                   push_deferring_access_checks (dk_no_check);
8114                 }
8115
8116               r = tsubst_friend_function (t, args);
8117               add_friend (type, r, /*complain=*/false);
8118               if (TREE_CODE (t) == TEMPLATE_DECL)
8119                 {
8120                   pop_deferring_access_checks ();
8121                   --processing_template_decl;
8122                 }
8123             }
8124         }
8125     }
8126
8127   /* Set the file and line number information to whatever is given for
8128      the class itself.  This puts error messages involving generated
8129      implicit functions at a predictable point, and the same point
8130      that would be used for non-template classes.  */
8131   input_location = DECL_SOURCE_LOCATION (typedecl);
8132
8133   unreverse_member_declarations (type);
8134   finish_struct_1 (type);
8135   TYPE_BEING_DEFINED (type) = 0;
8136
8137   /* Now that the class is complete, instantiate default arguments for
8138      any member functions.  We don't do this earlier because the
8139      default arguments may reference members of the class.  */
8140   if (!PRIMARY_TEMPLATE_P (templ))
8141     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
8142       if (TREE_CODE (t) == FUNCTION_DECL
8143           /* Implicitly generated member functions will not have template
8144              information; they are not instantiations, but instead are
8145              created "fresh" for each instantiation.  */
8146           && DECL_TEMPLATE_INFO (t))
8147         tsubst_default_arguments (t);
8148
8149   /* Some typedefs referenced from within the template code need to be access
8150      checked at template instantiation time, i.e now. These types were
8151      added to the template at parsing time. Let's get those and perform
8152      the access checks then.  */
8153   perform_typedefs_access_check (pattern, args);
8154   perform_deferred_access_checks ();
8155   pop_nested_class ();
8156   maximum_field_alignment = saved_maximum_field_alignment;
8157   pop_from_top_level ();
8158   pop_deferring_access_checks ();
8159   pop_tinst_level ();
8160
8161   /* The vtable for a template class can be emitted in any translation
8162      unit in which the class is instantiated.  When there is no key
8163      method, however, finish_struct_1 will already have added TYPE to
8164      the keyed_classes list.  */
8165   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8166     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8167
8168   return type;
8169 }
8170
8171 static tree
8172 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8173 {
8174   tree r;
8175
8176   if (!t)
8177     r = t;
8178   else if (TYPE_P (t))
8179     r = tsubst (t, args, complain, in_decl);
8180   else
8181     {
8182       r = tsubst_expr (t, args, complain, in_decl,
8183                        /*integral_constant_expression_p=*/true);
8184       r = fold_non_dependent_expr (r);
8185     }
8186   return r;
8187 }
8188
8189 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
8190    NONTYPE_ARGUMENT_PACK.  */
8191
8192 static tree
8193 make_fnparm_pack (tree spec_parm)
8194 {
8195   /* Collect all of the extra "packed" parameters into an
8196      argument pack.  */
8197   tree parmvec;
8198   tree parmtypevec;
8199   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8200   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8201   int i, len = list_length (spec_parm);
8202
8203   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
8204   parmvec = make_tree_vec (len);
8205   parmtypevec = make_tree_vec (len);
8206   for (i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
8207     {
8208       TREE_VEC_ELT (parmvec, i) = spec_parm;
8209       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8210     }
8211
8212   /* Build the argument packs.  */
8213   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
8214   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
8215   TREE_TYPE (argpack) = argtypepack;
8216
8217   return argpack;
8218 }        
8219
8220 /* Substitute ARGS into T, which is an pack expansion
8221    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
8222    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
8223    (if only a partial substitution could be performed) or
8224    ERROR_MARK_NODE if there was an error.  */
8225 tree
8226 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
8227                        tree in_decl)
8228 {
8229   tree pattern;
8230   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
8231   int i, len = -1;
8232   tree result;
8233   int incomplete = 0;
8234   bool very_local_specializations = false;
8235
8236   gcc_assert (PACK_EXPANSION_P (t));
8237   pattern = PACK_EXPANSION_PATTERN (t);
8238
8239   /* Determine the argument packs that will instantiate the parameter
8240      packs used in the expansion expression. While we're at it,
8241      compute the number of arguments to be expanded and make sure it
8242      is consistent.  */
8243   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
8244        pack = TREE_CHAIN (pack))
8245     {
8246       tree parm_pack = TREE_VALUE (pack);
8247       tree arg_pack = NULL_TREE;
8248       tree orig_arg = NULL_TREE;
8249
8250       if (TREE_CODE (parm_pack) == PARM_DECL)
8251         {
8252           arg_pack = retrieve_local_specialization (parm_pack);
8253           if (arg_pack == NULL_TREE)
8254             {
8255               /* This can happen for a parameter name used later in a function
8256                  declaration (such as in a late-specified return type).  Just
8257                  make a dummy decl, since it's only used for its type.  */
8258               gcc_assert (cp_unevaluated_operand != 0);
8259               arg_pack = tsubst_decl (parm_pack, args, complain);
8260               arg_pack = make_fnparm_pack (arg_pack);
8261             }
8262         }
8263       else
8264         {
8265           int level, idx, levels;
8266           template_parm_level_and_index (parm_pack, &level, &idx);
8267
8268           levels = TMPL_ARGS_DEPTH (args);
8269           if (level <= levels)
8270             arg_pack = TMPL_ARG (args, level, idx);
8271         }
8272
8273       orig_arg = arg_pack;
8274       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
8275         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
8276       
8277       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
8278         /* This can only happen if we forget to expand an argument
8279            pack somewhere else. Just return an error, silently.  */
8280         {
8281           result = make_tree_vec (1);
8282           TREE_VEC_ELT (result, 0) = error_mark_node;
8283           return result;
8284         }
8285
8286       if (arg_pack
8287           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
8288           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
8289         {
8290           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
8291           tree pattern = PACK_EXPANSION_PATTERN (expansion);
8292           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
8293               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
8294             /* The argument pack that the parameter maps to is just an
8295                expansion of the parameter itself, such as one would
8296                find in the implicit typedef of a class inside the
8297                class itself.  Consider this parameter "unsubstituted",
8298                so that we will maintain the outer pack expansion.  */
8299             arg_pack = NULL_TREE;
8300         }
8301           
8302       if (arg_pack)
8303         {
8304           int my_len = 
8305             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
8306
8307           /* It's all-or-nothing with incomplete argument packs.  */
8308           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8309             return error_mark_node;
8310           
8311           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8312             incomplete = 1;
8313
8314           if (len < 0)
8315             len = my_len;
8316           else if (len != my_len)
8317             {
8318               if (incomplete)
8319                 /* We got explicit args for some packs but not others;
8320                    do nothing now and try again after deduction.  */
8321                 return t;
8322               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
8323                 error ("mismatched argument pack lengths while expanding "
8324                        "%<%T%>",
8325                        pattern);
8326               else
8327                 error ("mismatched argument pack lengths while expanding "
8328                        "%<%E%>",
8329                        pattern);
8330               return error_mark_node;
8331             }
8332
8333           /* Keep track of the parameter packs and their corresponding
8334              argument packs.  */
8335           packs = tree_cons (parm_pack, arg_pack, packs);
8336           TREE_TYPE (packs) = orig_arg;
8337         }
8338       else
8339         /* We can't substitute for this parameter pack.  */
8340         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
8341                                          TREE_VALUE (pack),
8342                                          unsubstituted_packs);
8343     }
8344
8345   /* We cannot expand this expansion expression, because we don't have
8346      all of the argument packs we need. Substitute into the pattern
8347      and return a PACK_EXPANSION_*. The caller will need to deal with
8348      that.  */
8349   if (unsubstituted_packs)
8350     {
8351       tree new_pat;
8352       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8353         new_pat = tsubst_expr (pattern, args, complain, in_decl,
8354                                /*integral_constant_expression_p=*/false);
8355       else
8356         new_pat = tsubst (pattern, args, complain, in_decl);
8357       return make_pack_expansion (new_pat);
8358     }
8359
8360   /* We could not find any argument packs that work.  */
8361   if (len < 0)
8362     return error_mark_node;
8363
8364   if (!local_specializations)
8365     {
8366       /* We're in a late-specified return type, so we don't have a local
8367          specializations table.  Create one for doing this expansion.  */
8368       very_local_specializations = true;
8369       local_specializations = htab_create (37,
8370                                            hash_local_specialization,
8371                                            eq_local_specializations,
8372                                            NULL);
8373     }
8374
8375   /* For each argument in each argument pack, substitute into the
8376      pattern.  */
8377   result = make_tree_vec (len + incomplete);
8378   for (i = 0; i < len + incomplete; ++i)
8379     {
8380       /* For parameter pack, change the substitution of the parameter
8381          pack to the ith argument in its argument pack, then expand
8382          the pattern.  */
8383       for (pack = packs; pack; pack = TREE_CHAIN (pack))
8384         {
8385           tree parm = TREE_PURPOSE (pack);
8386
8387           if (TREE_CODE (parm) == PARM_DECL)
8388             {
8389               /* Select the Ith argument from the pack.  */
8390               tree arg = make_node (ARGUMENT_PACK_SELECT);
8391               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
8392               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
8393               mark_used (parm);
8394               register_local_specialization (arg, parm);
8395             }
8396           else
8397             {
8398               tree value = parm;
8399               int idx, level;
8400               template_parm_level_and_index (parm, &level, &idx);
8401               
8402               if (i < len) 
8403                 {
8404                   /* Select the Ith argument from the pack. */
8405                   value = make_node (ARGUMENT_PACK_SELECT);
8406                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
8407                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
8408                 }
8409
8410               /* Update the corresponding argument.  */
8411               TMPL_ARG (args, level, idx) = value;
8412             }
8413         }
8414
8415       /* Substitute into the PATTERN with the altered arguments.  */
8416       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8417         TREE_VEC_ELT (result, i) = 
8418           tsubst_expr (pattern, args, complain, in_decl,
8419                        /*integral_constant_expression_p=*/false);
8420       else
8421         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
8422
8423       if (i == len)
8424         /* When we have incomplete argument packs, the last "expanded"
8425            result is itself a pack expansion, which allows us
8426            to deduce more arguments.  */
8427         TREE_VEC_ELT (result, i) = 
8428           make_pack_expansion (TREE_VEC_ELT (result, i));
8429
8430       if (TREE_VEC_ELT (result, i) == error_mark_node)
8431         {
8432           result = error_mark_node;
8433           break;
8434         }
8435     }
8436
8437   /* Update ARGS to restore the substitution from parameter packs to
8438      their argument packs.  */
8439   for (pack = packs; pack; pack = TREE_CHAIN (pack))
8440     {
8441       tree parm = TREE_PURPOSE (pack);
8442
8443       if (TREE_CODE (parm) == PARM_DECL)
8444         register_local_specialization (TREE_TYPE (pack), parm);
8445       else
8446         {
8447           int idx, level;
8448           template_parm_level_and_index (parm, &level, &idx);
8449           
8450           /* Update the corresponding argument.  */
8451           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
8452             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
8453               TREE_TYPE (pack);
8454           else
8455             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
8456         }
8457     }
8458
8459   if (very_local_specializations)
8460     {
8461       htab_delete (local_specializations);
8462       local_specializations = NULL;
8463     }
8464   
8465   return result;
8466 }
8467
8468 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
8469    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
8470    parameter packs; all parms generated from a function parameter pack will
8471    have the same DECL_PARM_INDEX.  */
8472
8473 tree
8474 get_pattern_parm (tree parm, tree tmpl)
8475 {
8476   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
8477   tree patparm;
8478
8479   if (DECL_ARTIFICIAL (parm))
8480     {
8481       for (patparm = DECL_ARGUMENTS (pattern);
8482            patparm; patparm = TREE_CHAIN (patparm))
8483         if (DECL_ARTIFICIAL (patparm)
8484             && DECL_NAME (parm) == DECL_NAME (patparm))
8485           break;
8486     }
8487   else
8488     {
8489       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
8490       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
8491       gcc_assert (DECL_PARM_INDEX (patparm)
8492                   == DECL_PARM_INDEX (parm));
8493     }
8494
8495   return patparm;
8496 }
8497
8498 /* Substitute ARGS into the vector or list of template arguments T.  */
8499
8500 static tree
8501 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8502 {
8503   tree orig_t = t;
8504   int len = TREE_VEC_LENGTH (t);
8505   int need_new = 0, i, expanded_len_adjust = 0, out;
8506   tree *elts = (tree *) alloca (len * sizeof (tree));
8507
8508   for (i = 0; i < len; i++)
8509     {
8510       tree orig_arg = TREE_VEC_ELT (t, i);
8511       tree new_arg;
8512
8513       if (TREE_CODE (orig_arg) == TREE_VEC)
8514         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
8515       else if (PACK_EXPANSION_P (orig_arg))
8516         {
8517           /* Substitute into an expansion expression.  */
8518           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
8519
8520           if (TREE_CODE (new_arg) == TREE_VEC)
8521             /* Add to the expanded length adjustment the number of
8522                expanded arguments. We subtract one from this
8523                measurement, because the argument pack expression
8524                itself is already counted as 1 in
8525                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
8526                the argument pack is empty.  */
8527             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
8528         }
8529       else if (ARGUMENT_PACK_P (orig_arg))
8530         {
8531           /* Substitute into each of the arguments.  */
8532           new_arg = TYPE_P (orig_arg)
8533             ? cxx_make_type (TREE_CODE (orig_arg))
8534             : make_node (TREE_CODE (orig_arg));
8535           
8536           SET_ARGUMENT_PACK_ARGS (
8537             new_arg,
8538             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
8539                                   args, complain, in_decl));
8540
8541           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
8542             new_arg = error_mark_node;
8543
8544           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
8545             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
8546                                           complain, in_decl);
8547             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
8548
8549             if (TREE_TYPE (new_arg) == error_mark_node)
8550               new_arg = error_mark_node;
8551           }
8552         }
8553       else
8554         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
8555
8556       if (new_arg == error_mark_node)
8557         return error_mark_node;
8558
8559       elts[i] = new_arg;
8560       if (new_arg != orig_arg)
8561         need_new = 1;
8562     }
8563
8564   if (!need_new)
8565     return t;
8566
8567   /* Make space for the expanded arguments coming from template
8568      argument packs.  */
8569   t = make_tree_vec (len + expanded_len_adjust);
8570   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
8571      arguments for a member template.
8572      In that case each TREE_VEC in ORIG_T represents a level of template
8573      arguments, and ORIG_T won't carry any non defaulted argument count.
8574      It will rather be the nested TREE_VECs that will carry one.
8575      In other words, ORIG_T carries a non defaulted argument count only
8576      if it doesn't contain any nested TREE_VEC.  */
8577   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
8578     {
8579       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
8580       count += expanded_len_adjust;
8581       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
8582     }
8583   for (i = 0, out = 0; i < len; i++)
8584     {
8585       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
8586            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
8587           && TREE_CODE (elts[i]) == TREE_VEC)
8588         {
8589           int idx;
8590
8591           /* Now expand the template argument pack "in place".  */
8592           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
8593             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
8594         }
8595       else
8596         {
8597           TREE_VEC_ELT (t, out) = elts[i];
8598           out++;
8599         }
8600     }
8601
8602   return t;
8603 }
8604
8605 /* Return the result of substituting ARGS into the template parameters
8606    given by PARMS.  If there are m levels of ARGS and m + n levels of
8607    PARMS, then the result will contain n levels of PARMS.  For
8608    example, if PARMS is `template <class T> template <class U>
8609    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
8610    result will be `template <int*, double, class V>'.  */
8611
8612 static tree
8613 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
8614 {
8615   tree r = NULL_TREE;
8616   tree* new_parms;
8617
8618   /* When substituting into a template, we must set
8619      PROCESSING_TEMPLATE_DECL as the template parameters may be
8620      dependent if they are based on one-another, and the dependency
8621      predicates are short-circuit outside of templates.  */
8622   ++processing_template_decl;
8623
8624   for (new_parms = &r;
8625        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
8626        new_parms = &(TREE_CHAIN (*new_parms)),
8627          parms = TREE_CHAIN (parms))
8628     {
8629       tree new_vec =
8630         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
8631       int i;
8632
8633       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
8634         {
8635           tree tuple;
8636           tree default_value;
8637           tree parm_decl;
8638
8639           if (parms == error_mark_node)
8640             continue;
8641
8642           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
8643
8644           if (tuple == error_mark_node)
8645             continue;
8646
8647           default_value = TREE_PURPOSE (tuple);
8648           parm_decl = TREE_VALUE (tuple);
8649
8650           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
8651           if (TREE_CODE (parm_decl) == PARM_DECL
8652               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
8653             parm_decl = error_mark_node;
8654           default_value = tsubst_template_arg (default_value, args,
8655                                                complain, NULL_TREE);
8656
8657           tuple = build_tree_list (default_value, parm_decl);
8658           TREE_VEC_ELT (new_vec, i) = tuple;
8659         }
8660
8661       *new_parms =
8662         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
8663                              - TMPL_ARGS_DEPTH (args)),
8664                    new_vec, NULL_TREE);
8665     }
8666
8667   --processing_template_decl;
8668
8669   return r;
8670 }
8671
8672 /* Substitute the ARGS into the indicated aggregate (or enumeration)
8673    type T.  If T is not an aggregate or enumeration type, it is
8674    handled as if by tsubst.  IN_DECL is as for tsubst.  If
8675    ENTERING_SCOPE is nonzero, T is the context for a template which
8676    we are presently tsubst'ing.  Return the substituted value.  */
8677
8678 static tree
8679 tsubst_aggr_type (tree t,
8680                   tree args,
8681                   tsubst_flags_t complain,
8682                   tree in_decl,
8683                   int entering_scope)
8684 {
8685   if (t == NULL_TREE)
8686     return NULL_TREE;
8687
8688   switch (TREE_CODE (t))
8689     {
8690     case RECORD_TYPE:
8691       if (TYPE_PTRMEMFUNC_P (t))
8692         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
8693
8694       /* Else fall through.  */
8695     case ENUMERAL_TYPE:
8696     case UNION_TYPE:
8697       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
8698         {
8699           tree argvec;
8700           tree context;
8701           tree r;
8702           int saved_unevaluated_operand;
8703           int saved_inhibit_evaluation_warnings;
8704
8705           /* In "sizeof(X<I>)" we need to evaluate "I".  */
8706           saved_unevaluated_operand = cp_unevaluated_operand;
8707           cp_unevaluated_operand = 0;
8708           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
8709           c_inhibit_evaluation_warnings = 0;
8710
8711           /* First, determine the context for the type we are looking
8712              up.  */
8713           context = TYPE_CONTEXT (t);
8714           if (context)
8715             {
8716               context = tsubst_aggr_type (context, args, complain,
8717                                           in_decl, /*entering_scope=*/1);
8718               /* If context is a nested class inside a class template,
8719                  it may still need to be instantiated (c++/33959).  */
8720               if (TYPE_P (context))
8721                 context = complete_type (context);
8722             }
8723
8724           /* Then, figure out what arguments are appropriate for the
8725              type we are trying to find.  For example, given:
8726
8727                template <class T> struct S;
8728                template <class T, class U> void f(T, U) { S<U> su; }
8729
8730              and supposing that we are instantiating f<int, double>,
8731              then our ARGS will be {int, double}, but, when looking up
8732              S we only want {double}.  */
8733           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
8734                                          complain, in_decl);
8735           if (argvec == error_mark_node)
8736             r = error_mark_node;
8737           else
8738             {
8739               r = lookup_template_class (t, argvec, in_decl, context,
8740                                          entering_scope, complain);
8741               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8742             }
8743
8744           cp_unevaluated_operand = saved_unevaluated_operand;
8745           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
8746
8747           return r;
8748         }
8749       else
8750         /* This is not a template type, so there's nothing to do.  */
8751         return t;
8752
8753     default:
8754       return tsubst (t, args, complain, in_decl);
8755     }
8756 }
8757
8758 /* Substitute into the default argument ARG (a default argument for
8759    FN), which has the indicated TYPE.  */
8760
8761 tree
8762 tsubst_default_argument (tree fn, tree type, tree arg)
8763 {
8764   tree saved_class_ptr = NULL_TREE;
8765   tree saved_class_ref = NULL_TREE;
8766
8767   /* This default argument came from a template.  Instantiate the
8768      default argument here, not in tsubst.  In the case of
8769      something like:
8770
8771        template <class T>
8772        struct S {
8773          static T t();
8774          void f(T = t());
8775        };
8776
8777      we must be careful to do name lookup in the scope of S<T>,
8778      rather than in the current class.  */
8779   push_access_scope (fn);
8780   /* The "this" pointer is not valid in a default argument.  */
8781   if (cfun)
8782     {
8783       saved_class_ptr = current_class_ptr;
8784       cp_function_chain->x_current_class_ptr = NULL_TREE;
8785       saved_class_ref = current_class_ref;
8786       cp_function_chain->x_current_class_ref = NULL_TREE;
8787     }
8788
8789   push_deferring_access_checks(dk_no_deferred);
8790   /* The default argument expression may cause implicitly defined
8791      member functions to be synthesized, which will result in garbage
8792      collection.  We must treat this situation as if we were within
8793      the body of function so as to avoid collecting live data on the
8794      stack.  */
8795   ++function_depth;
8796   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
8797                      tf_warning_or_error, NULL_TREE,
8798                      /*integral_constant_expression_p=*/false);
8799   --function_depth;
8800   pop_deferring_access_checks();
8801
8802   /* Restore the "this" pointer.  */
8803   if (cfun)
8804     {
8805       cp_function_chain->x_current_class_ptr = saved_class_ptr;
8806       cp_function_chain->x_current_class_ref = saved_class_ref;
8807     }
8808
8809   /* Make sure the default argument is reasonable.  */
8810   arg = check_default_argument (type, arg);
8811
8812   pop_access_scope (fn);
8813
8814   return arg;
8815 }
8816
8817 /* Substitute into all the default arguments for FN.  */
8818
8819 static void
8820 tsubst_default_arguments (tree fn)
8821 {
8822   tree arg;
8823   tree tmpl_args;
8824
8825   tmpl_args = DECL_TI_ARGS (fn);
8826
8827   /* If this function is not yet instantiated, we certainly don't need
8828      its default arguments.  */
8829   if (uses_template_parms (tmpl_args))
8830     return;
8831
8832   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
8833        arg;
8834        arg = TREE_CHAIN (arg))
8835     if (TREE_PURPOSE (arg))
8836       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
8837                                                     TREE_VALUE (arg),
8838                                                     TREE_PURPOSE (arg));
8839 }
8840
8841 /* Substitute the ARGS into the T, which is a _DECL.  Return the
8842    result of the substitution.  Issue error and warning messages under
8843    control of COMPLAIN.  */
8844
8845 static tree
8846 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
8847 {
8848 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
8849   location_t saved_loc;
8850   tree r = NULL_TREE;
8851   tree in_decl = t;
8852   hashval_t hash = 0;
8853
8854   /* Set the filename and linenumber to improve error-reporting.  */
8855   saved_loc = input_location;
8856   input_location = DECL_SOURCE_LOCATION (t);
8857
8858   switch (TREE_CODE (t))
8859     {
8860     case TEMPLATE_DECL:
8861       {
8862         /* We can get here when processing a member function template,
8863            member class template, or template template parameter.  */
8864         tree decl = DECL_TEMPLATE_RESULT (t);
8865         tree spec;
8866         tree tmpl_args;
8867         tree full_args;
8868
8869         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
8870           {
8871             /* Template template parameter is treated here.  */
8872             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8873             if (new_type == error_mark_node)
8874               RETURN (error_mark_node);
8875
8876             r = copy_decl (t);
8877             TREE_CHAIN (r) = NULL_TREE;
8878             TREE_TYPE (r) = new_type;
8879             DECL_TEMPLATE_RESULT (r)
8880               = build_decl (DECL_SOURCE_LOCATION (decl),
8881                             TYPE_DECL, DECL_NAME (decl), new_type);
8882             DECL_TEMPLATE_PARMS (r)
8883               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8884                                        complain);
8885             TYPE_NAME (new_type) = r;
8886             break;
8887           }
8888
8889         /* We might already have an instance of this template.
8890            The ARGS are for the surrounding class type, so the
8891            full args contain the tsubst'd args for the context,
8892            plus the innermost args from the template decl.  */
8893         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
8894           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
8895           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
8896         /* Because this is a template, the arguments will still be
8897            dependent, even after substitution.  If
8898            PROCESSING_TEMPLATE_DECL is not set, the dependency
8899            predicates will short-circuit.  */
8900         ++processing_template_decl;
8901         full_args = tsubst_template_args (tmpl_args, args,
8902                                           complain, in_decl);
8903         --processing_template_decl;
8904         if (full_args == error_mark_node)
8905           RETURN (error_mark_node);
8906
8907         /* If this is a default template template argument,
8908            tsubst might not have changed anything.  */
8909         if (full_args == tmpl_args)
8910           RETURN (t);
8911
8912         hash = hash_tmpl_and_args (t, full_args);
8913         spec = retrieve_specialization (t, full_args, hash);
8914         if (spec != NULL_TREE)
8915           {
8916             r = spec;
8917             break;
8918           }
8919
8920         /* Make a new template decl.  It will be similar to the
8921            original, but will record the current template arguments.
8922            We also create a new function declaration, which is just
8923            like the old one, but points to this new template, rather
8924            than the old one.  */
8925         r = copy_decl (t);
8926         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
8927         TREE_CHAIN (r) = NULL_TREE;
8928
8929         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
8930
8931         if (TREE_CODE (decl) == TYPE_DECL)
8932           {
8933             tree new_type;
8934             ++processing_template_decl;
8935             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8936             --processing_template_decl;
8937             if (new_type == error_mark_node)
8938               RETURN (error_mark_node);
8939
8940             TREE_TYPE (r) = new_type;
8941             CLASSTYPE_TI_TEMPLATE (new_type) = r;
8942             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
8943             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
8944             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
8945           }
8946         else
8947           {
8948             tree new_decl;
8949             ++processing_template_decl;
8950             new_decl = tsubst (decl, args, complain, in_decl);
8951             --processing_template_decl;
8952             if (new_decl == error_mark_node)
8953               RETURN (error_mark_node);
8954
8955             DECL_TEMPLATE_RESULT (r) = new_decl;
8956             DECL_TI_TEMPLATE (new_decl) = r;
8957             TREE_TYPE (r) = TREE_TYPE (new_decl);
8958             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
8959             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
8960           }
8961
8962         SET_DECL_IMPLICIT_INSTANTIATION (r);
8963         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
8964         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
8965
8966         /* The template parameters for this new template are all the
8967            template parameters for the old template, except the
8968            outermost level of parameters.  */
8969         DECL_TEMPLATE_PARMS (r)
8970           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8971                                    complain);
8972
8973         if (PRIMARY_TEMPLATE_P (t))
8974           DECL_PRIMARY_TEMPLATE (r) = r;
8975
8976         if (TREE_CODE (decl) != TYPE_DECL)
8977           /* Record this non-type partial instantiation.  */
8978           register_specialization (r, t,
8979                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8980                                    false, hash);
8981       }
8982       break;
8983
8984     case FUNCTION_DECL:
8985       {
8986         tree ctx;
8987         tree argvec = NULL_TREE;
8988         tree *friends;
8989         tree gen_tmpl;
8990         tree type;
8991         int member;
8992         int args_depth;
8993         int parms_depth;
8994
8995         /* Nobody should be tsubst'ing into non-template functions.  */
8996         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8997
8998         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8999           {
9000             tree spec;
9001             bool dependent_p;
9002
9003             /* If T is not dependent, just return it.  We have to
9004                increment PROCESSING_TEMPLATE_DECL because
9005                value_dependent_expression_p assumes that nothing is
9006                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
9007             ++processing_template_decl;
9008             dependent_p = value_dependent_expression_p (t);
9009             --processing_template_decl;
9010             if (!dependent_p)
9011               RETURN (t);
9012
9013             /* Calculate the most general template of which R is a
9014                specialization, and the complete set of arguments used to
9015                specialize R.  */
9016             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9017             argvec = tsubst_template_args (DECL_TI_ARGS
9018                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
9019                                            args, complain, in_decl);
9020
9021             /* Check to see if we already have this specialization.  */
9022             hash = hash_tmpl_and_args (gen_tmpl, argvec);
9023             spec = retrieve_specialization (gen_tmpl, argvec, hash);
9024
9025             if (spec)
9026               {
9027                 r = spec;
9028                 break;
9029               }
9030
9031             /* We can see more levels of arguments than parameters if
9032                there was a specialization of a member template, like
9033                this:
9034
9035                  template <class T> struct S { template <class U> void f(); }
9036                  template <> template <class U> void S<int>::f(U);
9037
9038                Here, we'll be substituting into the specialization,
9039                because that's where we can find the code we actually
9040                want to generate, but we'll have enough arguments for
9041                the most general template.
9042
9043                We also deal with the peculiar case:
9044
9045                  template <class T> struct S {
9046                    template <class U> friend void f();
9047                  };
9048                  template <class U> void f() {}
9049                  template S<int>;
9050                  template void f<double>();
9051
9052                Here, the ARGS for the instantiation of will be {int,
9053                double}.  But, we only need as many ARGS as there are
9054                levels of template parameters in CODE_PATTERN.  We are
9055                careful not to get fooled into reducing the ARGS in
9056                situations like:
9057
9058                  template <class T> struct S { template <class U> void f(U); }
9059                  template <class T> template <> void S<T>::f(int) {}
9060
9061                which we can spot because the pattern will be a
9062                specialization in this case.  */
9063             args_depth = TMPL_ARGS_DEPTH (args);
9064             parms_depth =
9065               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9066             if (args_depth > parms_depth
9067                 && !DECL_TEMPLATE_SPECIALIZATION (t))
9068               args = get_innermost_template_args (args, parms_depth);
9069           }
9070         else
9071           {
9072             /* This special case arises when we have something like this:
9073
9074                  template <class T> struct S {
9075                    friend void f<int>(int, double);
9076                  };
9077
9078                Here, the DECL_TI_TEMPLATE for the friend declaration
9079                will be an IDENTIFIER_NODE.  We are being called from
9080                tsubst_friend_function, and we want only to create a
9081                new decl (R) with appropriate types so that we can call
9082                determine_specialization.  */
9083             gen_tmpl = NULL_TREE;
9084           }
9085
9086         if (DECL_CLASS_SCOPE_P (t))
9087           {
9088             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9089               member = 2;
9090             else
9091               member = 1;
9092             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9093                                     complain, t, /*entering_scope=*/1);
9094           }
9095         else
9096           {
9097             member = 0;
9098             ctx = DECL_CONTEXT (t);
9099           }
9100         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9101         if (type == error_mark_node)
9102           RETURN (error_mark_node);
9103
9104         /* We do NOT check for matching decls pushed separately at this
9105            point, as they may not represent instantiations of this
9106            template, and in any case are considered separate under the
9107            discrete model.  */
9108         r = copy_decl (t);
9109         DECL_USE_TEMPLATE (r) = 0;
9110         TREE_TYPE (r) = type;
9111         /* Clear out the mangled name and RTL for the instantiation.  */
9112         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9113         SET_DECL_RTL (r, NULL_RTX);
9114         /* Leave DECL_INITIAL set on deleted instantiations.  */
9115         if (!DECL_DELETED_FN (r))
9116           DECL_INITIAL (r) = NULL_TREE;
9117         DECL_CONTEXT (r) = ctx;
9118
9119         if (member && DECL_CONV_FN_P (r))
9120           /* Type-conversion operator.  Reconstruct the name, in
9121              case it's the name of one of the template's parameters.  */
9122           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9123
9124         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9125                                      complain, t);
9126         DECL_RESULT (r) = NULL_TREE;
9127
9128         TREE_STATIC (r) = 0;
9129         TREE_PUBLIC (r) = TREE_PUBLIC (t);
9130         DECL_EXTERNAL (r) = 1;
9131         /* If this is an instantiation of a function with internal
9132            linkage, we already know what object file linkage will be
9133            assigned to the instantiation.  */
9134         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
9135         DECL_DEFER_OUTPUT (r) = 0;
9136         TREE_CHAIN (r) = NULL_TREE;
9137         DECL_PENDING_INLINE_INFO (r) = 0;
9138         DECL_PENDING_INLINE_P (r) = 0;
9139         DECL_SAVED_TREE (r) = NULL_TREE;
9140         DECL_STRUCT_FUNCTION (r) = NULL;
9141         TREE_USED (r) = 0;
9142         /* We'll re-clone as appropriate in instantiate_template.  */
9143         DECL_CLONED_FUNCTION (r) = NULL_TREE;
9144
9145         /* If we aren't complaining now, return on error before we register
9146            the specialization so that we'll complain eventually.  */
9147         if ((complain & tf_error) == 0
9148             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9149             && !grok_op_properties (r, /*complain=*/false))
9150           RETURN (error_mark_node);
9151
9152         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
9153            this in the special friend case mentioned above where
9154            GEN_TMPL is NULL.  */
9155         if (gen_tmpl)
9156           {
9157             DECL_TEMPLATE_INFO (r)
9158               = build_template_info (gen_tmpl, argvec);
9159             SET_DECL_IMPLICIT_INSTANTIATION (r);
9160             register_specialization (r, gen_tmpl, argvec, false, hash);
9161
9162             /* We're not supposed to instantiate default arguments
9163                until they are called, for a template.  But, for a
9164                declaration like:
9165
9166                  template <class T> void f ()
9167                  { extern void g(int i = T()); }
9168
9169                we should do the substitution when the template is
9170                instantiated.  We handle the member function case in
9171                instantiate_class_template since the default arguments
9172                might refer to other members of the class.  */
9173             if (!member
9174                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
9175                 && !uses_template_parms (argvec))
9176               tsubst_default_arguments (r);
9177           }
9178         else
9179           DECL_TEMPLATE_INFO (r) = NULL_TREE;
9180
9181         /* Copy the list of befriending classes.  */
9182         for (friends = &DECL_BEFRIENDING_CLASSES (r);
9183              *friends;
9184              friends = &TREE_CHAIN (*friends))
9185           {
9186             *friends = copy_node (*friends);
9187             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
9188                                             args, complain,
9189                                             in_decl);
9190           }
9191
9192         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
9193           {
9194             maybe_retrofit_in_chrg (r);
9195             if (DECL_CONSTRUCTOR_P (r))
9196               grok_ctor_properties (ctx, r);
9197             /* If this is an instantiation of a member template, clone it.
9198                If it isn't, that'll be handled by
9199                clone_constructors_and_destructors.  */
9200             if (PRIMARY_TEMPLATE_P (gen_tmpl))
9201               clone_function_decl (r, /*update_method_vec_p=*/0);
9202           }
9203         else if ((complain & tf_error) != 0
9204                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9205                  && !grok_op_properties (r, /*complain=*/true))
9206           RETURN (error_mark_node);
9207
9208         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
9209           SET_DECL_FRIEND_CONTEXT (r,
9210                                    tsubst (DECL_FRIEND_CONTEXT (t),
9211                                             args, complain, in_decl));
9212
9213         /* Possibly limit visibility based on template args.  */
9214         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9215         if (DECL_VISIBILITY_SPECIFIED (t))
9216           {
9217             DECL_VISIBILITY_SPECIFIED (r) = 0;
9218             DECL_ATTRIBUTES (r)
9219               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9220           }
9221         determine_visibility (r);
9222         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
9223             && !processing_template_decl)
9224           defaulted_late_check (r);
9225
9226         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9227                                         args, complain, in_decl);
9228       }
9229       break;
9230
9231     case PARM_DECL:
9232       {
9233         tree type = NULL_TREE;
9234         int i, len = 1;
9235         tree expanded_types = NULL_TREE;
9236         tree prev_r = NULL_TREE;
9237         tree first_r = NULL_TREE;
9238
9239         if (FUNCTION_PARAMETER_PACK_P (t))
9240           {
9241             /* If there is a local specialization that isn't a
9242                parameter pack, it means that we're doing a "simple"
9243                substitution from inside tsubst_pack_expansion. Just
9244                return the local specialization (which will be a single
9245                parm).  */
9246             tree spec = retrieve_local_specialization (t);
9247             if (spec 
9248                 && TREE_CODE (spec) == PARM_DECL
9249                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
9250               RETURN (spec);
9251
9252             /* Expand the TYPE_PACK_EXPANSION that provides the types for
9253                the parameters in this function parameter pack.  */
9254             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
9255                                                     complain, in_decl);
9256             if (TREE_CODE (expanded_types) == TREE_VEC)
9257               {
9258                 len = TREE_VEC_LENGTH (expanded_types);
9259
9260                 /* Zero-length parameter packs are boring. Just substitute
9261                    into the chain.  */
9262                 if (len == 0)
9263                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
9264                                   TREE_CHAIN (t)));
9265               }
9266             else
9267               {
9268                 /* All we did was update the type. Make a note of that.  */
9269                 type = expanded_types;
9270                 expanded_types = NULL_TREE;
9271               }
9272           }
9273
9274         /* Loop through all of the parameter's we'll build. When T is
9275            a function parameter pack, LEN is the number of expanded
9276            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
9277         r = NULL_TREE;
9278         for (i = 0; i < len; ++i)
9279           {
9280             prev_r = r;
9281             r = copy_node (t);
9282             if (DECL_TEMPLATE_PARM_P (t))
9283               SET_DECL_TEMPLATE_PARM_P (r);
9284
9285             /* An argument of a function parameter pack is not a parameter
9286                pack.  */
9287             FUNCTION_PARAMETER_PACK_P (r) = false;
9288
9289             if (expanded_types)
9290               /* We're on the Ith parameter of the function parameter
9291                  pack.  */
9292               {
9293                 /* Get the Ith type.  */
9294                 type = TREE_VEC_ELT (expanded_types, i);
9295
9296                 if (DECL_NAME (r))
9297                   /* Rename the parameter to include the index.  */
9298                   DECL_NAME (r) =
9299                     make_ith_pack_parameter_name (DECL_NAME (r), i);
9300               }
9301             else if (!type)
9302               /* We're dealing with a normal parameter.  */
9303               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9304
9305             type = type_decays_to (type);
9306             TREE_TYPE (r) = type;
9307             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9308
9309             if (DECL_INITIAL (r))
9310               {
9311                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
9312                   DECL_INITIAL (r) = TREE_TYPE (r);
9313                 else
9314                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
9315                                              complain, in_decl);
9316               }
9317
9318             DECL_CONTEXT (r) = NULL_TREE;
9319
9320             if (!DECL_TEMPLATE_PARM_P (r))
9321               DECL_ARG_TYPE (r) = type_passed_as (type);
9322
9323             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9324                                             args, complain, in_decl);
9325
9326             /* Keep track of the first new parameter we
9327                generate. That's what will be returned to the
9328                caller.  */
9329             if (!first_r)
9330               first_r = r;
9331
9332             /* Build a proper chain of parameters when substituting
9333                into a function parameter pack.  */
9334             if (prev_r)
9335               TREE_CHAIN (prev_r) = r;
9336           }
9337
9338         if (TREE_CHAIN (t))
9339           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
9340                                    complain, TREE_CHAIN (t));
9341
9342         /* FIRST_R contains the start of the chain we've built.  */
9343         r = first_r;
9344       }
9345       break;
9346
9347     case FIELD_DECL:
9348       {
9349         tree type;
9350
9351         r = copy_decl (t);
9352         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9353         if (type == error_mark_node)
9354           RETURN (error_mark_node);
9355         TREE_TYPE (r) = type;
9356         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9357
9358         /* DECL_INITIAL gives the number of bits in a bit-field.  */
9359         DECL_INITIAL (r)
9360           = tsubst_expr (DECL_INITIAL (t), args,
9361                          complain, in_decl,
9362                          /*integral_constant_expression_p=*/true);
9363         /* We don't have to set DECL_CONTEXT here; it is set by
9364            finish_member_declaration.  */
9365         TREE_CHAIN (r) = NULL_TREE;
9366         if (VOID_TYPE_P (type))
9367           error ("instantiation of %q+D as type %qT", r, type);
9368
9369         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9370                                         args, complain, in_decl);
9371       }
9372       break;
9373
9374     case USING_DECL:
9375       /* We reach here only for member using decls.  */
9376       if (DECL_DEPENDENT_P (t))
9377         {
9378           r = do_class_using_decl
9379             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
9380              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
9381           if (!r)
9382             r = error_mark_node;
9383           else
9384             {
9385               TREE_PROTECTED (r) = TREE_PROTECTED (t);
9386               TREE_PRIVATE (r) = TREE_PRIVATE (t);
9387             }
9388         }
9389       else
9390         {
9391           r = copy_node (t);
9392           TREE_CHAIN (r) = NULL_TREE;
9393         }
9394       break;
9395
9396     case TYPE_DECL:
9397     case VAR_DECL:
9398       {
9399         tree argvec = NULL_TREE;
9400         tree gen_tmpl = NULL_TREE;
9401         tree spec;
9402         tree tmpl = NULL_TREE;
9403         tree ctx;
9404         tree type = NULL_TREE;
9405         bool local_p;
9406
9407         if (TREE_CODE (t) == TYPE_DECL
9408             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9409           {
9410             /* If this is the canonical decl, we don't have to
9411                mess with instantiations, and often we can't (for
9412                typename, template type parms and such).  Note that
9413                TYPE_NAME is not correct for the above test if
9414                we've copied the type for a typedef.  */
9415             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9416             if (type == error_mark_node)
9417               RETURN (error_mark_node);
9418             r = TYPE_NAME (type);
9419             break;
9420           }
9421
9422         /* Check to see if we already have the specialization we
9423            need.  */
9424         spec = NULL_TREE;
9425         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
9426           {
9427             /* T is a static data member or namespace-scope entity.
9428                We have to substitute into namespace-scope variables
9429                (even though such entities are never templates) because
9430                of cases like:
9431                
9432                  template <class T> void f() { extern T t; }
9433
9434                where the entity referenced is not known until
9435                instantiation time.  */
9436             local_p = false;
9437             ctx = DECL_CONTEXT (t);
9438             if (DECL_CLASS_SCOPE_P (t))
9439               {
9440                 ctx = tsubst_aggr_type (ctx, args,
9441                                         complain,
9442                                         in_decl, /*entering_scope=*/1);
9443                 /* If CTX is unchanged, then T is in fact the
9444                    specialization we want.  That situation occurs when
9445                    referencing a static data member within in its own
9446                    class.  We can use pointer equality, rather than
9447                    same_type_p, because DECL_CONTEXT is always
9448                    canonical.  */
9449                 if (ctx == DECL_CONTEXT (t))
9450                   spec = t;
9451               }
9452
9453             if (!spec)
9454               {
9455                 tmpl = DECL_TI_TEMPLATE (t);
9456                 gen_tmpl = most_general_template (tmpl);
9457                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
9458                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9459                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9460               }
9461           }
9462         else
9463           {
9464             /* A local variable.  */
9465             local_p = true;
9466             /* Subsequent calls to pushdecl will fill this in.  */
9467             ctx = NULL_TREE;
9468             spec = retrieve_local_specialization (t);
9469           }
9470         /* If we already have the specialization we need, there is
9471            nothing more to do.  */ 
9472         if (spec)
9473           {
9474             r = spec;
9475             break;
9476           }
9477
9478         /* Create a new node for the specialization we need.  */
9479         r = copy_decl (t);
9480         if (type == NULL_TREE)
9481           {
9482             if (is_typedef_decl (t))
9483               type = DECL_ORIGINAL_TYPE (t);
9484             else
9485               type = TREE_TYPE (t);
9486             type = tsubst (type, args, complain, in_decl);
9487           }
9488         if (TREE_CODE (r) == VAR_DECL)
9489           {
9490             /* Even if the original location is out of scope, the
9491                newly substituted one is not.  */
9492             DECL_DEAD_FOR_LOCAL (r) = 0;
9493             DECL_INITIALIZED_P (r) = 0;
9494             DECL_TEMPLATE_INSTANTIATED (r) = 0;
9495             if (type == error_mark_node)
9496               RETURN (error_mark_node);
9497             if (TREE_CODE (type) == FUNCTION_TYPE)
9498               {
9499                 /* It may seem that this case cannot occur, since:
9500
9501                      typedef void f();
9502                      void g() { f x; }
9503
9504                    declares a function, not a variable.  However:
9505       
9506                      typedef void f();
9507                      template <typename T> void g() { T t; }
9508                      template void g<f>();
9509
9510                    is an attempt to declare a variable with function
9511                    type.  */
9512                 error ("variable %qD has function type",
9513                        /* R is not yet sufficiently initialized, so we
9514                           just use its name.  */
9515                        DECL_NAME (r));
9516                 RETURN (error_mark_node);
9517               }
9518             type = complete_type (type);
9519             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
9520               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
9521             type = check_var_type (DECL_NAME (r), type);
9522
9523             if (DECL_HAS_VALUE_EXPR_P (t))
9524               {
9525                 tree ve = DECL_VALUE_EXPR (t);
9526                 ve = tsubst_expr (ve, args, complain, in_decl,
9527                                   /*constant_expression_p=*/false);
9528                 SET_DECL_VALUE_EXPR (r, ve);
9529               }
9530           }
9531         else if (DECL_SELF_REFERENCE_P (t))
9532           SET_DECL_SELF_REFERENCE_P (r);
9533         TREE_TYPE (r) = type;
9534         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9535         DECL_CONTEXT (r) = ctx;
9536         /* Clear out the mangled name and RTL for the instantiation.  */
9537         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9538         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9539           SET_DECL_RTL (r, NULL_RTX);
9540         /* The initializer must not be expanded until it is required;
9541            see [temp.inst].  */
9542         DECL_INITIAL (r) = NULL_TREE;
9543         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9544           SET_DECL_RTL (r, NULL_RTX);
9545         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
9546         if (TREE_CODE (r) == VAR_DECL)
9547           {
9548             /* Possibly limit visibility based on template args.  */
9549             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9550             if (DECL_VISIBILITY_SPECIFIED (t))
9551               {
9552                 DECL_VISIBILITY_SPECIFIED (r) = 0;
9553                 DECL_ATTRIBUTES (r)
9554                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9555               }
9556             determine_visibility (r);
9557           }
9558
9559         if (!local_p)
9560           {
9561             /* A static data member declaration is always marked
9562                external when it is declared in-class, even if an
9563                initializer is present.  We mimic the non-template
9564                processing here.  */
9565             DECL_EXTERNAL (r) = 1;
9566
9567             register_specialization (r, gen_tmpl, argvec, false, hash);
9568             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
9569             SET_DECL_IMPLICIT_INSTANTIATION (r);
9570           }
9571         else if (cp_unevaluated_operand)
9572           {
9573             /* We're substituting this var in a decltype outside of its
9574                scope, such as for a lambda return type.  Don't add it to
9575                local_specializations, do perform auto deduction.  */
9576             tree auto_node = type_uses_auto (type);
9577             tree init
9578               = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
9579                              /*constant_expression_p=*/false);
9580
9581             if (auto_node && init && describable_type (init))
9582               {
9583                 type = do_auto_deduction (type, init, auto_node);
9584                 TREE_TYPE (r) = type;
9585               }
9586           }
9587         else
9588           register_local_specialization (r, t);
9589
9590         TREE_CHAIN (r) = NULL_TREE;
9591
9592         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
9593                                         /*flags=*/0,
9594                                         args, complain, in_decl);
9595
9596         /* Preserve a typedef that names a type.  */
9597         if (is_typedef_decl (r))
9598           {
9599             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
9600             set_underlying_type (r);
9601           }
9602
9603         layout_decl (r, 0);
9604       }
9605       break;
9606
9607     default:
9608       gcc_unreachable ();
9609     }
9610 #undef RETURN
9611
9612  out:
9613   /* Restore the file and line information.  */
9614   input_location = saved_loc;
9615
9616   return r;
9617 }
9618
9619 /* Substitute into the ARG_TYPES of a function type.  */
9620
9621 static tree
9622 tsubst_arg_types (tree arg_types,
9623                   tree args,
9624                   tsubst_flags_t complain,
9625                   tree in_decl)
9626 {
9627   tree remaining_arg_types;
9628   tree type = NULL_TREE;
9629   int i = 1;
9630   tree expanded_args = NULL_TREE;
9631   tree default_arg;
9632
9633   if (!arg_types || arg_types == void_list_node)
9634     return arg_types;
9635
9636   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
9637                                           args, complain, in_decl);
9638   if (remaining_arg_types == error_mark_node)
9639     return error_mark_node;
9640
9641   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
9642     {
9643       /* For a pack expansion, perform substitution on the
9644          entire expression. Later on, we'll handle the arguments
9645          one-by-one.  */
9646       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
9647                                             args, complain, in_decl);
9648
9649       if (TREE_CODE (expanded_args) == TREE_VEC)
9650         /* So that we'll spin through the parameters, one by one.  */
9651         i = TREE_VEC_LENGTH (expanded_args);
9652       else
9653         {
9654           /* We only partially substituted into the parameter
9655              pack. Our type is TYPE_PACK_EXPANSION.  */
9656           type = expanded_args;
9657           expanded_args = NULL_TREE;
9658         }
9659     }
9660
9661   while (i > 0) {
9662     --i;
9663     
9664     if (expanded_args)
9665       type = TREE_VEC_ELT (expanded_args, i);
9666     else if (!type)
9667       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
9668
9669     if (type == error_mark_node)
9670       return error_mark_node;
9671     if (VOID_TYPE_P (type))
9672       {
9673         if (complain & tf_error)
9674           {
9675             error ("invalid parameter type %qT", type);
9676             if (in_decl)
9677               error ("in declaration %q+D", in_decl);
9678           }
9679         return error_mark_node;
9680     }
9681     
9682     /* Do array-to-pointer, function-to-pointer conversion, and ignore
9683        top-level qualifiers as required.  */
9684     type = TYPE_MAIN_VARIANT (type_decays_to (type));
9685
9686     /* We do not substitute into default arguments here.  The standard
9687        mandates that they be instantiated only when needed, which is
9688        done in build_over_call.  */
9689     default_arg = TREE_PURPOSE (arg_types);
9690
9691     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
9692       {
9693         /* We've instantiated a template before its default arguments
9694            have been parsed.  This can happen for a nested template
9695            class, and is not an error unless we require the default
9696            argument in a call of this function.  */
9697         remaining_arg_types = 
9698           tree_cons (default_arg, type, remaining_arg_types);
9699         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
9700                        remaining_arg_types);
9701       }
9702     else
9703       remaining_arg_types = 
9704         hash_tree_cons (default_arg, type, remaining_arg_types);
9705   }
9706         
9707   return remaining_arg_types;
9708 }
9709
9710 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
9711    *not* handle the exception-specification for FNTYPE, because the
9712    initial substitution of explicitly provided template parameters
9713    during argument deduction forbids substitution into the
9714    exception-specification:
9715
9716      [temp.deduct]
9717
9718      All references in the function type of the function template to  the
9719      corresponding template parameters are replaced by the specified tem-
9720      plate argument values.  If a substitution in a template parameter or
9721      in  the function type of the function template results in an invalid
9722      type, type deduction fails.  [Note: The equivalent  substitution  in
9723      exception specifications is done only when the function is instanti-
9724      ated, at which point a program is  ill-formed  if  the  substitution
9725      results in an invalid type.]  */
9726
9727 static tree
9728 tsubst_function_type (tree t,
9729                       tree args,
9730                       tsubst_flags_t complain,
9731                       tree in_decl)
9732 {
9733   tree return_type;
9734   tree arg_types;
9735   tree fntype;
9736
9737   /* The TYPE_CONTEXT is not used for function/method types.  */
9738   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
9739
9740   /* Substitute the return type.  */
9741   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9742   if (return_type == error_mark_node)
9743     return error_mark_node;
9744   /* The standard does not presently indicate that creation of a
9745      function type with an invalid return type is a deduction failure.
9746      However, that is clearly analogous to creating an array of "void"
9747      or a reference to a reference.  This is core issue #486.  */
9748   if (TREE_CODE (return_type) == ARRAY_TYPE
9749       || TREE_CODE (return_type) == FUNCTION_TYPE)
9750     {
9751       if (complain & tf_error)
9752         {
9753           if (TREE_CODE (return_type) == ARRAY_TYPE)
9754             error ("function returning an array");
9755           else
9756             error ("function returning a function");
9757         }
9758       return error_mark_node;
9759     }
9760
9761   /* Substitute the argument types.  */
9762   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
9763                                 complain, in_decl);
9764   if (arg_types == error_mark_node)
9765     return error_mark_node;
9766
9767   /* Construct a new type node and return it.  */
9768   if (TREE_CODE (t) == FUNCTION_TYPE)
9769     fntype = build_function_type (return_type, arg_types);
9770   else
9771     {
9772       tree r = TREE_TYPE (TREE_VALUE (arg_types));
9773       if (! MAYBE_CLASS_TYPE_P (r))
9774         {
9775           /* [temp.deduct]
9776
9777              Type deduction may fail for any of the following
9778              reasons:
9779
9780              -- Attempting to create "pointer to member of T" when T
9781              is not a class type.  */
9782           if (complain & tf_error)
9783             error ("creating pointer to member function of non-class type %qT",
9784                       r);
9785           return error_mark_node;
9786         }
9787
9788       fntype = build_method_type_directly (r, return_type,
9789                                            TREE_CHAIN (arg_types));
9790     }
9791   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
9792   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
9793
9794   return fntype;
9795 }
9796
9797 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
9798    ARGS into that specification, and return the substituted
9799    specification.  If there is no specification, return NULL_TREE.  */
9800
9801 static tree
9802 tsubst_exception_specification (tree fntype,
9803                                 tree args,
9804                                 tsubst_flags_t complain,
9805                                 tree in_decl)
9806 {
9807   tree specs;
9808   tree new_specs;
9809
9810   specs = TYPE_RAISES_EXCEPTIONS (fntype);
9811   new_specs = NULL_TREE;
9812   if (specs)
9813     {
9814       if (! TREE_VALUE (specs))
9815         new_specs = specs;
9816       else
9817         while (specs)
9818           {
9819             tree spec;
9820             int i, len = 1;
9821             tree expanded_specs = NULL_TREE;
9822
9823             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
9824               {
9825                 /* Expand the pack expansion type.  */
9826                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
9827                                                        args, complain,
9828                                                        in_decl);
9829
9830                 if (expanded_specs == error_mark_node)
9831                   return error_mark_node;
9832                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
9833                   len = TREE_VEC_LENGTH (expanded_specs);
9834                 else
9835                   {
9836                     /* We're substituting into a member template, so
9837                        we got a TYPE_PACK_EXPANSION back.  Add that
9838                        expansion and move on.  */
9839                     gcc_assert (TREE_CODE (expanded_specs) 
9840                                 == TYPE_PACK_EXPANSION);
9841                     new_specs = add_exception_specifier (new_specs,
9842                                                          expanded_specs,
9843                                                          complain);
9844                     specs = TREE_CHAIN (specs);
9845                     continue;
9846                   }
9847               }
9848
9849             for (i = 0; i < len; ++i)
9850               {
9851                 if (expanded_specs)
9852                   spec = TREE_VEC_ELT (expanded_specs, i);
9853                 else
9854                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
9855                 if (spec == error_mark_node)
9856                   return spec;
9857                 new_specs = add_exception_specifier (new_specs, spec, 
9858                                                      complain);
9859               }
9860
9861             specs = TREE_CHAIN (specs);
9862           }
9863     }
9864   return new_specs;
9865 }
9866
9867 /* Take the tree structure T and replace template parameters used
9868    therein with the argument vector ARGS.  IN_DECL is an associated
9869    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
9870    Issue error and warning messages under control of COMPLAIN.  Note
9871    that we must be relatively non-tolerant of extensions here, in
9872    order to preserve conformance; if we allow substitutions that
9873    should not be allowed, we may allow argument deductions that should
9874    not succeed, and therefore report ambiguous overload situations
9875    where there are none.  In theory, we could allow the substitution,
9876    but indicate that it should have failed, and allow our caller to
9877    make sure that the right thing happens, but we don't try to do this
9878    yet.
9879
9880    This function is used for dealing with types, decls and the like;
9881    for expressions, use tsubst_expr or tsubst_copy.  */
9882
9883 tree
9884 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9885 {
9886   tree type, r;
9887
9888   if (t == NULL_TREE || t == error_mark_node
9889       || t == integer_type_node
9890       || t == void_type_node
9891       || t == char_type_node
9892       || t == unknown_type_node
9893       || TREE_CODE (t) == NAMESPACE_DECL)
9894     return t;
9895
9896   if (DECL_P (t))
9897     return tsubst_decl (t, args, complain);
9898
9899   if (args == NULL_TREE)
9900     return t;
9901
9902   if (TREE_CODE (t) == IDENTIFIER_NODE)
9903     type = IDENTIFIER_TYPE_VALUE (t);
9904   else
9905     type = TREE_TYPE (t);
9906
9907   gcc_assert (type != unknown_type_node);
9908
9909   /* Reuse typedefs.  We need to do this to handle dependent attributes,
9910      such as attribute aligned.  */
9911   if (TYPE_P (t)
9912       && TYPE_NAME (t)
9913       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
9914     {
9915       tree decl = TYPE_NAME (t);
9916       
9917       if (DECL_CLASS_SCOPE_P (decl)
9918           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
9919           && uses_template_parms (DECL_CONTEXT (decl)))
9920         {
9921           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
9922           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
9923           r = retrieve_specialization (tmpl, gen_args, 0);
9924         }
9925       else if (DECL_FUNCTION_SCOPE_P (decl)
9926                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
9927                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
9928         r = retrieve_local_specialization (decl);
9929       else
9930         /* The typedef is from a non-template context.  */
9931         return t;
9932
9933       if (r)
9934         {
9935           r = TREE_TYPE (r);
9936           r = cp_build_qualified_type_real
9937             (r, cp_type_quals (t) | cp_type_quals (r),
9938              complain | tf_ignore_bad_quals);
9939           return r;
9940         }
9941       /* Else we must be instantiating the typedef, so fall through.  */
9942     }
9943
9944   if (type
9945       && TREE_CODE (t) != TYPENAME_TYPE
9946       && TREE_CODE (t) != TEMPLATE_TYPE_PARM
9947       && TREE_CODE (t) != IDENTIFIER_NODE
9948       && TREE_CODE (t) != FUNCTION_TYPE
9949       && TREE_CODE (t) != METHOD_TYPE)
9950     type = tsubst (type, args, complain, in_decl);
9951   if (type == error_mark_node)
9952     return error_mark_node;
9953
9954   switch (TREE_CODE (t))
9955     {
9956     case RECORD_TYPE:
9957     case UNION_TYPE:
9958     case ENUMERAL_TYPE:
9959       return tsubst_aggr_type (t, args, complain, in_decl,
9960                                /*entering_scope=*/0);
9961
9962     case ERROR_MARK:
9963     case IDENTIFIER_NODE:
9964     case VOID_TYPE:
9965     case REAL_TYPE:
9966     case COMPLEX_TYPE:
9967     case VECTOR_TYPE:
9968     case BOOLEAN_TYPE:
9969     case INTEGER_CST:
9970     case REAL_CST:
9971     case STRING_CST:
9972       return t;
9973
9974     case INTEGER_TYPE:
9975       if (t == integer_type_node)
9976         return t;
9977
9978       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
9979           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
9980         return t;
9981
9982       {
9983         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
9984
9985         max = tsubst_expr (omax, args, complain, in_decl,
9986                            /*integral_constant_expression_p=*/false);
9987
9988         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
9989            needed.  */
9990         if (TREE_CODE (max) == NOP_EXPR
9991             && TREE_SIDE_EFFECTS (omax)
9992             && !TREE_TYPE (max))
9993           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
9994
9995         max = fold_decl_constant_value (max);
9996
9997         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
9998            with TREE_SIDE_EFFECTS that indicates this is not an integral
9999            constant expression.  */
10000         if (processing_template_decl
10001             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10002           {
10003             gcc_assert (TREE_CODE (max) == NOP_EXPR);
10004             TREE_SIDE_EFFECTS (max) = 1;
10005           }
10006
10007         if (TREE_CODE (max) != INTEGER_CST
10008             && !at_function_scope_p ()
10009             && !TREE_SIDE_EFFECTS (max)
10010             && !value_dependent_expression_p (max))
10011           {
10012             if (complain & tf_error)
10013               error ("array bound is not an integer constant");
10014             return error_mark_node;
10015           }
10016
10017         /* [temp.deduct]
10018
10019            Type deduction may fail for any of the following
10020            reasons:
10021
10022              Attempting to create an array with a size that is
10023              zero or negative.  */
10024         if (integer_zerop (max) && !(complain & tf_error))
10025           /* We must fail if performing argument deduction (as
10026              indicated by the state of complain), so that
10027              another substitution can be found.  */
10028           return error_mark_node;
10029         else if (TREE_CODE (max) == INTEGER_CST
10030                  && INT_CST_LT (max, integer_zero_node))
10031           {
10032             if (complain & tf_error)
10033               error ("creating array with negative size (%qE)", max);
10034
10035             return error_mark_node;
10036           }
10037
10038         return compute_array_index_type (NULL_TREE, max);
10039       }
10040
10041     case TEMPLATE_TYPE_PARM:
10042     case TEMPLATE_TEMPLATE_PARM:
10043     case BOUND_TEMPLATE_TEMPLATE_PARM:
10044     case TEMPLATE_PARM_INDEX:
10045       {
10046         int idx;
10047         int level;
10048         int levels;
10049         tree arg = NULL_TREE;
10050
10051         r = NULL_TREE;
10052
10053         gcc_assert (TREE_VEC_LENGTH (args) > 0);
10054         template_parm_level_and_index (t, &level, &idx); 
10055
10056         levels = TMPL_ARGS_DEPTH (args);
10057         if (level <= levels)
10058           {
10059             arg = TMPL_ARG (args, level, idx);
10060
10061             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10062               /* See through ARGUMENT_PACK_SELECT arguments. */
10063               arg = ARGUMENT_PACK_SELECT_ARG (arg);
10064           }
10065
10066         if (arg == error_mark_node)
10067           return error_mark_node;
10068         else if (arg != NULL_TREE)
10069           {
10070             if (ARGUMENT_PACK_P (arg))
10071               /* If ARG is an argument pack, we don't actually want to
10072                  perform a substitution here, because substitutions
10073                  for argument packs are only done
10074                  element-by-element. We can get to this point when
10075                  substituting the type of a non-type template
10076                  parameter pack, when that type actually contains
10077                  template parameter packs from an outer template, e.g.,
10078
10079                  template<typename... Types> struct A {
10080                    template<Types... Values> struct B { };
10081                  };  */
10082               return t;
10083
10084             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
10085               {
10086                 int quals;
10087                 gcc_assert (TYPE_P (arg));
10088
10089                 /* cv-quals from the template are discarded when
10090                    substituting in a function or reference type.  */
10091                 if (TREE_CODE (arg) == FUNCTION_TYPE
10092                     || TREE_CODE (arg) == METHOD_TYPE
10093                     || TREE_CODE (arg) == REFERENCE_TYPE)
10094                   quals = cp_type_quals (arg);
10095                 else
10096                   quals = cp_type_quals (arg) | cp_type_quals (t);
10097                   
10098                 return cp_build_qualified_type_real
10099                   (arg, quals, complain | tf_ignore_bad_quals);
10100               }
10101             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
10102               {
10103                 /* We are processing a type constructed from a
10104                    template template parameter.  */
10105                 tree argvec = tsubst (TYPE_TI_ARGS (t),
10106                                       args, complain, in_decl);
10107                 if (argvec == error_mark_node)
10108                   return error_mark_node;
10109
10110                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10111                    are resolving nested-types in the signature of a
10112                    member function templates.  Otherwise ARG is a
10113                    TEMPLATE_DECL and is the real template to be
10114                    instantiated.  */
10115                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10116                   arg = TYPE_NAME (arg);
10117
10118                 r = lookup_template_class (arg,
10119                                            argvec, in_decl,
10120                                            DECL_CONTEXT (arg),
10121                                             /*entering_scope=*/0,
10122                                            complain);
10123                 return cp_build_qualified_type_real
10124                   (r, TYPE_QUALS (t), complain);
10125               }
10126             else
10127               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
10128               return arg;
10129           }
10130
10131         if (level == 1)
10132           /* This can happen during the attempted tsubst'ing in
10133              unify.  This means that we don't yet have any information
10134              about the template parameter in question.  */
10135           return t;
10136
10137         /* If we get here, we must have been looking at a parm for a
10138            more deeply nested template.  Make a new version of this
10139            template parameter, but with a lower level.  */
10140         switch (TREE_CODE (t))
10141           {
10142           case TEMPLATE_TYPE_PARM:
10143           case TEMPLATE_TEMPLATE_PARM:
10144           case BOUND_TEMPLATE_TEMPLATE_PARM:
10145             if (cp_type_quals (t))
10146               {
10147                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
10148                 r = cp_build_qualified_type_real
10149                   (r, cp_type_quals (t),
10150                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
10151                                ? tf_ignore_bad_quals : 0));
10152               }
10153             else
10154               {
10155                 r = copy_type (t);
10156                 TEMPLATE_TYPE_PARM_INDEX (r)
10157                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
10158                                                 r, levels, args, complain);
10159                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
10160                 TYPE_MAIN_VARIANT (r) = r;
10161                 TYPE_POINTER_TO (r) = NULL_TREE;
10162                 TYPE_REFERENCE_TO (r) = NULL_TREE;
10163
10164                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
10165                   /* We have reduced the level of the template
10166                      template parameter, but not the levels of its
10167                      template parameters, so canonical_type_parameter
10168                      will not be able to find the canonical template
10169                      template parameter for this level. Thus, we
10170                      require structural equality checking to compare
10171                      TEMPLATE_TEMPLATE_PARMs. */
10172                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10173                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
10174                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10175                 else
10176                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
10177
10178                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
10179                   {
10180                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
10181                                           complain, in_decl);
10182                     if (argvec == error_mark_node)
10183                       return error_mark_node;
10184
10185                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
10186                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
10187                   }
10188               }
10189             break;
10190
10191           case TEMPLATE_PARM_INDEX:
10192             r = reduce_template_parm_level (t, type, levels, args, complain);
10193             break;
10194
10195           default:
10196             gcc_unreachable ();
10197           }
10198
10199         return r;
10200       }
10201
10202     case TREE_LIST:
10203       {
10204         tree purpose, value, chain;
10205
10206         if (t == void_list_node)
10207           return t;
10208
10209         purpose = TREE_PURPOSE (t);
10210         if (purpose)
10211           {
10212             purpose = tsubst (purpose, args, complain, in_decl);
10213             if (purpose == error_mark_node)
10214               return error_mark_node;
10215           }
10216         value = TREE_VALUE (t);
10217         if (value)
10218           {
10219             value = tsubst (value, args, complain, in_decl);
10220             if (value == error_mark_node)
10221               return error_mark_node;
10222           }
10223         chain = TREE_CHAIN (t);
10224         if (chain && chain != void_type_node)
10225           {
10226             chain = tsubst (chain, args, complain, in_decl);
10227             if (chain == error_mark_node)
10228               return error_mark_node;
10229           }
10230         if (purpose == TREE_PURPOSE (t)
10231             && value == TREE_VALUE (t)
10232             && chain == TREE_CHAIN (t))
10233           return t;
10234         return hash_tree_cons (purpose, value, chain);
10235       }
10236
10237     case TREE_BINFO:
10238       /* We should never be tsubsting a binfo.  */
10239       gcc_unreachable ();
10240
10241     case TREE_VEC:
10242       /* A vector of template arguments.  */
10243       gcc_assert (!type);
10244       return tsubst_template_args (t, args, complain, in_decl);
10245
10246     case POINTER_TYPE:
10247     case REFERENCE_TYPE:
10248       {
10249         enum tree_code code;
10250
10251         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
10252           return t;
10253
10254         code = TREE_CODE (t);
10255
10256
10257         /* [temp.deduct]
10258
10259            Type deduction may fail for any of the following
10260            reasons:
10261
10262            -- Attempting to create a pointer to reference type.
10263            -- Attempting to create a reference to a reference type or
10264               a reference to void.
10265
10266           Core issue 106 says that creating a reference to a reference
10267           during instantiation is no longer a cause for failure. We
10268           only enforce this check in strict C++98 mode.  */
10269         if ((TREE_CODE (type) == REFERENCE_TYPE
10270              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
10271             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
10272           {
10273             static location_t last_loc;
10274
10275             /* We keep track of the last time we issued this error
10276                message to avoid spewing a ton of messages during a
10277                single bad template instantiation.  */
10278             if (complain & tf_error
10279                 && last_loc != input_location)
10280               {
10281                 if (TREE_CODE (type) == VOID_TYPE)
10282                   error ("forming reference to void");
10283                else if (code == POINTER_TYPE)
10284                  error ("forming pointer to reference type %qT", type);
10285                else
10286                   error ("forming reference to reference type %qT", type);
10287                 last_loc = input_location;
10288               }
10289
10290             return error_mark_node;
10291           }
10292         else if (code == POINTER_TYPE)
10293           {
10294             r = build_pointer_type (type);
10295             if (TREE_CODE (type) == METHOD_TYPE)
10296               r = build_ptrmemfunc_type (r);
10297           }
10298         else if (TREE_CODE (type) == REFERENCE_TYPE)
10299           /* In C++0x, during template argument substitution, when there is an
10300              attempt to create a reference to a reference type, reference
10301              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
10302
10303              "If a template-argument for a template-parameter T names a type
10304              that is a reference to a type A, an attempt to create the type
10305              'lvalue reference to cv T' creates the type 'lvalue reference to
10306              A,' while an attempt to create the type type rvalue reference to
10307              cv T' creates the type T"
10308           */
10309           r = cp_build_reference_type
10310               (TREE_TYPE (type),
10311                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
10312         else
10313           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
10314         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
10315
10316         if (r != error_mark_node)
10317           /* Will this ever be needed for TYPE_..._TO values?  */
10318           layout_type (r);
10319
10320         return r;
10321       }
10322     case OFFSET_TYPE:
10323       {
10324         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
10325         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
10326           {
10327             /* [temp.deduct]
10328
10329                Type deduction may fail for any of the following
10330                reasons:
10331
10332                -- Attempting to create "pointer to member of T" when T
10333                   is not a class type.  */
10334             if (complain & tf_error)
10335               error ("creating pointer to member of non-class type %qT", r);
10336             return error_mark_node;
10337           }
10338         if (TREE_CODE (type) == REFERENCE_TYPE)
10339           {
10340             if (complain & tf_error)
10341               error ("creating pointer to member reference type %qT", type);
10342             return error_mark_node;
10343           }
10344         if (TREE_CODE (type) == VOID_TYPE)
10345           {
10346             if (complain & tf_error)
10347               error ("creating pointer to member of type void");
10348             return error_mark_node;
10349           }
10350         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10351         if (TREE_CODE (type) == FUNCTION_TYPE)
10352           {
10353             /* The type of the implicit object parameter gets its
10354                cv-qualifiers from the FUNCTION_TYPE. */
10355             tree memptr;
10356             tree method_type = build_memfn_type (type, r, cp_type_quals (type));
10357             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
10358             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
10359                                                  complain);
10360           }
10361         else
10362           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
10363                                                TYPE_QUALS (t),
10364                                                complain);
10365       }
10366     case FUNCTION_TYPE:
10367     case METHOD_TYPE:
10368       {
10369         tree fntype;
10370         tree specs;
10371         fntype = tsubst_function_type (t, args, complain, in_decl);
10372         if (fntype == error_mark_node)
10373           return error_mark_node;
10374
10375         /* Substitute the exception specification.  */
10376         specs = tsubst_exception_specification (t, args, complain,
10377                                                 in_decl);
10378         if (specs == error_mark_node)
10379           return error_mark_node;
10380         if (specs)
10381           fntype = build_exception_variant (fntype, specs);
10382         return fntype;
10383       }
10384     case ARRAY_TYPE:
10385       {
10386         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
10387         if (domain == error_mark_node)
10388           return error_mark_node;
10389
10390         /* As an optimization, we avoid regenerating the array type if
10391            it will obviously be the same as T.  */
10392         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
10393           return t;
10394
10395         /* These checks should match the ones in grokdeclarator.
10396
10397            [temp.deduct]
10398
10399            The deduction may fail for any of the following reasons:
10400
10401            -- Attempting to create an array with an element type that
10402               is void, a function type, or a reference type, or [DR337]
10403               an abstract class type.  */
10404         if (TREE_CODE (type) == VOID_TYPE
10405             || TREE_CODE (type) == FUNCTION_TYPE
10406             || TREE_CODE (type) == REFERENCE_TYPE)
10407           {
10408             if (complain & tf_error)
10409               error ("creating array of %qT", type);
10410             return error_mark_node;
10411           }
10412         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
10413           {
10414             if (complain & tf_error)
10415               error ("creating array of %qT, which is an abstract class type",
10416                      type);
10417             return error_mark_node;
10418           }
10419
10420         r = build_cplus_array_type (type, domain);
10421
10422         if (TYPE_USER_ALIGN (t))
10423           {
10424             TYPE_ALIGN (r) = TYPE_ALIGN (t);
10425             TYPE_USER_ALIGN (r) = 1;
10426           }
10427
10428         return r;
10429       }
10430
10431     case PLUS_EXPR:
10432     case MINUS_EXPR:
10433       {
10434         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10435         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
10436
10437         if (e1 == error_mark_node || e2 == error_mark_node)
10438           return error_mark_node;
10439
10440         return fold_build2_loc (input_location,
10441                             TREE_CODE (t), TREE_TYPE (t), e1, e2);
10442       }
10443
10444     case NEGATE_EXPR:
10445     case NOP_EXPR:
10446       {
10447         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10448         if (e == error_mark_node)
10449           return error_mark_node;
10450
10451         return fold_build1_loc (input_location, TREE_CODE (t), TREE_TYPE (t), e);
10452       }
10453
10454     case TYPENAME_TYPE:
10455       {
10456         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10457                                      in_decl, /*entering_scope=*/1);
10458         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
10459                               complain, in_decl);
10460
10461         if (ctx == error_mark_node || f == error_mark_node)
10462           return error_mark_node;
10463
10464         if (!MAYBE_CLASS_TYPE_P (ctx))
10465           {
10466             if (complain & tf_error)
10467               error ("%qT is not a class, struct, or union type", ctx);
10468             return error_mark_node;
10469           }
10470         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
10471           {
10472             /* Normally, make_typename_type does not require that the CTX
10473                have complete type in order to allow things like:
10474
10475                  template <class T> struct S { typename S<T>::X Y; };
10476
10477                But, such constructs have already been resolved by this
10478                point, so here CTX really should have complete type, unless
10479                it's a partial instantiation.  */
10480             if (!(complain & tf_no_class_instantiations))
10481               ctx = complete_type (ctx);
10482             if (!COMPLETE_TYPE_P (ctx))
10483               {
10484                 if (complain & tf_error)
10485                   cxx_incomplete_type_error (NULL_TREE, ctx);
10486                 return error_mark_node;
10487               }
10488           }
10489
10490         f = make_typename_type (ctx, f, typename_type,
10491                                 (complain & tf_error) | tf_keep_type_decl);
10492         if (f == error_mark_node)
10493           return f;
10494         if (TREE_CODE (f) == TYPE_DECL)
10495           {
10496             complain |= tf_ignore_bad_quals;
10497             f = TREE_TYPE (f);
10498           }
10499
10500         if (TREE_CODE (f) != TYPENAME_TYPE)
10501           {
10502             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10503               error ("%qT resolves to %qT, which is not an enumeration type",
10504                      t, f);
10505             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10506               error ("%qT resolves to %qT, which is is not a class type",
10507                      t, f);
10508           }
10509
10510         return cp_build_qualified_type_real
10511           (f, cp_type_quals (f) | cp_type_quals (t), complain);
10512       }
10513
10514     case UNBOUND_CLASS_TEMPLATE:
10515       {
10516         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10517                                      in_decl, /*entering_scope=*/1);
10518         tree name = TYPE_IDENTIFIER (t);
10519         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
10520
10521         if (ctx == error_mark_node || name == error_mark_node)
10522           return error_mark_node;
10523
10524         if (parm_list)
10525           parm_list = tsubst_template_parms (parm_list, args, complain);
10526         return make_unbound_class_template (ctx, name, parm_list, complain);
10527       }
10528
10529     case INDIRECT_REF:
10530     case ADDR_EXPR:
10531     case CALL_EXPR:
10532       gcc_unreachable ();
10533
10534     case ARRAY_REF:
10535       {
10536         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10537         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
10538                                /*integral_constant_expression_p=*/false);
10539         if (e1 == error_mark_node || e2 == error_mark_node)
10540           return error_mark_node;
10541
10542         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
10543       }
10544
10545     case SCOPE_REF:
10546       {
10547         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10548         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
10549         if (e1 == error_mark_node || e2 == error_mark_node)
10550           return error_mark_node;
10551
10552         return build_qualified_name (/*type=*/NULL_TREE,
10553                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
10554       }
10555
10556     case TYPEOF_TYPE:
10557       {
10558         tree type;
10559
10560         ++cp_unevaluated_operand;
10561         ++c_inhibit_evaluation_warnings;
10562
10563         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
10564                             complain, in_decl,
10565                             /*integral_constant_expression_p=*/false);
10566
10567         --cp_unevaluated_operand;
10568         --c_inhibit_evaluation_warnings;
10569
10570         type = finish_typeof (type);
10571         return cp_build_qualified_type_real (type,
10572                                              cp_type_quals (t)
10573                                              | cp_type_quals (type),
10574                                              complain);
10575       }
10576
10577     case DECLTYPE_TYPE:
10578       {
10579         tree type;
10580
10581         ++cp_unevaluated_operand;
10582         ++c_inhibit_evaluation_warnings;
10583
10584         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
10585                             complain, in_decl,
10586                             /*integral_constant_expression_p=*/false);
10587
10588         --cp_unevaluated_operand;
10589         --c_inhibit_evaluation_warnings;
10590
10591         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
10592           type = lambda_capture_field_type (type);
10593         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
10594           type = lambda_return_type (type);
10595         else
10596           type = finish_decltype_type
10597             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
10598         return cp_build_qualified_type_real (type,
10599                                              cp_type_quals (t)
10600                                              | cp_type_quals (type),
10601                                              complain);
10602       }
10603
10604     case TYPE_ARGUMENT_PACK:
10605     case NONTYPE_ARGUMENT_PACK:
10606       {
10607         tree r = TYPE_P (t)
10608           ? cxx_make_type (TREE_CODE (t))
10609           : make_node (TREE_CODE (t));
10610         tree packed_out = 
10611           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
10612                                 args,
10613                                 complain,
10614                                 in_decl);
10615         SET_ARGUMENT_PACK_ARGS (r, packed_out);
10616
10617         /* For template nontype argument packs, also substitute into
10618            the type.  */
10619         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
10620           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
10621
10622         return r;
10623       }
10624       break;
10625
10626     default:
10627       sorry ("use of %qs in template",
10628              tree_code_name [(int) TREE_CODE (t)]);
10629       return error_mark_node;
10630     }
10631 }
10632
10633 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
10634    type of the expression on the left-hand side of the "." or "->"
10635    operator.  */
10636
10637 static tree
10638 tsubst_baselink (tree baselink, tree object_type,
10639                  tree args, tsubst_flags_t complain, tree in_decl)
10640 {
10641     tree name;
10642     tree qualifying_scope;
10643     tree fns;
10644     tree optype;
10645     tree template_args = 0;
10646     bool template_id_p = false;
10647
10648     /* A baselink indicates a function from a base class.  Both the
10649        BASELINK_ACCESS_BINFO and the base class referenced may
10650        indicate bases of the template class, rather than the
10651        instantiated class.  In addition, lookups that were not
10652        ambiguous before may be ambiguous now.  Therefore, we perform
10653        the lookup again.  */
10654     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
10655     qualifying_scope = tsubst (qualifying_scope, args,
10656                                complain, in_decl);
10657     fns = BASELINK_FUNCTIONS (baselink);
10658     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
10659     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
10660       {
10661         template_id_p = true;
10662         template_args = TREE_OPERAND (fns, 1);
10663         fns = TREE_OPERAND (fns, 0);
10664         if (template_args)
10665           template_args = tsubst_template_args (template_args, args,
10666                                                 complain, in_decl);
10667       }
10668     name = DECL_NAME (get_first_fn (fns));
10669     if (IDENTIFIER_TYPENAME_P (name))
10670       name = mangle_conv_op_name_for_type (optype);
10671     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
10672
10673     /* If lookup found a single function, mark it as used at this
10674        point.  (If it lookup found multiple functions the one selected
10675        later by overload resolution will be marked as used at that
10676        point.)  */
10677     if (BASELINK_P (baselink))
10678       fns = BASELINK_FUNCTIONS (baselink);
10679     if (!template_id_p && !really_overloaded_fn (fns))
10680       mark_used (OVL_CURRENT (fns));
10681
10682     /* Add back the template arguments, if present.  */
10683     if (BASELINK_P (baselink) && template_id_p)
10684       BASELINK_FUNCTIONS (baselink)
10685         = build_nt (TEMPLATE_ID_EXPR,
10686                     BASELINK_FUNCTIONS (baselink),
10687                     template_args);
10688     /* Update the conversion operator type.  */
10689     BASELINK_OPTYPE (baselink) = optype;
10690
10691     if (!object_type)
10692       object_type = current_class_type;
10693     return adjust_result_of_qualified_name_lookup (baselink,
10694                                                    qualifying_scope,
10695                                                    object_type);
10696 }
10697
10698 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
10699    true if the qualified-id will be a postfix-expression in-and-of
10700    itself; false if more of the postfix-expression follows the
10701    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
10702    of "&".  */
10703
10704 static tree
10705 tsubst_qualified_id (tree qualified_id, tree args,
10706                      tsubst_flags_t complain, tree in_decl,
10707                      bool done, bool address_p)
10708 {
10709   tree expr;
10710   tree scope;
10711   tree name;
10712   bool is_template;
10713   tree template_args;
10714
10715   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
10716
10717   /* Figure out what name to look up.  */
10718   name = TREE_OPERAND (qualified_id, 1);
10719   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
10720     {
10721       is_template = true;
10722       template_args = TREE_OPERAND (name, 1);
10723       if (template_args)
10724         template_args = tsubst_template_args (template_args, args,
10725                                               complain, in_decl);
10726       name = TREE_OPERAND (name, 0);
10727     }
10728   else
10729     {
10730       is_template = false;
10731       template_args = NULL_TREE;
10732     }
10733
10734   /* Substitute into the qualifying scope.  When there are no ARGS, we
10735      are just trying to simplify a non-dependent expression.  In that
10736      case the qualifying scope may be dependent, and, in any case,
10737      substituting will not help.  */
10738   scope = TREE_OPERAND (qualified_id, 0);
10739   if (args)
10740     {
10741       scope = tsubst (scope, args, complain, in_decl);
10742       expr = tsubst_copy (name, args, complain, in_decl);
10743     }
10744   else
10745     expr = name;
10746
10747   if (dependent_scope_p (scope))
10748     return build_qualified_name (NULL_TREE, scope, expr,
10749                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
10750
10751   if (!BASELINK_P (name) && !DECL_P (expr))
10752     {
10753       if (TREE_CODE (expr) == BIT_NOT_EXPR)
10754         {
10755           /* A BIT_NOT_EXPR is used to represent a destructor.  */
10756           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
10757             {
10758               error ("qualifying type %qT does not match destructor name ~%qT",
10759                      scope, TREE_OPERAND (expr, 0));
10760               expr = error_mark_node;
10761             }
10762           else
10763             expr = lookup_qualified_name (scope, complete_dtor_identifier,
10764                                           /*is_type_p=*/0, false);
10765         }
10766       else
10767         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
10768       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
10769                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
10770         {
10771           if (complain & tf_error)
10772             {
10773               error ("dependent-name %qE is parsed as a non-type, but "
10774                      "instantiation yields a type", qualified_id);
10775               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
10776             }
10777           return error_mark_node;
10778         }
10779     }
10780
10781   if (DECL_P (expr))
10782     {
10783       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
10784                                            scope);
10785       /* Remember that there was a reference to this entity.  */
10786       mark_used (expr);
10787     }
10788
10789   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
10790     {
10791       if (complain & tf_error)
10792         qualified_name_lookup_error (scope,
10793                                      TREE_OPERAND (qualified_id, 1),
10794                                      expr, input_location);
10795       return error_mark_node;
10796     }
10797
10798   if (is_template)
10799     expr = lookup_template_function (expr, template_args);
10800
10801   if (expr == error_mark_node && complain & tf_error)
10802     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
10803                                  expr, input_location);
10804   else if (TYPE_P (scope))
10805     {
10806       expr = (adjust_result_of_qualified_name_lookup
10807               (expr, scope, current_class_type));
10808       expr = (finish_qualified_id_expr
10809               (scope, expr, done, address_p,
10810                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
10811                /*template_arg_p=*/false));
10812     }
10813
10814   /* Expressions do not generally have reference type.  */
10815   if (TREE_CODE (expr) != SCOPE_REF
10816       /* However, if we're about to form a pointer-to-member, we just
10817          want the referenced member referenced.  */
10818       && TREE_CODE (expr) != OFFSET_REF)
10819     expr = convert_from_reference (expr);
10820
10821   return expr;
10822 }
10823
10824 /* Like tsubst, but deals with expressions.  This function just replaces
10825    template parms; to finish processing the resultant expression, use
10826    tsubst_expr.  */
10827
10828 static tree
10829 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10830 {
10831   enum tree_code code;
10832   tree r;
10833
10834   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
10835     return t;
10836
10837   code = TREE_CODE (t);
10838
10839   switch (code)
10840     {
10841     case PARM_DECL:
10842       r = retrieve_local_specialization (t);
10843
10844       if (r == NULL)
10845         {
10846           tree c;
10847           /* This can happen for a parameter name used later in a function
10848              declaration (such as in a late-specified return type).  Just
10849              make a dummy decl, since it's only used for its type.  */
10850           gcc_assert (cp_unevaluated_operand != 0);
10851           /* We copy T because want to tsubst the PARM_DECL only,
10852              not the following PARM_DECLs that are chained to T.  */
10853           c = copy_node (t);
10854           r = tsubst_decl (c, args, complain);
10855           /* Give it the template pattern as its context; its true context
10856              hasn't been instantiated yet and this is good enough for
10857              mangling.  */
10858           DECL_CONTEXT (r) = DECL_CONTEXT (t);
10859         }
10860       
10861       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
10862         r = ARGUMENT_PACK_SELECT_ARG (r);
10863       mark_used (r);
10864       return r;
10865
10866     case CONST_DECL:
10867       {
10868         tree enum_type;
10869         tree v;
10870
10871         if (DECL_TEMPLATE_PARM_P (t))
10872           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
10873         /* There is no need to substitute into namespace-scope
10874            enumerators.  */
10875         if (DECL_NAMESPACE_SCOPE_P (t))
10876           return t;
10877         /* If ARGS is NULL, then T is known to be non-dependent.  */
10878         if (args == NULL_TREE)
10879           return integral_constant_value (t);
10880
10881         /* Unfortunately, we cannot just call lookup_name here.
10882            Consider:
10883
10884              template <int I> int f() {
10885              enum E { a = I };
10886              struct S { void g() { E e = a; } };
10887              };
10888
10889            When we instantiate f<7>::S::g(), say, lookup_name is not
10890            clever enough to find f<7>::a.  */
10891         enum_type
10892           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
10893                               /*entering_scope=*/0);
10894
10895         for (v = TYPE_VALUES (enum_type);
10896              v != NULL_TREE;
10897              v = TREE_CHAIN (v))
10898           if (TREE_PURPOSE (v) == DECL_NAME (t))
10899             return TREE_VALUE (v);
10900
10901           /* We didn't find the name.  That should never happen; if
10902              name-lookup found it during preliminary parsing, we
10903              should find it again here during instantiation.  */
10904         gcc_unreachable ();
10905       }
10906       return t;
10907
10908     case FIELD_DECL:
10909       if (DECL_CONTEXT (t))
10910         {
10911           tree ctx;
10912
10913           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
10914                                   /*entering_scope=*/1);
10915           if (ctx != DECL_CONTEXT (t))
10916             {
10917               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
10918               if (!r)
10919                 {
10920                   if (complain & tf_error)
10921                     error ("using invalid field %qD", t);
10922                   return error_mark_node;
10923                 }
10924               return r;
10925             }
10926         }
10927
10928       return t;
10929
10930     case VAR_DECL:
10931     case FUNCTION_DECL:
10932       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
10933           || local_variable_p (t))
10934         t = tsubst (t, args, complain, in_decl);
10935       mark_used (t);
10936       return t;
10937
10938     case BASELINK:
10939       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
10940
10941     case TEMPLATE_DECL:
10942       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10943         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
10944                        args, complain, in_decl);
10945       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
10946         return tsubst (t, args, complain, in_decl);
10947       else if (DECL_CLASS_SCOPE_P (t)
10948                && uses_template_parms (DECL_CONTEXT (t)))
10949         {
10950           /* Template template argument like the following example need
10951              special treatment:
10952
10953                template <template <class> class TT> struct C {};
10954                template <class T> struct D {
10955                  template <class U> struct E {};
10956                  C<E> c;                                // #1
10957                };
10958                D<int> d;                                // #2
10959
10960              We are processing the template argument `E' in #1 for
10961              the template instantiation #2.  Originally, `E' is a
10962              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
10963              have to substitute this with one having context `D<int>'.  */
10964
10965           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
10966           return lookup_field (context, DECL_NAME(t), 0, false);
10967         }
10968       else
10969         /* Ordinary template template argument.  */
10970         return t;
10971
10972     case CAST_EXPR:
10973     case REINTERPRET_CAST_EXPR:
10974     case CONST_CAST_EXPR:
10975     case STATIC_CAST_EXPR:
10976     case DYNAMIC_CAST_EXPR:
10977     case NOP_EXPR:
10978       return build1
10979         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
10980          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
10981
10982     case SIZEOF_EXPR:
10983       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10984         {
10985           /* We only want to compute the number of arguments.  */
10986           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10987                                                 complain, in_decl);
10988           int len = 0;
10989
10990           if (TREE_CODE (expanded) == TREE_VEC)
10991             len = TREE_VEC_LENGTH (expanded);
10992
10993           if (expanded == error_mark_node)
10994             return error_mark_node;
10995           else if (PACK_EXPANSION_P (expanded)
10996                    || (TREE_CODE (expanded) == TREE_VEC
10997                        && len > 0
10998                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
10999             {
11000               if (TREE_CODE (expanded) == TREE_VEC)
11001                 expanded = TREE_VEC_ELT (expanded, len - 1);
11002
11003               if (TYPE_P (expanded))
11004                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
11005                                                    complain & tf_error);
11006               else
11007                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11008                                                    complain & tf_error);
11009             }
11010           else
11011             return build_int_cst (size_type_node, len);
11012         }
11013       /* Fall through */
11014
11015     case INDIRECT_REF:
11016     case NEGATE_EXPR:
11017     case TRUTH_NOT_EXPR:
11018     case BIT_NOT_EXPR:
11019     case ADDR_EXPR:
11020     case UNARY_PLUS_EXPR:      /* Unary + */
11021     case ALIGNOF_EXPR:
11022     case ARROW_EXPR:
11023     case THROW_EXPR:
11024     case TYPEID_EXPR:
11025     case REALPART_EXPR:
11026     case IMAGPART_EXPR:
11027       return build1
11028         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11029          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11030
11031     case COMPONENT_REF:
11032       {
11033         tree object;
11034         tree name;
11035
11036         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11037         name = TREE_OPERAND (t, 1);
11038         if (TREE_CODE (name) == BIT_NOT_EXPR)
11039           {
11040             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11041                                 complain, in_decl);
11042             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11043           }
11044         else if (TREE_CODE (name) == SCOPE_REF
11045                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11046           {
11047             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11048                                      complain, in_decl);
11049             name = TREE_OPERAND (name, 1);
11050             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11051                                 complain, in_decl);
11052             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11053             name = build_qualified_name (/*type=*/NULL_TREE,
11054                                          base, name,
11055                                          /*template_p=*/false);
11056           }
11057         else if (TREE_CODE (name) == BASELINK)
11058           name = tsubst_baselink (name,
11059                                   non_reference (TREE_TYPE (object)),
11060                                   args, complain,
11061                                   in_decl);
11062         else
11063           name = tsubst_copy (name, args, complain, in_decl);
11064         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11065       }
11066
11067     case PLUS_EXPR:
11068     case MINUS_EXPR:
11069     case MULT_EXPR:
11070     case TRUNC_DIV_EXPR:
11071     case CEIL_DIV_EXPR:
11072     case FLOOR_DIV_EXPR:
11073     case ROUND_DIV_EXPR:
11074     case EXACT_DIV_EXPR:
11075     case BIT_AND_EXPR:
11076     case BIT_IOR_EXPR:
11077     case BIT_XOR_EXPR:
11078     case TRUNC_MOD_EXPR:
11079     case FLOOR_MOD_EXPR:
11080     case TRUTH_ANDIF_EXPR:
11081     case TRUTH_ORIF_EXPR:
11082     case TRUTH_AND_EXPR:
11083     case TRUTH_OR_EXPR:
11084     case RSHIFT_EXPR:
11085     case LSHIFT_EXPR:
11086     case RROTATE_EXPR:
11087     case LROTATE_EXPR:
11088     case EQ_EXPR:
11089     case NE_EXPR:
11090     case MAX_EXPR:
11091     case MIN_EXPR:
11092     case LE_EXPR:
11093     case GE_EXPR:
11094     case LT_EXPR:
11095     case GT_EXPR:
11096     case COMPOUND_EXPR:
11097     case DOTSTAR_EXPR:
11098     case MEMBER_REF:
11099     case PREDECREMENT_EXPR:
11100     case PREINCREMENT_EXPR:
11101     case POSTDECREMENT_EXPR:
11102     case POSTINCREMENT_EXPR:
11103       return build_nt
11104         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11105          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11106
11107     case SCOPE_REF:
11108       return build_qualified_name (/*type=*/NULL_TREE,
11109                                    tsubst_copy (TREE_OPERAND (t, 0),
11110                                                 args, complain, in_decl),
11111                                    tsubst_copy (TREE_OPERAND (t, 1),
11112                                                 args, complain, in_decl),
11113                                    QUALIFIED_NAME_IS_TEMPLATE (t));
11114
11115     case ARRAY_REF:
11116       return build_nt
11117         (ARRAY_REF,
11118          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11119          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11120          NULL_TREE, NULL_TREE);
11121
11122     case CALL_EXPR:
11123       {
11124         int n = VL_EXP_OPERAND_LENGTH (t);
11125         tree result = build_vl_exp (CALL_EXPR, n);
11126         int i;
11127         for (i = 0; i < n; i++)
11128           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
11129                                              complain, in_decl);
11130         return result;
11131       }
11132
11133     case COND_EXPR:
11134     case MODOP_EXPR:
11135     case PSEUDO_DTOR_EXPR:
11136       {
11137         r = build_nt
11138           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11139            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11140            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11141         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11142         return r;
11143       }
11144
11145     case NEW_EXPR:
11146       {
11147         r = build_nt
11148         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11149          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11150          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11151         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
11152         return r;
11153       }
11154
11155     case DELETE_EXPR:
11156       {
11157         r = build_nt
11158         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11159          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11160         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
11161         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
11162         return r;
11163       }
11164
11165     case TEMPLATE_ID_EXPR:
11166       {
11167         /* Substituted template arguments */
11168         tree fn = TREE_OPERAND (t, 0);
11169         tree targs = TREE_OPERAND (t, 1);
11170
11171         fn = tsubst_copy (fn, args, complain, in_decl);
11172         if (targs)
11173           targs = tsubst_template_args (targs, args, complain, in_decl);
11174
11175         return lookup_template_function (fn, targs);
11176       }
11177
11178     case TREE_LIST:
11179       {
11180         tree purpose, value, chain;
11181
11182         if (t == void_list_node)
11183           return t;
11184
11185         purpose = TREE_PURPOSE (t);
11186         if (purpose)
11187           purpose = tsubst_copy (purpose, args, complain, in_decl);
11188         value = TREE_VALUE (t);
11189         if (value)
11190           value = tsubst_copy (value, args, complain, in_decl);
11191         chain = TREE_CHAIN (t);
11192         if (chain && chain != void_type_node)
11193           chain = tsubst_copy (chain, args, complain, in_decl);
11194         if (purpose == TREE_PURPOSE (t)
11195             && value == TREE_VALUE (t)
11196             && chain == TREE_CHAIN (t))
11197           return t;
11198         return tree_cons (purpose, value, chain);
11199       }
11200
11201     case RECORD_TYPE:
11202     case UNION_TYPE:
11203     case ENUMERAL_TYPE:
11204     case INTEGER_TYPE:
11205     case TEMPLATE_TYPE_PARM:
11206     case TEMPLATE_TEMPLATE_PARM:
11207     case BOUND_TEMPLATE_TEMPLATE_PARM:
11208     case TEMPLATE_PARM_INDEX:
11209     case POINTER_TYPE:
11210     case REFERENCE_TYPE:
11211     case OFFSET_TYPE:
11212     case FUNCTION_TYPE:
11213     case METHOD_TYPE:
11214     case ARRAY_TYPE:
11215     case TYPENAME_TYPE:
11216     case UNBOUND_CLASS_TEMPLATE:
11217     case TYPEOF_TYPE:
11218     case DECLTYPE_TYPE:
11219     case TYPE_DECL:
11220       return tsubst (t, args, complain, in_decl);
11221
11222     case IDENTIFIER_NODE:
11223       if (IDENTIFIER_TYPENAME_P (t))
11224         {
11225           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11226           return mangle_conv_op_name_for_type (new_type);
11227         }
11228       else
11229         return t;
11230
11231     case CONSTRUCTOR:
11232       /* This is handled by tsubst_copy_and_build.  */
11233       gcc_unreachable ();
11234
11235     case VA_ARG_EXPR:
11236       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
11237                                           in_decl),
11238                              tsubst (TREE_TYPE (t), args, complain, in_decl));
11239
11240     case CLEANUP_POINT_EXPR:
11241       /* We shouldn't have built any of these during initial template
11242          generation.  Instead, they should be built during instantiation
11243          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
11244       gcc_unreachable ();
11245
11246     case OFFSET_REF:
11247       mark_used (TREE_OPERAND (t, 1));
11248       return t;
11249
11250     case EXPR_PACK_EXPANSION:
11251       error ("invalid use of pack expansion expression");
11252       return error_mark_node;
11253
11254     case NONTYPE_ARGUMENT_PACK:
11255       error ("use %<...%> to expand argument pack");
11256       return error_mark_node;
11257
11258     default:
11259       return t;
11260     }
11261 }
11262
11263 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
11264
11265 static tree
11266 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
11267                     tree in_decl)
11268 {
11269   tree new_clauses = NULL, nc, oc;
11270
11271   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
11272     {
11273       nc = copy_node (oc);
11274       OMP_CLAUSE_CHAIN (nc) = new_clauses;
11275       new_clauses = nc;
11276
11277       switch (OMP_CLAUSE_CODE (nc))
11278         {
11279         case OMP_CLAUSE_LASTPRIVATE:
11280           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
11281             {
11282               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
11283               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
11284                            in_decl, /*integral_constant_expression_p=*/false);
11285               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
11286                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
11287             }
11288           /* FALLTHRU */
11289         case OMP_CLAUSE_PRIVATE:
11290         case OMP_CLAUSE_SHARED:
11291         case OMP_CLAUSE_FIRSTPRIVATE:
11292         case OMP_CLAUSE_REDUCTION:
11293         case OMP_CLAUSE_COPYIN:
11294         case OMP_CLAUSE_COPYPRIVATE:
11295         case OMP_CLAUSE_IF:
11296         case OMP_CLAUSE_NUM_THREADS:
11297         case OMP_CLAUSE_SCHEDULE:
11298         case OMP_CLAUSE_COLLAPSE:
11299           OMP_CLAUSE_OPERAND (nc, 0)
11300             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
11301                            in_decl, /*integral_constant_expression_p=*/false);
11302           break;
11303         case OMP_CLAUSE_NOWAIT:
11304         case OMP_CLAUSE_ORDERED:
11305         case OMP_CLAUSE_DEFAULT:
11306         case OMP_CLAUSE_UNTIED:
11307           break;
11308         default:
11309           gcc_unreachable ();
11310         }
11311     }
11312
11313   return finish_omp_clauses (nreverse (new_clauses));
11314 }
11315
11316 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
11317
11318 static tree
11319 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
11320                           tree in_decl)
11321 {
11322 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
11323
11324   tree purpose, value, chain;
11325
11326   if (t == NULL)
11327     return t;
11328
11329   if (TREE_CODE (t) != TREE_LIST)
11330     return tsubst_copy_and_build (t, args, complain, in_decl,
11331                                   /*function_p=*/false,
11332                                   /*integral_constant_expression_p=*/false);
11333
11334   if (t == void_list_node)
11335     return t;
11336
11337   purpose = TREE_PURPOSE (t);
11338   if (purpose)
11339     purpose = RECUR (purpose);
11340   value = TREE_VALUE (t);
11341   if (value && TREE_CODE (value) != LABEL_DECL)
11342     value = RECUR (value);
11343   chain = TREE_CHAIN (t);
11344   if (chain && chain != void_type_node)
11345     chain = RECUR (chain);
11346   return tree_cons (purpose, value, chain);
11347 #undef RECUR
11348 }
11349
11350 /* Substitute one OMP_FOR iterator.  */
11351
11352 static void
11353 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
11354                          tree condv, tree incrv, tree *clauses,
11355                          tree args, tsubst_flags_t complain, tree in_decl,
11356                          bool integral_constant_expression_p)
11357 {
11358 #define RECUR(NODE)                             \
11359   tsubst_expr ((NODE), args, complain, in_decl, \
11360                integral_constant_expression_p)
11361   tree decl, init, cond, incr, auto_node;
11362
11363   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
11364   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
11365   decl = RECUR (TREE_OPERAND (init, 0));
11366   init = TREE_OPERAND (init, 1);
11367   auto_node = type_uses_auto (TREE_TYPE (decl));
11368   if (auto_node && init)
11369     {
11370       tree init_expr = init;
11371       if (TREE_CODE (init_expr) == DECL_EXPR)
11372         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
11373       init_expr = RECUR (init_expr);
11374       TREE_TYPE (decl)
11375         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
11376     }
11377   gcc_assert (!type_dependent_expression_p (decl));
11378
11379   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
11380     {
11381       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
11382       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11383       if (TREE_CODE (incr) == MODIFY_EXPR)
11384         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
11385                                     RECUR (TREE_OPERAND (incr, 1)),
11386                                     complain);
11387       else
11388         incr = RECUR (incr);
11389       TREE_VEC_ELT (declv, i) = decl;
11390       TREE_VEC_ELT (initv, i) = init;
11391       TREE_VEC_ELT (condv, i) = cond;
11392       TREE_VEC_ELT (incrv, i) = incr;
11393       return;
11394     }
11395
11396   if (init && TREE_CODE (init) != DECL_EXPR)
11397     {
11398       tree c;
11399       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
11400         {
11401           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
11402                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
11403               && OMP_CLAUSE_DECL (c) == decl)
11404             break;
11405           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
11406                    && OMP_CLAUSE_DECL (c) == decl)
11407             error ("iteration variable %qD should not be firstprivate", decl);
11408           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
11409                    && OMP_CLAUSE_DECL (c) == decl)
11410             error ("iteration variable %qD should not be reduction", decl);
11411         }
11412       if (c == NULL)
11413         {
11414           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
11415           OMP_CLAUSE_DECL (c) = decl;
11416           c = finish_omp_clauses (c);
11417           if (c)
11418             {
11419               OMP_CLAUSE_CHAIN (c) = *clauses;
11420               *clauses = c;
11421             }
11422         }
11423     }
11424   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
11425   if (COMPARISON_CLASS_P (cond))
11426     cond = build2 (TREE_CODE (cond), boolean_type_node,
11427                    RECUR (TREE_OPERAND (cond, 0)),
11428                    RECUR (TREE_OPERAND (cond, 1)));
11429   else
11430     cond = RECUR (cond);
11431   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11432   switch (TREE_CODE (incr))
11433     {
11434     case PREINCREMENT_EXPR:
11435     case PREDECREMENT_EXPR:
11436     case POSTINCREMENT_EXPR:
11437     case POSTDECREMENT_EXPR:
11438       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
11439                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
11440       break;
11441     case MODIFY_EXPR:
11442       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11443           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11444         {
11445           tree rhs = TREE_OPERAND (incr, 1);
11446           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11447                          RECUR (TREE_OPERAND (incr, 0)),
11448                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11449                                  RECUR (TREE_OPERAND (rhs, 0)),
11450                                  RECUR (TREE_OPERAND (rhs, 1))));
11451         }
11452       else
11453         incr = RECUR (incr);
11454       break;
11455     case MODOP_EXPR:
11456       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11457           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11458         {
11459           tree lhs = RECUR (TREE_OPERAND (incr, 0));
11460           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
11461                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
11462                                  TREE_TYPE (decl), lhs,
11463                                  RECUR (TREE_OPERAND (incr, 2))));
11464         }
11465       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
11466                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
11467                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
11468         {
11469           tree rhs = TREE_OPERAND (incr, 2);
11470           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11471                          RECUR (TREE_OPERAND (incr, 0)),
11472                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11473                                  RECUR (TREE_OPERAND (rhs, 0)),
11474                                  RECUR (TREE_OPERAND (rhs, 1))));
11475         }
11476       else
11477         incr = RECUR (incr);
11478       break;
11479     default:
11480       incr = RECUR (incr);
11481       break;
11482     }
11483
11484   TREE_VEC_ELT (declv, i) = decl;
11485   TREE_VEC_ELT (initv, i) = init;
11486   TREE_VEC_ELT (condv, i) = cond;
11487   TREE_VEC_ELT (incrv, i) = incr;
11488 #undef RECUR
11489 }
11490
11491 /* Like tsubst_copy for expressions, etc. but also does semantic
11492    processing.  */
11493
11494 static tree
11495 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
11496              bool integral_constant_expression_p)
11497 {
11498 #define RECUR(NODE)                             \
11499   tsubst_expr ((NODE), args, complain, in_decl, \
11500                integral_constant_expression_p)
11501
11502   tree stmt, tmp;
11503
11504   if (t == NULL_TREE || t == error_mark_node)
11505     return t;
11506
11507   if (EXPR_HAS_LOCATION (t))
11508     input_location = EXPR_LOCATION (t);
11509   if (STATEMENT_CODE_P (TREE_CODE (t)))
11510     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
11511
11512   switch (TREE_CODE (t))
11513     {
11514     case STATEMENT_LIST:
11515       {
11516         tree_stmt_iterator i;
11517         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
11518           RECUR (tsi_stmt (i));
11519         break;
11520       }
11521
11522     case CTOR_INITIALIZER:
11523       finish_mem_initializers (tsubst_initializer_list
11524                                (TREE_OPERAND (t, 0), args));
11525       break;
11526
11527     case RETURN_EXPR:
11528       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
11529       break;
11530
11531     case EXPR_STMT:
11532       tmp = RECUR (EXPR_STMT_EXPR (t));
11533       if (EXPR_STMT_STMT_EXPR_RESULT (t))
11534         finish_stmt_expr_expr (tmp, cur_stmt_expr);
11535       else
11536         finish_expr_stmt (tmp);
11537       break;
11538
11539     case USING_STMT:
11540       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
11541       break;
11542
11543     case DECL_EXPR:
11544       {
11545         tree decl;
11546         tree init;
11547
11548         decl = DECL_EXPR_DECL (t);
11549         if (TREE_CODE (decl) == LABEL_DECL)
11550           finish_label_decl (DECL_NAME (decl));
11551         else if (TREE_CODE (decl) == USING_DECL)
11552           {
11553             tree scope = USING_DECL_SCOPE (decl);
11554             tree name = DECL_NAME (decl);
11555             tree decl;
11556
11557             scope = RECUR (scope);
11558             decl = lookup_qualified_name (scope, name,
11559                                           /*is_type_p=*/false,
11560                                           /*complain=*/false);
11561             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
11562               qualified_name_lookup_error (scope, name, decl, input_location);
11563             else
11564               do_local_using_decl (decl, scope, name);
11565           }
11566         else
11567           {
11568             init = DECL_INITIAL (decl);
11569             decl = tsubst (decl, args, complain, in_decl);
11570             if (decl != error_mark_node)
11571               {
11572                 /* By marking the declaration as instantiated, we avoid
11573                    trying to instantiate it.  Since instantiate_decl can't
11574                    handle local variables, and since we've already done
11575                    all that needs to be done, that's the right thing to
11576                    do.  */
11577                 if (TREE_CODE (decl) == VAR_DECL)
11578                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
11579                 if (TREE_CODE (decl) == VAR_DECL
11580                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
11581                   /* Anonymous aggregates are a special case.  */
11582                   finish_anon_union (decl);
11583                 else
11584                   {
11585                     maybe_push_decl (decl);
11586                     if (TREE_CODE (decl) == VAR_DECL
11587                         && DECL_PRETTY_FUNCTION_P (decl))
11588                       {
11589                         /* For __PRETTY_FUNCTION__ we have to adjust the
11590                            initializer.  */
11591                         const char *const name
11592                           = cxx_printable_name (current_function_decl, 2);
11593                         init = cp_fname_init (name, &TREE_TYPE (decl));
11594                       }
11595                     else
11596                       {
11597                         tree t = RECUR (init);
11598
11599                         if (init && !t)
11600                           /* If we had an initializer but it
11601                              instantiated to nothing,
11602                              value-initialize the object.  This will
11603                              only occur when the initializer was a
11604                              pack expansion where the parameter packs
11605                              used in that expansion were of length
11606                              zero.  */
11607                           init = build_value_init (TREE_TYPE (decl));
11608                         else
11609                           init = t;
11610                       }
11611
11612                     cp_finish_decl (decl, init, false, NULL_TREE, 0);
11613                   }
11614               }
11615           }
11616
11617         /* A DECL_EXPR can also be used as an expression, in the condition
11618            clause of an if/for/while construct.  */
11619         return decl;
11620       }
11621
11622     case FOR_STMT:
11623       stmt = begin_for_stmt ();
11624                           RECUR (FOR_INIT_STMT (t));
11625       finish_for_init_stmt (stmt);
11626       tmp = RECUR (FOR_COND (t));
11627       finish_for_cond (tmp, stmt);
11628       tmp = RECUR (FOR_EXPR (t));
11629       finish_for_expr (tmp, stmt);
11630       RECUR (FOR_BODY (t));
11631       finish_for_stmt (stmt);
11632       break;
11633
11634     case WHILE_STMT:
11635       stmt = begin_while_stmt ();
11636       tmp = RECUR (WHILE_COND (t));
11637       finish_while_stmt_cond (tmp, stmt);
11638       RECUR (WHILE_BODY (t));
11639       finish_while_stmt (stmt);
11640       break;
11641
11642     case DO_STMT:
11643       stmt = begin_do_stmt ();
11644       RECUR (DO_BODY (t));
11645       finish_do_body (stmt);
11646       tmp = RECUR (DO_COND (t));
11647       finish_do_stmt (tmp, stmt);
11648       break;
11649
11650     case IF_STMT:
11651       stmt = begin_if_stmt ();
11652       tmp = RECUR (IF_COND (t));
11653       finish_if_stmt_cond (tmp, stmt);
11654       RECUR (THEN_CLAUSE (t));
11655       finish_then_clause (stmt);
11656
11657       if (ELSE_CLAUSE (t))
11658         {
11659           begin_else_clause (stmt);
11660           RECUR (ELSE_CLAUSE (t));
11661           finish_else_clause (stmt);
11662         }
11663
11664       finish_if_stmt (stmt);
11665       break;
11666
11667     case BIND_EXPR:
11668       if (BIND_EXPR_BODY_BLOCK (t))
11669         stmt = begin_function_body ();
11670       else
11671         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
11672                                     ? BCS_TRY_BLOCK : 0);
11673
11674       RECUR (BIND_EXPR_BODY (t));
11675
11676       if (BIND_EXPR_BODY_BLOCK (t))
11677         finish_function_body (stmt);
11678       else
11679         finish_compound_stmt (stmt);
11680       break;
11681
11682     case BREAK_STMT:
11683       finish_break_stmt ();
11684       break;
11685
11686     case CONTINUE_STMT:
11687       finish_continue_stmt ();
11688       break;
11689
11690     case SWITCH_STMT:
11691       stmt = begin_switch_stmt ();
11692       tmp = RECUR (SWITCH_STMT_COND (t));
11693       finish_switch_cond (tmp, stmt);
11694       RECUR (SWITCH_STMT_BODY (t));
11695       finish_switch_stmt (stmt);
11696       break;
11697
11698     case CASE_LABEL_EXPR:
11699       finish_case_label (EXPR_LOCATION (t),
11700                          RECUR (CASE_LOW (t)),
11701                          RECUR (CASE_HIGH (t)));
11702       break;
11703
11704     case LABEL_EXPR:
11705       {
11706         tree decl = LABEL_EXPR_LABEL (t);
11707         tree label;
11708
11709         label = finish_label_stmt (DECL_NAME (decl));
11710         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
11711           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
11712       }
11713       break;
11714
11715     case GOTO_EXPR:
11716       tmp = GOTO_DESTINATION (t);
11717       if (TREE_CODE (tmp) != LABEL_DECL)
11718         /* Computed goto's must be tsubst'd into.  On the other hand,
11719            non-computed gotos must not be; the identifier in question
11720            will have no binding.  */
11721         tmp = RECUR (tmp);
11722       else
11723         tmp = DECL_NAME (tmp);
11724       finish_goto_stmt (tmp);
11725       break;
11726
11727     case ASM_EXPR:
11728       tmp = finish_asm_stmt
11729         (ASM_VOLATILE_P (t),
11730          RECUR (ASM_STRING (t)),
11731          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
11732          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
11733          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
11734          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
11735       {
11736         tree asm_expr = tmp;
11737         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
11738           asm_expr = TREE_OPERAND (asm_expr, 0);
11739         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
11740       }
11741       break;
11742
11743     case TRY_BLOCK:
11744       if (CLEANUP_P (t))
11745         {
11746           stmt = begin_try_block ();
11747           RECUR (TRY_STMTS (t));
11748           finish_cleanup_try_block (stmt);
11749           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
11750         }
11751       else
11752         {
11753           tree compound_stmt = NULL_TREE;
11754
11755           if (FN_TRY_BLOCK_P (t))
11756             stmt = begin_function_try_block (&compound_stmt);
11757           else
11758             stmt = begin_try_block ();
11759
11760           RECUR (TRY_STMTS (t));
11761
11762           if (FN_TRY_BLOCK_P (t))
11763             finish_function_try_block (stmt);
11764           else
11765             finish_try_block (stmt);
11766
11767           RECUR (TRY_HANDLERS (t));
11768           if (FN_TRY_BLOCK_P (t))
11769             finish_function_handler_sequence (stmt, compound_stmt);
11770           else
11771             finish_handler_sequence (stmt);
11772         }
11773       break;
11774
11775     case HANDLER:
11776       {
11777         tree decl = HANDLER_PARMS (t);
11778
11779         if (decl)
11780           {
11781             decl = tsubst (decl, args, complain, in_decl);
11782             /* Prevent instantiate_decl from trying to instantiate
11783                this variable.  We've already done all that needs to be
11784                done.  */
11785             if (decl != error_mark_node)
11786               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
11787           }
11788         stmt = begin_handler ();
11789         finish_handler_parms (decl, stmt);
11790         RECUR (HANDLER_BODY (t));
11791         finish_handler (stmt);
11792       }
11793       break;
11794
11795     case TAG_DEFN:
11796       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
11797       break;
11798
11799     case STATIC_ASSERT:
11800       {
11801         tree condition = 
11802           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
11803                        args,
11804                        complain, in_decl,
11805                        /*integral_constant_expression_p=*/true);
11806         finish_static_assert (condition,
11807                               STATIC_ASSERT_MESSAGE (t),
11808                               STATIC_ASSERT_SOURCE_LOCATION (t),
11809                               /*member_p=*/false);
11810       }
11811       break;
11812
11813     case OMP_PARALLEL:
11814       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
11815                                 args, complain, in_decl);
11816       stmt = begin_omp_parallel ();
11817       RECUR (OMP_PARALLEL_BODY (t));
11818       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
11819         = OMP_PARALLEL_COMBINED (t);
11820       break;
11821
11822     case OMP_TASK:
11823       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
11824                                 args, complain, in_decl);
11825       stmt = begin_omp_task ();
11826       RECUR (OMP_TASK_BODY (t));
11827       finish_omp_task (tmp, stmt);
11828       break;
11829
11830     case OMP_FOR:
11831       {
11832         tree clauses, body, pre_body;
11833         tree declv, initv, condv, incrv;
11834         int i;
11835
11836         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
11837                                       args, complain, in_decl);
11838         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11839         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11840         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11841         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11842
11843         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
11844           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
11845                                    &clauses, args, complain, in_decl,
11846                                    integral_constant_expression_p);
11847
11848         stmt = begin_omp_structured_block ();
11849
11850         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
11851           if (TREE_VEC_ELT (initv, i) == NULL
11852               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
11853             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
11854           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
11855             {
11856               tree init = RECUR (TREE_VEC_ELT (initv, i));
11857               gcc_assert (init == TREE_VEC_ELT (declv, i));
11858               TREE_VEC_ELT (initv, i) = NULL_TREE;
11859             }
11860           else
11861             {
11862               tree decl_expr = TREE_VEC_ELT (initv, i);
11863               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
11864               gcc_assert (init != NULL);
11865               TREE_VEC_ELT (initv, i) = RECUR (init);
11866               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
11867               RECUR (decl_expr);
11868               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
11869             }
11870
11871         pre_body = push_stmt_list ();
11872         RECUR (OMP_FOR_PRE_BODY (t));
11873         pre_body = pop_stmt_list (pre_body);
11874
11875         body = push_stmt_list ();
11876         RECUR (OMP_FOR_BODY (t));
11877         body = pop_stmt_list (body);
11878
11879         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
11880                             body, pre_body, clauses);
11881
11882         add_stmt (finish_omp_structured_block (stmt));
11883       }
11884       break;
11885
11886     case OMP_SECTIONS:
11887     case OMP_SINGLE:
11888       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
11889       stmt = push_stmt_list ();
11890       RECUR (OMP_BODY (t));
11891       stmt = pop_stmt_list (stmt);
11892
11893       t = copy_node (t);
11894       OMP_BODY (t) = stmt;
11895       OMP_CLAUSES (t) = tmp;
11896       add_stmt (t);
11897       break;
11898
11899     case OMP_SECTION:
11900     case OMP_CRITICAL:
11901     case OMP_MASTER:
11902     case OMP_ORDERED:
11903       stmt = push_stmt_list ();
11904       RECUR (OMP_BODY (t));
11905       stmt = pop_stmt_list (stmt);
11906
11907       t = copy_node (t);
11908       OMP_BODY (t) = stmt;
11909       add_stmt (t);
11910       break;
11911
11912     case OMP_ATOMIC:
11913       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
11914       {
11915         tree op1 = TREE_OPERAND (t, 1);
11916         tree lhs = RECUR (TREE_OPERAND (op1, 0));
11917         tree rhs = RECUR (TREE_OPERAND (op1, 1));
11918         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
11919       }
11920       break;
11921
11922     case EXPR_PACK_EXPANSION:
11923       error ("invalid use of pack expansion expression");
11924       return error_mark_node;
11925
11926     case NONTYPE_ARGUMENT_PACK:
11927       error ("use %<...%> to expand argument pack");
11928       return error_mark_node;
11929
11930     default:
11931       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
11932
11933       return tsubst_copy_and_build (t, args, complain, in_decl,
11934                                     /*function_p=*/false,
11935                                     integral_constant_expression_p);
11936     }
11937
11938   return NULL_TREE;
11939 #undef RECUR
11940 }
11941
11942 /* T is a postfix-expression that is not being used in a function
11943    call.  Return the substituted version of T.  */
11944
11945 static tree
11946 tsubst_non_call_postfix_expression (tree t, tree args,
11947                                     tsubst_flags_t complain,
11948                                     tree in_decl)
11949 {
11950   if (TREE_CODE (t) == SCOPE_REF)
11951     t = tsubst_qualified_id (t, args, complain, in_decl,
11952                              /*done=*/false, /*address_p=*/false);
11953   else
11954     t = tsubst_copy_and_build (t, args, complain, in_decl,
11955                                /*function_p=*/false,
11956                                /*integral_constant_expression_p=*/false);
11957
11958   return t;
11959 }
11960
11961 /* Like tsubst but deals with expressions and performs semantic
11962    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
11963
11964 tree
11965 tsubst_copy_and_build (tree t,
11966                        tree args,
11967                        tsubst_flags_t complain,
11968                        tree in_decl,
11969                        bool function_p,
11970                        bool integral_constant_expression_p)
11971 {
11972 #define RECUR(NODE)                                             \
11973   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
11974                          /*function_p=*/false,                  \
11975                          integral_constant_expression_p)
11976
11977   tree op1;
11978
11979   if (t == NULL_TREE || t == error_mark_node)
11980     return t;
11981
11982   switch (TREE_CODE (t))
11983     {
11984     case USING_DECL:
11985       t = DECL_NAME (t);
11986       /* Fall through.  */
11987     case IDENTIFIER_NODE:
11988       {
11989         tree decl;
11990         cp_id_kind idk;
11991         bool non_integral_constant_expression_p;
11992         const char *error_msg;
11993
11994         if (IDENTIFIER_TYPENAME_P (t))
11995           {
11996             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11997             t = mangle_conv_op_name_for_type (new_type);
11998           }
11999
12000         /* Look up the name.  */
12001         decl = lookup_name (t);
12002
12003         /* By convention, expressions use ERROR_MARK_NODE to indicate
12004            failure, not NULL_TREE.  */
12005         if (decl == NULL_TREE)
12006           decl = error_mark_node;
12007
12008         decl = finish_id_expression (t, decl, NULL_TREE,
12009                                      &idk,
12010                                      integral_constant_expression_p,
12011                                      /*allow_non_integral_constant_expression_p=*/false,
12012                                      &non_integral_constant_expression_p,
12013                                      /*template_p=*/false,
12014                                      /*done=*/true,
12015                                      /*address_p=*/false,
12016                                      /*template_arg_p=*/false,
12017                                      &error_msg,
12018                                      input_location);
12019         if (error_msg)
12020           error (error_msg);
12021         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12022           decl = unqualified_name_lookup_error (decl);
12023         return decl;
12024       }
12025
12026     case TEMPLATE_ID_EXPR:
12027       {
12028         tree object;
12029         tree templ = RECUR (TREE_OPERAND (t, 0));
12030         tree targs = TREE_OPERAND (t, 1);
12031
12032         if (targs)
12033           targs = tsubst_template_args (targs, args, complain, in_decl);
12034
12035         if (TREE_CODE (templ) == COMPONENT_REF)
12036           {
12037             object = TREE_OPERAND (templ, 0);
12038             templ = TREE_OPERAND (templ, 1);
12039           }
12040         else
12041           object = NULL_TREE;
12042         templ = lookup_template_function (templ, targs);
12043
12044         if (object)
12045           return build3 (COMPONENT_REF, TREE_TYPE (templ),
12046                          object, templ, NULL_TREE);
12047         else
12048           return baselink_for_fns (templ);
12049       }
12050
12051     case INDIRECT_REF:
12052       {
12053         tree r = RECUR (TREE_OPERAND (t, 0));
12054
12055         if (REFERENCE_REF_P (t))
12056           {
12057             /* A type conversion to reference type will be enclosed in
12058                such an indirect ref, but the substitution of the cast
12059                will have also added such an indirect ref.  */
12060             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
12061               r = convert_from_reference (r);
12062           }
12063         else
12064           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
12065         return r;
12066       }
12067
12068     case NOP_EXPR:
12069       return build_nop
12070         (tsubst (TREE_TYPE (t), args, complain, in_decl),
12071          RECUR (TREE_OPERAND (t, 0)));
12072
12073     case CAST_EXPR:
12074     case REINTERPRET_CAST_EXPR:
12075     case CONST_CAST_EXPR:
12076     case DYNAMIC_CAST_EXPR:
12077     case STATIC_CAST_EXPR:
12078       {
12079         tree type;
12080         tree op;
12081
12082         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12083         if (integral_constant_expression_p
12084             && !cast_valid_in_integral_constant_expression_p (type))
12085           {
12086             if (complain & tf_error)
12087               error ("a cast to a type other than an integral or "
12088                      "enumeration type cannot appear in a constant-expression");
12089             return error_mark_node; 
12090           }
12091
12092         op = RECUR (TREE_OPERAND (t, 0));
12093
12094         switch (TREE_CODE (t))
12095           {
12096           case CAST_EXPR:
12097             return build_functional_cast (type, op, complain);
12098           case REINTERPRET_CAST_EXPR:
12099             return build_reinterpret_cast (type, op, complain);
12100           case CONST_CAST_EXPR:
12101             return build_const_cast (type, op, complain);
12102           case DYNAMIC_CAST_EXPR:
12103             return build_dynamic_cast (type, op, complain);
12104           case STATIC_CAST_EXPR:
12105             return build_static_cast (type, op, complain);
12106           default:
12107             gcc_unreachable ();
12108           }
12109       }
12110
12111     case POSTDECREMENT_EXPR:
12112     case POSTINCREMENT_EXPR:
12113       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12114                                                 args, complain, in_decl);
12115       return build_x_unary_op (TREE_CODE (t), op1, complain);
12116
12117     case PREDECREMENT_EXPR:
12118     case PREINCREMENT_EXPR:
12119     case NEGATE_EXPR:
12120     case BIT_NOT_EXPR:
12121     case ABS_EXPR:
12122     case TRUTH_NOT_EXPR:
12123     case UNARY_PLUS_EXPR:  /* Unary + */
12124     case REALPART_EXPR:
12125     case IMAGPART_EXPR:
12126       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
12127                                complain);
12128
12129     case ADDR_EXPR:
12130       op1 = TREE_OPERAND (t, 0);
12131       if (TREE_CODE (op1) == SCOPE_REF)
12132         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
12133                                    /*done=*/true, /*address_p=*/true);
12134       else
12135         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
12136                                                   in_decl);
12137       if (TREE_CODE (op1) == LABEL_DECL)
12138         return finish_label_address_expr (DECL_NAME (op1),
12139                                           EXPR_LOCATION (op1));
12140       return build_x_unary_op (ADDR_EXPR, op1, complain);
12141
12142     case PLUS_EXPR:
12143     case MINUS_EXPR:
12144     case MULT_EXPR:
12145     case TRUNC_DIV_EXPR:
12146     case CEIL_DIV_EXPR:
12147     case FLOOR_DIV_EXPR:
12148     case ROUND_DIV_EXPR:
12149     case EXACT_DIV_EXPR:
12150     case BIT_AND_EXPR:
12151     case BIT_IOR_EXPR:
12152     case BIT_XOR_EXPR:
12153     case TRUNC_MOD_EXPR:
12154     case FLOOR_MOD_EXPR:
12155     case TRUTH_ANDIF_EXPR:
12156     case TRUTH_ORIF_EXPR:
12157     case TRUTH_AND_EXPR:
12158     case TRUTH_OR_EXPR:
12159     case RSHIFT_EXPR:
12160     case LSHIFT_EXPR:
12161     case RROTATE_EXPR:
12162     case LROTATE_EXPR:
12163     case EQ_EXPR:
12164     case NE_EXPR:
12165     case MAX_EXPR:
12166     case MIN_EXPR:
12167     case LE_EXPR:
12168     case GE_EXPR:
12169     case LT_EXPR:
12170     case GT_EXPR:
12171     case MEMBER_REF:
12172     case DOTSTAR_EXPR:
12173       return build_x_binary_op
12174         (TREE_CODE (t),
12175          RECUR (TREE_OPERAND (t, 0)),
12176          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
12177           ? ERROR_MARK
12178           : TREE_CODE (TREE_OPERAND (t, 0))),
12179          RECUR (TREE_OPERAND (t, 1)),
12180          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
12181           ? ERROR_MARK
12182           : TREE_CODE (TREE_OPERAND (t, 1))),
12183          /*overloaded_p=*/NULL,
12184          complain);
12185
12186     case SCOPE_REF:
12187       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
12188                                   /*address_p=*/false);
12189     case ARRAY_REF:
12190       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12191                                                 args, complain, in_decl);
12192       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
12193
12194     case SIZEOF_EXPR:
12195       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12196         return tsubst_copy (t, args, complain, in_decl);
12197       /* Fall through */
12198       
12199     case ALIGNOF_EXPR:
12200       op1 = TREE_OPERAND (t, 0);
12201       if (!args)
12202         {
12203           /* When there are no ARGS, we are trying to evaluate a
12204              non-dependent expression from the parser.  Trying to do
12205              the substitutions may not work.  */
12206           if (!TYPE_P (op1))
12207             op1 = TREE_TYPE (op1);
12208         }
12209       else
12210         {
12211           ++cp_unevaluated_operand;
12212           ++c_inhibit_evaluation_warnings;
12213           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12214                                        /*function_p=*/false,
12215                                        /*integral_constant_expression_p=*/false);
12216           --cp_unevaluated_operand;
12217           --c_inhibit_evaluation_warnings;
12218         }
12219       if (TYPE_P (op1))
12220         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
12221                                            complain & tf_error);
12222       else
12223         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
12224                                            complain & tf_error);
12225
12226     case MODOP_EXPR:
12227       {
12228         tree r = build_x_modify_expr
12229           (RECUR (TREE_OPERAND (t, 0)),
12230            TREE_CODE (TREE_OPERAND (t, 1)),
12231            RECUR (TREE_OPERAND (t, 2)),
12232            complain);
12233         /* TREE_NO_WARNING must be set if either the expression was
12234            parenthesized or it uses an operator such as >>= rather
12235            than plain assignment.  In the former case, it was already
12236            set and must be copied.  In the latter case,
12237            build_x_modify_expr sets it and it must not be reset
12238            here.  */
12239         if (TREE_NO_WARNING (t))
12240           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12241         return r;
12242       }
12243
12244     case ARROW_EXPR:
12245       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12246                                                 args, complain, in_decl);
12247       /* Remember that there was a reference to this entity.  */
12248       if (DECL_P (op1))
12249         mark_used (op1);
12250       return build_x_arrow (op1);
12251
12252     case NEW_EXPR:
12253       {
12254         tree placement = RECUR (TREE_OPERAND (t, 0));
12255         tree init = RECUR (TREE_OPERAND (t, 3));
12256         VEC(tree,gc) *placement_vec;
12257         VEC(tree,gc) *init_vec;
12258         tree ret;
12259
12260         if (placement == NULL_TREE)
12261           placement_vec = NULL;
12262         else
12263           {
12264             placement_vec = make_tree_vector ();
12265             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
12266               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
12267           }
12268
12269         /* If there was an initializer in the original tree, but it
12270            instantiated to an empty list, then we should pass a
12271            non-NULL empty vector to tell build_new that it was an
12272            empty initializer() rather than no initializer.  This can
12273            only happen when the initializer is a pack expansion whose
12274            parameter packs are of length zero.  */
12275         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
12276           init_vec = NULL;
12277         else
12278           {
12279             init_vec = make_tree_vector ();
12280             if (init == void_zero_node)
12281               gcc_assert (init_vec != NULL);
12282             else
12283               {
12284                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
12285                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
12286               }
12287           }
12288
12289         ret = build_new (&placement_vec,
12290                          RECUR (TREE_OPERAND (t, 1)),
12291                          RECUR (TREE_OPERAND (t, 2)),
12292                          &init_vec,
12293                          NEW_EXPR_USE_GLOBAL (t),
12294                          complain);
12295
12296         if (placement_vec != NULL)
12297           release_tree_vector (placement_vec);
12298         if (init_vec != NULL)
12299           release_tree_vector (init_vec);
12300
12301         return ret;
12302       }
12303
12304     case DELETE_EXPR:
12305      return delete_sanity
12306        (RECUR (TREE_OPERAND (t, 0)),
12307         RECUR (TREE_OPERAND (t, 1)),
12308         DELETE_EXPR_USE_VEC (t),
12309         DELETE_EXPR_USE_GLOBAL (t));
12310
12311     case COMPOUND_EXPR:
12312       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
12313                                     RECUR (TREE_OPERAND (t, 1)),
12314                                     complain);
12315
12316     case CALL_EXPR:
12317       {
12318         tree function;
12319         VEC(tree,gc) *call_args;
12320         unsigned int nargs, i;
12321         bool qualified_p;
12322         bool koenig_p;
12323         tree ret;
12324
12325         function = CALL_EXPR_FN (t);
12326         /* When we parsed the expression,  we determined whether or
12327            not Koenig lookup should be performed.  */
12328         koenig_p = KOENIG_LOOKUP_P (t);
12329         if (TREE_CODE (function) == SCOPE_REF)
12330           {
12331             qualified_p = true;
12332             function = tsubst_qualified_id (function, args, complain, in_decl,
12333                                             /*done=*/false,
12334                                             /*address_p=*/false);
12335           }
12336         else
12337           {
12338             if (TREE_CODE (function) == COMPONENT_REF)
12339               {
12340                 tree op = TREE_OPERAND (function, 1);
12341
12342                 qualified_p = (TREE_CODE (op) == SCOPE_REF
12343                                || (BASELINK_P (op)
12344                                    && BASELINK_QUALIFIED_P (op)));
12345               }
12346             else
12347               qualified_p = false;
12348
12349             function = tsubst_copy_and_build (function, args, complain,
12350                                               in_decl,
12351                                               !qualified_p,
12352                                               integral_constant_expression_p);
12353
12354             if (BASELINK_P (function))
12355               qualified_p = true;
12356           }
12357
12358         nargs = call_expr_nargs (t);
12359         call_args = make_tree_vector ();
12360         for (i = 0; i < nargs; ++i)
12361           {
12362             tree arg = CALL_EXPR_ARG (t, i);
12363
12364             if (!PACK_EXPANSION_P (arg))
12365               VEC_safe_push (tree, gc, call_args,
12366                              RECUR (CALL_EXPR_ARG (t, i)));
12367             else
12368               {
12369                 /* Expand the pack expansion and push each entry onto
12370                    CALL_ARGS.  */
12371                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
12372                 if (TREE_CODE (arg) == TREE_VEC)
12373                   {
12374                     unsigned int len, j;
12375
12376                     len = TREE_VEC_LENGTH (arg);
12377                     for (j = 0; j < len; ++j)
12378                       {
12379                         tree value = TREE_VEC_ELT (arg, j);
12380                         if (value != NULL_TREE)
12381                           value = convert_from_reference (value);
12382                         VEC_safe_push (tree, gc, call_args, value);
12383                       }
12384                   }
12385                 else
12386                   {
12387                     /* A partial substitution.  Add one entry.  */
12388                     VEC_safe_push (tree, gc, call_args, arg);
12389                   }
12390               }
12391           }
12392
12393         /* We do not perform argument-dependent lookup if normal
12394            lookup finds a non-function, in accordance with the
12395            expected resolution of DR 218.  */
12396         if (koenig_p
12397             && ((is_overloaded_fn (function)
12398                  /* If lookup found a member function, the Koenig lookup is
12399                     not appropriate, even if an unqualified-name was used
12400                     to denote the function.  */
12401                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
12402                 || TREE_CODE (function) == IDENTIFIER_NODE)
12403             /* Only do this when substitution turns a dependent call
12404                into a non-dependent call.  */
12405             && type_dependent_expression_p_push (t)
12406             && !any_type_dependent_arguments_p (call_args))
12407           function = perform_koenig_lookup (function, call_args);
12408
12409         if (TREE_CODE (function) == IDENTIFIER_NODE)
12410           {
12411             unqualified_name_lookup_error (function);
12412             release_tree_vector (call_args);
12413             return error_mark_node;
12414           }
12415
12416         /* Remember that there was a reference to this entity.  */
12417         if (DECL_P (function))
12418           mark_used (function);
12419
12420         if (TREE_CODE (function) == OFFSET_REF)
12421           ret = build_offset_ref_call_from_tree (function, &call_args);
12422         else if (TREE_CODE (function) == COMPONENT_REF)
12423           {
12424             if (!BASELINK_P (TREE_OPERAND (function, 1)))
12425               ret = finish_call_expr (function, &call_args,
12426                                        /*disallow_virtual=*/false,
12427                                        /*koenig_p=*/false,
12428                                        complain);
12429             else
12430               ret = (build_new_method_call
12431                       (TREE_OPERAND (function, 0),
12432                        TREE_OPERAND (function, 1),
12433                        &call_args, NULL_TREE,
12434                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
12435                        /*fn_p=*/NULL,
12436                        complain));
12437           }
12438         else
12439           ret = finish_call_expr (function, &call_args,
12440                                   /*disallow_virtual=*/qualified_p,
12441                                   koenig_p,
12442                                   complain);
12443
12444         release_tree_vector (call_args);
12445
12446         return ret;
12447       }
12448
12449     case COND_EXPR:
12450       return build_x_conditional_expr
12451         (RECUR (TREE_OPERAND (t, 0)),
12452          RECUR (TREE_OPERAND (t, 1)),
12453          RECUR (TREE_OPERAND (t, 2)),
12454          complain);
12455
12456     case PSEUDO_DTOR_EXPR:
12457       return finish_pseudo_destructor_expr
12458         (RECUR (TREE_OPERAND (t, 0)),
12459          RECUR (TREE_OPERAND (t, 1)),
12460          RECUR (TREE_OPERAND (t, 2)));
12461
12462     case TREE_LIST:
12463       {
12464         tree purpose, value, chain;
12465
12466         if (t == void_list_node)
12467           return t;
12468
12469         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
12470             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
12471           {
12472             /* We have pack expansions, so expand those and
12473                create a new list out of it.  */
12474             tree purposevec = NULL_TREE;
12475             tree valuevec = NULL_TREE;
12476             tree chain;
12477             int i, len = -1;
12478
12479             /* Expand the argument expressions.  */
12480             if (TREE_PURPOSE (t))
12481               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
12482                                                  complain, in_decl);
12483             if (TREE_VALUE (t))
12484               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
12485                                                complain, in_decl);
12486
12487             /* Build the rest of the list.  */
12488             chain = TREE_CHAIN (t);
12489             if (chain && chain != void_type_node)
12490               chain = RECUR (chain);
12491
12492             /* Determine the number of arguments.  */
12493             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
12494               {
12495                 len = TREE_VEC_LENGTH (purposevec);
12496                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
12497               }
12498             else if (TREE_CODE (valuevec) == TREE_VEC)
12499               len = TREE_VEC_LENGTH (valuevec);
12500             else
12501               {
12502                 /* Since we only performed a partial substitution into
12503                    the argument pack, we only return a single list
12504                    node.  */
12505                 if (purposevec == TREE_PURPOSE (t)
12506                     && valuevec == TREE_VALUE (t)
12507                     && chain == TREE_CHAIN (t))
12508                   return t;
12509
12510                 return tree_cons (purposevec, valuevec, chain);
12511               }
12512             
12513             /* Convert the argument vectors into a TREE_LIST */
12514             i = len;
12515             while (i > 0)
12516               {
12517                 /* Grab the Ith values.  */
12518                 i--;
12519                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
12520                                      : NULL_TREE;
12521                 value 
12522                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
12523                              : NULL_TREE;
12524
12525                 /* Build the list (backwards).  */
12526                 chain = tree_cons (purpose, value, chain);
12527               }
12528
12529             return chain;
12530           }
12531
12532         purpose = TREE_PURPOSE (t);
12533         if (purpose)
12534           purpose = RECUR (purpose);
12535         value = TREE_VALUE (t);
12536         if (value)
12537           value = RECUR (value);
12538         chain = TREE_CHAIN (t);
12539         if (chain && chain != void_type_node)
12540           chain = RECUR (chain);
12541         if (purpose == TREE_PURPOSE (t)
12542             && value == TREE_VALUE (t)
12543             && chain == TREE_CHAIN (t))
12544           return t;
12545         return tree_cons (purpose, value, chain);
12546       }
12547
12548     case COMPONENT_REF:
12549       {
12550         tree object;
12551         tree object_type;
12552         tree member;
12553
12554         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12555                                                      args, complain, in_decl);
12556         /* Remember that there was a reference to this entity.  */
12557         if (DECL_P (object))
12558           mark_used (object);
12559         object_type = TREE_TYPE (object);
12560
12561         member = TREE_OPERAND (t, 1);
12562         if (BASELINK_P (member))
12563           member = tsubst_baselink (member,
12564                                     non_reference (TREE_TYPE (object)),
12565                                     args, complain, in_decl);
12566         else
12567           member = tsubst_copy (member, args, complain, in_decl);
12568         if (member == error_mark_node)
12569           return error_mark_node;
12570
12571         if (object_type && !CLASS_TYPE_P (object_type))
12572           {
12573             if (SCALAR_TYPE_P (object_type))
12574               {
12575                 tree s = NULL_TREE;
12576                 tree dtor = member;
12577
12578                 if (TREE_CODE (dtor) == SCOPE_REF)
12579                   {
12580                     s = TREE_OPERAND (dtor, 0);
12581                     dtor = TREE_OPERAND (dtor, 1);
12582                   }
12583                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
12584                   {
12585                     dtor = TREE_OPERAND (dtor, 0);
12586                     if (TYPE_P (dtor))
12587                       return finish_pseudo_destructor_expr (object, s, dtor);
12588                   }
12589               }
12590           }
12591         else if (TREE_CODE (member) == SCOPE_REF
12592                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
12593           {
12594             tree tmpl;
12595             tree args;
12596
12597             /* Lookup the template functions now that we know what the
12598                scope is.  */
12599             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
12600             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
12601             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
12602                                             /*is_type_p=*/false,
12603                                             /*complain=*/false);
12604             if (BASELINK_P (member))
12605               {
12606                 BASELINK_FUNCTIONS (member)
12607                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
12608                               args);
12609                 member = (adjust_result_of_qualified_name_lookup
12610                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
12611                            object_type));
12612               }
12613             else
12614               {
12615                 qualified_name_lookup_error (object_type, tmpl, member,
12616                                              input_location);
12617                 return error_mark_node;
12618               }
12619           }
12620         else if (TREE_CODE (member) == SCOPE_REF
12621                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
12622                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
12623           {
12624             if (complain & tf_error)
12625               {
12626                 if (TYPE_P (TREE_OPERAND (member, 0)))
12627                   error ("%qT is not a class or namespace",
12628                          TREE_OPERAND (member, 0));
12629                 else
12630                   error ("%qD is not a class or namespace",
12631                          TREE_OPERAND (member, 0));
12632               }
12633             return error_mark_node;
12634           }
12635         else if (TREE_CODE (member) == FIELD_DECL)
12636           return finish_non_static_data_member (member, object, NULL_TREE);
12637
12638         return finish_class_member_access_expr (object, member,
12639                                                 /*template_p=*/false,
12640                                                 complain);
12641       }
12642
12643     case THROW_EXPR:
12644       return build_throw
12645         (RECUR (TREE_OPERAND (t, 0)));
12646
12647     case CONSTRUCTOR:
12648       {
12649         VEC(constructor_elt,gc) *n;
12650         constructor_elt *ce;
12651         unsigned HOST_WIDE_INT idx;
12652         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12653         bool process_index_p;
12654         int newlen;
12655         bool need_copy_p = false;
12656         tree r;
12657
12658         if (type == error_mark_node)
12659           return error_mark_node;
12660
12661         /* digest_init will do the wrong thing if we let it.  */
12662         if (type && TYPE_PTRMEMFUNC_P (type))
12663           return t;
12664
12665         /* We do not want to process the index of aggregate
12666            initializers as they are identifier nodes which will be
12667            looked up by digest_init.  */
12668         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
12669
12670         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
12671         newlen = VEC_length (constructor_elt, n);
12672         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
12673           {
12674             if (ce->index && process_index_p)
12675               ce->index = RECUR (ce->index);
12676
12677             if (PACK_EXPANSION_P (ce->value))
12678               {
12679                 /* Substitute into the pack expansion.  */
12680                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
12681                                                   in_decl);
12682
12683                 if (ce->value == error_mark_node)
12684                   ;
12685                 else if (TREE_VEC_LENGTH (ce->value) == 1)
12686                   /* Just move the argument into place.  */
12687                   ce->value = TREE_VEC_ELT (ce->value, 0);
12688                 else
12689                   {
12690                     /* Update the length of the final CONSTRUCTOR
12691                        arguments vector, and note that we will need to
12692                        copy.*/
12693                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
12694                     need_copy_p = true;
12695                   }
12696               }
12697             else
12698               ce->value = RECUR (ce->value);
12699           }
12700
12701         if (need_copy_p)
12702           {
12703             VEC(constructor_elt,gc) *old_n = n;
12704
12705             n = VEC_alloc (constructor_elt, gc, newlen);
12706             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
12707                  idx++)
12708               {
12709                 if (TREE_CODE (ce->value) == TREE_VEC)
12710                   {
12711                     int i, len = TREE_VEC_LENGTH (ce->value);
12712                     for (i = 0; i < len; ++i)
12713                       CONSTRUCTOR_APPEND_ELT (n, 0,
12714                                               TREE_VEC_ELT (ce->value, i));
12715                   }
12716                 else
12717                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
12718               }
12719           }
12720
12721         r = build_constructor (init_list_type_node, n);
12722         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
12723
12724         if (TREE_HAS_CONSTRUCTOR (t))
12725           return finish_compound_literal (type, r);
12726
12727         return r;
12728       }
12729
12730     case TYPEID_EXPR:
12731       {
12732         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
12733         if (TYPE_P (operand_0))
12734           return get_typeid (operand_0);
12735         return build_typeid (operand_0);
12736       }
12737
12738     case VAR_DECL:
12739       if (!args)
12740         return t;
12741       /* Fall through */
12742
12743     case PARM_DECL:
12744       {
12745         tree r = tsubst_copy (t, args, complain, in_decl);
12746
12747         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
12748           /* If the original type was a reference, we'll be wrapped in
12749              the appropriate INDIRECT_REF.  */
12750           r = convert_from_reference (r);
12751         return r;
12752       }
12753
12754     case VA_ARG_EXPR:
12755       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
12756                              tsubst_copy (TREE_TYPE (t), args, complain,
12757                                           in_decl));
12758
12759     case OFFSETOF_EXPR:
12760       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
12761
12762     case TRAIT_EXPR:
12763       {
12764         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
12765                                   complain, in_decl);
12766
12767         tree type2 = TRAIT_EXPR_TYPE2 (t);
12768         if (type2)
12769           type2 = tsubst_copy (type2, args, complain, in_decl);
12770         
12771         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
12772       }
12773
12774     case STMT_EXPR:
12775       {
12776         tree old_stmt_expr = cur_stmt_expr;
12777         tree stmt_expr = begin_stmt_expr ();
12778
12779         cur_stmt_expr = stmt_expr;
12780         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
12781                      integral_constant_expression_p);
12782         stmt_expr = finish_stmt_expr (stmt_expr, false);
12783         cur_stmt_expr = old_stmt_expr;
12784
12785         /* If the resulting list of expression statement is empty,
12786            fold it further into void_zero_node.  */
12787         if (empty_expr_stmt_p (stmt_expr))
12788           stmt_expr = void_zero_node;
12789
12790         return stmt_expr;
12791       }
12792
12793     case CONST_DECL:
12794       t = tsubst_copy (t, args, complain, in_decl);
12795       /* As in finish_id_expression, we resolve enumeration constants
12796          to their underlying values.  */
12797       if (TREE_CODE (t) == CONST_DECL)
12798         {
12799           used_types_insert (TREE_TYPE (t));
12800           return DECL_INITIAL (t);
12801         }
12802       return t;
12803
12804     case LAMBDA_EXPR:
12805       {
12806         tree r = build_lambda_expr ();
12807
12808         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12809         TREE_TYPE (r) = type;
12810         CLASSTYPE_LAMBDA_EXPR (type) = r;
12811
12812         LAMBDA_EXPR_LOCATION (r)
12813           = LAMBDA_EXPR_LOCATION (t);
12814         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
12815           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
12816         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
12817         LAMBDA_EXPR_DISCRIMINATOR (r)
12818           = (LAMBDA_EXPR_DISCRIMINATOR (t));
12819         LAMBDA_EXPR_CAPTURE_LIST (r)
12820           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
12821         LAMBDA_EXPR_THIS_CAPTURE (r)
12822           = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
12823         LAMBDA_EXPR_EXTRA_SCOPE (r)
12824           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
12825
12826         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
12827         determine_visibility (TYPE_NAME (type));
12828         /* Now that we know visibility, instantiate the type so we have a
12829            declaration of the op() for later calls to lambda_function.  */
12830         complete_type (type);
12831
12832         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
12833         if (type)
12834           apply_lambda_return_type (r, type);
12835
12836         return build_lambda_object (r);
12837       }
12838
12839     default:
12840       /* Handle Objective-C++ constructs, if appropriate.  */
12841       {
12842         tree subst
12843           = objcp_tsubst_copy_and_build (t, args, complain,
12844                                          in_decl, /*function_p=*/false);
12845         if (subst)
12846           return subst;
12847       }
12848       return tsubst_copy (t, args, complain, in_decl);
12849     }
12850
12851 #undef RECUR
12852 }
12853
12854 /* Verify that the instantiated ARGS are valid. For type arguments,
12855    make sure that the type's linkage is ok. For non-type arguments,
12856    make sure they are constants if they are integral or enumerations.
12857    Emit an error under control of COMPLAIN, and return TRUE on error.  */
12858
12859 static bool
12860 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
12861 {
12862   if (ARGUMENT_PACK_P (t))
12863     {
12864       tree vec = ARGUMENT_PACK_ARGS (t);
12865       int len = TREE_VEC_LENGTH (vec);
12866       bool result = false;
12867       int i;
12868
12869       for (i = 0; i < len; ++i)
12870         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
12871           result = true;
12872       return result;
12873     }
12874   else if (TYPE_P (t))
12875     {
12876       /* [basic.link]: A name with no linkage (notably, the name
12877          of a class or enumeration declared in a local scope)
12878          shall not be used to declare an entity with linkage.
12879          This implies that names with no linkage cannot be used as
12880          template arguments
12881
12882          DR 757 relaxes this restriction for C++0x.  */
12883       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
12884                  : no_linkage_check (t, /*relaxed_p=*/false));
12885
12886       if (nt)
12887         {
12888           /* DR 488 makes use of a type with no linkage cause
12889              type deduction to fail.  */
12890           if (complain & tf_error)
12891             {
12892               if (TYPE_ANONYMOUS_P (nt))
12893                 error ("%qT is/uses anonymous type", t);
12894               else
12895                 error ("template argument for %qD uses local type %qT",
12896                        tmpl, t);
12897             }
12898           return true;
12899         }
12900       /* In order to avoid all sorts of complications, we do not
12901          allow variably-modified types as template arguments.  */
12902       else if (variably_modified_type_p (t, NULL_TREE))
12903         {
12904           if (complain & tf_error)
12905             error ("%qT is a variably modified type", t);
12906           return true;
12907         }
12908     }
12909   /* A non-type argument of integral or enumerated type must be a
12910      constant.  */
12911   else if (TREE_TYPE (t)
12912            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
12913            && !TREE_CONSTANT (t))
12914     {
12915       if (complain & tf_error)
12916         error ("integral expression %qE is not constant", t);
12917       return true;
12918     }
12919   return false;
12920 }
12921
12922 static bool
12923 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
12924 {
12925   int ix, len = DECL_NTPARMS (tmpl);
12926   bool result = false;
12927
12928   for (ix = 0; ix != len; ix++)
12929     {
12930       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
12931         result = true;
12932     }
12933   if (result && (complain & tf_error))
12934     error ("  trying to instantiate %qD", tmpl);
12935   return result;
12936 }
12937
12938 /* Instantiate the indicated variable or function template TMPL with
12939    the template arguments in TARG_PTR.  */
12940
12941 tree
12942 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
12943 {
12944   tree targ_ptr = orig_args;
12945   tree fndecl;
12946   tree gen_tmpl;
12947   tree spec;
12948   HOST_WIDE_INT saved_processing_template_decl;
12949
12950   if (tmpl == error_mark_node)
12951     return error_mark_node;
12952
12953   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
12954
12955   /* If this function is a clone, handle it specially.  */
12956   if (DECL_CLONED_FUNCTION_P (tmpl))
12957     {
12958       tree spec;
12959       tree clone;
12960
12961       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
12962          DECL_CLONED_FUNCTION.  */
12963       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
12964                                    targ_ptr, complain);
12965       if (spec == error_mark_node)
12966         return error_mark_node;
12967
12968       /* Look for the clone.  */
12969       FOR_EACH_CLONE (clone, spec)
12970         if (DECL_NAME (clone) == DECL_NAME (tmpl))
12971           return clone;
12972       /* We should always have found the clone by now.  */
12973       gcc_unreachable ();
12974       return NULL_TREE;
12975     }
12976
12977   /* Check to see if we already have this specialization.  */
12978   gen_tmpl = most_general_template (tmpl);
12979   if (tmpl != gen_tmpl)
12980     /* The TMPL is a partial instantiation.  To get a full set of
12981        arguments we must add the arguments used to perform the
12982        partial instantiation.  */
12983     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
12984                                             targ_ptr);
12985
12986   /* It would be nice to avoid hashing here and then again in tsubst_decl,
12987      but it doesn't seem to be on the hot path.  */
12988   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
12989
12990   gcc_assert (tmpl == gen_tmpl
12991               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
12992                   == spec)
12993               || fndecl == NULL_TREE);
12994
12995   if (spec != NULL_TREE)
12996     return spec;
12997
12998   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
12999                                complain))
13000     return error_mark_node;
13001
13002   /* We are building a FUNCTION_DECL, during which the access of its
13003      parameters and return types have to be checked.  However this
13004      FUNCTION_DECL which is the desired context for access checking
13005      is not built yet.  We solve this chicken-and-egg problem by
13006      deferring all checks until we have the FUNCTION_DECL.  */
13007   push_deferring_access_checks (dk_deferred);
13008
13009   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
13010      (because, for example, we have encountered a non-dependent
13011      function call in the body of a template function and must now
13012      determine which of several overloaded functions will be called),
13013      within the instantiation itself we are not processing a
13014      template.  */  
13015   saved_processing_template_decl = processing_template_decl;
13016   processing_template_decl = 0;
13017   /* Substitute template parameters to obtain the specialization.  */
13018   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
13019                    targ_ptr, complain, gen_tmpl);
13020   processing_template_decl = saved_processing_template_decl;
13021   if (fndecl == error_mark_node)
13022     return error_mark_node;
13023
13024   /* Now we know the specialization, compute access previously
13025      deferred.  */
13026   push_access_scope (fndecl);
13027
13028   /* Some typedefs referenced from within the template code need to be access
13029      checked at template instantiation time, i.e now. These types were
13030      added to the template at parsing time. Let's get those and perfom
13031      the acces checks then.  */
13032   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
13033   perform_deferred_access_checks ();
13034   pop_access_scope (fndecl);
13035   pop_deferring_access_checks ();
13036
13037   /* The DECL_TI_TEMPLATE should always be the immediate parent
13038      template, not the most general template.  */
13039   DECL_TI_TEMPLATE (fndecl) = tmpl;
13040
13041   /* If we've just instantiated the main entry point for a function,
13042      instantiate all the alternate entry points as well.  We do this
13043      by cloning the instantiation of the main entry point, not by
13044      instantiating the template clones.  */
13045   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
13046     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
13047
13048   return fndecl;
13049 }
13050
13051 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
13052    NARGS elements of the arguments that are being used when calling
13053    it.  TARGS is a vector into which the deduced template arguments
13054    are placed.
13055
13056    Return zero for success, 2 for an incomplete match that doesn't resolve
13057    all the types, and 1 for complete failure.  An error message will be
13058    printed only for an incomplete match.
13059
13060    If FN is a conversion operator, or we are trying to produce a specific
13061    specialization, RETURN_TYPE is the return type desired.
13062
13063    The EXPLICIT_TARGS are explicit template arguments provided via a
13064    template-id.
13065
13066    The parameter STRICT is one of:
13067
13068    DEDUCE_CALL:
13069      We are deducing arguments for a function call, as in
13070      [temp.deduct.call].
13071
13072    DEDUCE_CONV:
13073      We are deducing arguments for a conversion function, as in
13074      [temp.deduct.conv].
13075
13076    DEDUCE_EXACT:
13077      We are deducing arguments when doing an explicit instantiation
13078      as in [temp.explicit], when determining an explicit specialization
13079      as in [temp.expl.spec], or when taking the address of a function
13080      template, as in [temp.deduct.funcaddr].  */
13081
13082 int
13083 fn_type_unification (tree fn,
13084                      tree explicit_targs,
13085                      tree targs,
13086                      const tree *args,
13087                      unsigned int nargs,
13088                      tree return_type,
13089                      unification_kind_t strict,
13090                      int flags)
13091 {
13092   tree parms;
13093   tree fntype;
13094   int result;
13095   bool incomplete_argument_packs_p = false;
13096
13097   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
13098
13099   fntype = TREE_TYPE (fn);
13100   if (explicit_targs)
13101     {
13102       /* [temp.deduct]
13103
13104          The specified template arguments must match the template
13105          parameters in kind (i.e., type, nontype, template), and there
13106          must not be more arguments than there are parameters;
13107          otherwise type deduction fails.
13108
13109          Nontype arguments must match the types of the corresponding
13110          nontype template parameters, or must be convertible to the
13111          types of the corresponding nontype parameters as specified in
13112          _temp.arg.nontype_, otherwise type deduction fails.
13113
13114          All references in the function type of the function template
13115          to the corresponding template parameters are replaced by the
13116          specified template argument values.  If a substitution in a
13117          template parameter or in the function type of the function
13118          template results in an invalid type, type deduction fails.  */
13119       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
13120       int i, len = TREE_VEC_LENGTH (tparms);
13121       tree converted_args;
13122       bool incomplete = false;
13123
13124       if (explicit_targs == error_mark_node)
13125         return 1;
13126
13127       converted_args
13128         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
13129                                   /*require_all_args=*/false,
13130                                   /*use_default_args=*/false));
13131       if (converted_args == error_mark_node)
13132         return 1;
13133
13134       /* Substitute the explicit args into the function type.  This is
13135          necessary so that, for instance, explicitly declared function
13136          arguments can match null pointed constants.  If we were given
13137          an incomplete set of explicit args, we must not do semantic
13138          processing during substitution as we could create partial
13139          instantiations.  */
13140       for (i = 0; i < len; i++)
13141         {
13142           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13143           bool parameter_pack = false;
13144
13145           /* Dig out the actual parm.  */
13146           if (TREE_CODE (parm) == TYPE_DECL
13147               || TREE_CODE (parm) == TEMPLATE_DECL)
13148             {
13149               parm = TREE_TYPE (parm);
13150               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
13151             }
13152           else if (TREE_CODE (parm) == PARM_DECL)
13153             {
13154               parm = DECL_INITIAL (parm);
13155               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
13156             }
13157
13158           if (parameter_pack)
13159             {
13160               int level, idx;
13161               tree targ;
13162               template_parm_level_and_index (parm, &level, &idx);
13163
13164               /* Mark the argument pack as "incomplete". We could
13165                  still deduce more arguments during unification.  */
13166               targ = TMPL_ARG (converted_args, level, idx);
13167               if (targ)
13168                 {
13169                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
13170                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
13171                     = ARGUMENT_PACK_ARGS (targ);
13172                 }
13173
13174               /* We have some incomplete argument packs.  */
13175               incomplete_argument_packs_p = true;
13176             }
13177         }
13178
13179       if (incomplete_argument_packs_p)
13180         /* Any substitution is guaranteed to be incomplete if there
13181            are incomplete argument packs, because we can still deduce
13182            more arguments.  */
13183         incomplete = 1;
13184       else
13185         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
13186
13187       processing_template_decl += incomplete;
13188       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
13189       processing_template_decl -= incomplete;
13190
13191       if (fntype == error_mark_node)
13192         return 1;
13193
13194       /* Place the explicitly specified arguments in TARGS.  */
13195       for (i = NUM_TMPL_ARGS (converted_args); i--;)
13196         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
13197     }
13198
13199   /* Never do unification on the 'this' parameter.  */
13200   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
13201
13202   if (return_type)
13203     {
13204       tree *new_args;
13205
13206       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
13207       new_args = XALLOCAVEC (tree, nargs + 1);
13208       new_args[0] = return_type;
13209       memcpy (new_args + 1, args, nargs * sizeof (tree));
13210       args = new_args;
13211       ++nargs;
13212     }
13213
13214   /* We allow incomplete unification without an error message here
13215      because the standard doesn't seem to explicitly prohibit it.  Our
13216      callers must be ready to deal with unification failures in any
13217      event.  */
13218   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
13219                                   targs, parms, args, nargs, /*subr=*/0,
13220                                   strict, flags);
13221
13222   if (result == 0 && incomplete_argument_packs_p)
13223     {
13224       int i, len = NUM_TMPL_ARGS (targs);
13225
13226       /* Clear the "incomplete" flags on all argument packs.  */
13227       for (i = 0; i < len; i++)
13228         {
13229           tree arg = TREE_VEC_ELT (targs, i);
13230           if (ARGUMENT_PACK_P (arg))
13231             {
13232               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
13233               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
13234             }
13235         }
13236     }
13237
13238   /* Now that we have bindings for all of the template arguments,
13239      ensure that the arguments deduced for the template template
13240      parameters have compatible template parameter lists.  We cannot
13241      check this property before we have deduced all template
13242      arguments, because the template parameter types of a template
13243      template parameter might depend on prior template parameters
13244      deduced after the template template parameter.  The following
13245      ill-formed example illustrates this issue:
13246
13247        template<typename T, template<T> class C> void f(C<5>, T);
13248
13249        template<int N> struct X {};
13250
13251        void g() {
13252          f(X<5>(), 5l); // error: template argument deduction fails
13253        }
13254
13255      The template parameter list of 'C' depends on the template type
13256      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
13257      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
13258      time that we deduce 'C'.  */
13259   if (result == 0
13260       && !template_template_parm_bindings_ok_p 
13261            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
13262     return 1;
13263
13264   if (result == 0)
13265     /* All is well so far.  Now, check:
13266
13267        [temp.deduct]
13268
13269        When all template arguments have been deduced, all uses of
13270        template parameters in nondeduced contexts are replaced with
13271        the corresponding deduced argument values.  If the
13272        substitution results in an invalid type, as described above,
13273        type deduction fails.  */
13274     {
13275       tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
13276       if (substed == error_mark_node)
13277         return 1;
13278
13279       /* If we're looking for an exact match, check that what we got
13280          is indeed an exact match.  It might not be if some template
13281          parameters are used in non-deduced contexts.  */
13282       if (strict == DEDUCE_EXACT)
13283         {
13284           unsigned int i;
13285
13286           tree sarg
13287             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
13288           if (return_type)
13289             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
13290           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
13291             if (!same_type_p (args[i], TREE_VALUE (sarg)))
13292               return 1;
13293         }
13294     }
13295
13296   return result;
13297 }
13298
13299 /* Adjust types before performing type deduction, as described in
13300    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
13301    sections are symmetric.  PARM is the type of a function parameter
13302    or the return type of the conversion function.  ARG is the type of
13303    the argument passed to the call, or the type of the value
13304    initialized with the result of the conversion function.
13305    ARG_EXPR is the original argument expression, which may be null.  */
13306
13307 static int
13308 maybe_adjust_types_for_deduction (unification_kind_t strict,
13309                                   tree* parm,
13310                                   tree* arg,
13311                                   tree arg_expr)
13312 {
13313   int result = 0;
13314
13315   switch (strict)
13316     {
13317     case DEDUCE_CALL:
13318       break;
13319
13320     case DEDUCE_CONV:
13321       {
13322         /* Swap PARM and ARG throughout the remainder of this
13323            function; the handling is precisely symmetric since PARM
13324            will initialize ARG rather than vice versa.  */
13325         tree* temp = parm;
13326         parm = arg;
13327         arg = temp;
13328         break;
13329       }
13330
13331     case DEDUCE_EXACT:
13332       /* Core issue #873: Do the DR606 thing (see below) for these cases,
13333          too, but here handle it by stripping the reference from PARM
13334          rather than by adding it to ARG.  */
13335       if (TREE_CODE (*parm) == REFERENCE_TYPE
13336           && TYPE_REF_IS_RVALUE (*parm)
13337           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13338           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13339           && TREE_CODE (*arg) == REFERENCE_TYPE
13340           && !TYPE_REF_IS_RVALUE (*arg))
13341         *parm = TREE_TYPE (*parm);
13342       /* Nothing else to do in this case.  */
13343       return 0;
13344
13345     default:
13346       gcc_unreachable ();
13347     }
13348
13349   if (TREE_CODE (*parm) != REFERENCE_TYPE)
13350     {
13351       /* [temp.deduct.call]
13352
13353          If P is not a reference type:
13354
13355          --If A is an array type, the pointer type produced by the
13356          array-to-pointer standard conversion (_conv.array_) is
13357          used in place of A for type deduction; otherwise,
13358
13359          --If A is a function type, the pointer type produced by
13360          the function-to-pointer standard conversion
13361          (_conv.func_) is used in place of A for type deduction;
13362          otherwise,
13363
13364          --If A is a cv-qualified type, the top level
13365          cv-qualifiers of A's type are ignored for type
13366          deduction.  */
13367       if (TREE_CODE (*arg) == ARRAY_TYPE)
13368         *arg = build_pointer_type (TREE_TYPE (*arg));
13369       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
13370         *arg = build_pointer_type (*arg);
13371       else
13372         *arg = TYPE_MAIN_VARIANT (*arg);
13373     }
13374
13375   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
13376      of the form T&&, where T is a template parameter, and the argument
13377      is an lvalue, T is deduced as A& */
13378   if (TREE_CODE (*parm) == REFERENCE_TYPE
13379       && TYPE_REF_IS_RVALUE (*parm)
13380       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13381       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13382       && arg_expr && real_lvalue_p (arg_expr))
13383     *arg = build_reference_type (*arg);
13384
13385   /* [temp.deduct.call]
13386
13387      If P is a cv-qualified type, the top level cv-qualifiers
13388      of P's type are ignored for type deduction.  If P is a
13389      reference type, the type referred to by P is used for
13390      type deduction.  */
13391   *parm = TYPE_MAIN_VARIANT (*parm);
13392   if (TREE_CODE (*parm) == REFERENCE_TYPE)
13393     {
13394       *parm = TREE_TYPE (*parm);
13395       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13396     }
13397
13398   /* DR 322. For conversion deduction, remove a reference type on parm
13399      too (which has been swapped into ARG).  */
13400   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
13401     *arg = TREE_TYPE (*arg);
13402
13403   return result;
13404 }
13405
13406 /* Most parms like fn_type_unification.
13407
13408    If SUBR is 1, we're being called recursively (to unify the
13409    arguments of a function or method parameter of a function
13410    template). */
13411
13412 static int
13413 type_unification_real (tree tparms,
13414                        tree targs,
13415                        tree xparms,
13416                        const tree *xargs,
13417                        unsigned int xnargs,
13418                        int subr,
13419                        unification_kind_t strict,
13420                        int flags)
13421 {
13422   tree parm, arg, arg_expr;
13423   int i;
13424   int ntparms = TREE_VEC_LENGTH (tparms);
13425   int sub_strict;
13426   int saw_undeduced = 0;
13427   tree parms;
13428   const tree *args;
13429   unsigned int nargs;
13430   unsigned int ia;
13431
13432   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
13433   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
13434   gcc_assert (ntparms > 0);
13435
13436   /* Reset the number of non-defaulted template arguments contained
13437      in in TARGS.  */
13438   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
13439
13440   switch (strict)
13441     {
13442     case DEDUCE_CALL:
13443       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
13444                     | UNIFY_ALLOW_DERIVED);
13445       break;
13446
13447     case DEDUCE_CONV:
13448       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
13449       break;
13450
13451     case DEDUCE_EXACT:
13452       sub_strict = UNIFY_ALLOW_NONE;
13453       break;
13454
13455     default:
13456       gcc_unreachable ();
13457     }
13458
13459  again:
13460   parms = xparms;
13461   args = xargs;
13462   nargs = xnargs;
13463
13464   ia = 0;
13465   while (parms && parms != void_list_node
13466          && ia < nargs)
13467     {
13468       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13469         break;
13470
13471       parm = TREE_VALUE (parms);
13472       parms = TREE_CHAIN (parms);
13473       arg = args[ia];
13474       ++ia;
13475       arg_expr = NULL;
13476
13477       if (arg == error_mark_node)
13478         return 1;
13479       if (arg == unknown_type_node)
13480         /* We can't deduce anything from this, but we might get all the
13481            template args from other function args.  */
13482         continue;
13483
13484       /* Conversions will be performed on a function argument that
13485          corresponds with a function parameter that contains only
13486          non-deducible template parameters and explicitly specified
13487          template parameters.  */
13488       if (!uses_template_parms (parm))
13489         {
13490           tree type;
13491
13492           if (!TYPE_P (arg))
13493             type = TREE_TYPE (arg);
13494           else
13495             type = arg;
13496
13497           if (same_type_p (parm, type))
13498             continue;
13499           if (strict != DEDUCE_EXACT
13500               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
13501                                   flags))
13502             continue;
13503
13504           return 1;
13505         }
13506
13507       if (!TYPE_P (arg))
13508         {
13509           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
13510           if (type_unknown_p (arg))
13511             {
13512               /* [temp.deduct.type] 
13513
13514                  A template-argument can be deduced from a pointer to
13515                  function or pointer to member function argument if
13516                  the set of overloaded functions does not contain
13517                  function templates and at most one of a set of
13518                  overloaded functions provides a unique match.  */
13519               if (resolve_overloaded_unification
13520                   (tparms, targs, parm, arg, strict, sub_strict))
13521                 continue;
13522
13523               return 1;
13524             }
13525           arg_expr = arg;
13526           arg = unlowered_expr_type (arg);
13527           if (arg == error_mark_node)
13528             return 1;
13529         }
13530
13531       {
13532         int arg_strict = sub_strict;
13533
13534         if (!subr)
13535           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
13536                                                           arg_expr);
13537
13538         if (arg == init_list_type_node && arg_expr)
13539           arg = arg_expr;
13540         if (unify (tparms, targs, parm, arg, arg_strict))
13541           return 1;
13542       }
13543     }
13544
13545
13546   if (parms 
13547       && parms != void_list_node
13548       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13549     {
13550       /* Unify the remaining arguments with the pack expansion type.  */
13551       tree argvec;
13552       tree parmvec = make_tree_vec (1);
13553
13554       /* Allocate a TREE_VEC and copy in all of the arguments */ 
13555       argvec = make_tree_vec (nargs - ia);
13556       for (i = 0; ia < nargs; ++ia, ++i)
13557         TREE_VEC_ELT (argvec, i) = args[ia];
13558
13559       /* Copy the parameter into parmvec.  */
13560       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
13561       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
13562                                 /*call_args_p=*/true, /*subr=*/subr))
13563         return 1;
13564
13565       /* Advance to the end of the list of parameters.  */
13566       parms = TREE_CHAIN (parms);
13567     }
13568
13569   /* Fail if we've reached the end of the parm list, and more args
13570      are present, and the parm list isn't variadic.  */
13571   if (ia < nargs && parms == void_list_node)
13572     return 1;
13573   /* Fail if parms are left and they don't have default values.  */
13574   if (parms && parms != void_list_node
13575       && TREE_PURPOSE (parms) == NULL_TREE)
13576     return 1;
13577
13578   if (!subr)
13579     for (i = 0; i < ntparms; i++)
13580       if (!TREE_VEC_ELT (targs, i))
13581         {
13582           tree tparm;
13583
13584           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
13585             continue;
13586
13587           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13588
13589           /* If this is an undeduced nontype parameter that depends on
13590              a type parameter, try another pass; its type may have been
13591              deduced from a later argument than the one from which
13592              this parameter can be deduced.  */
13593           if (TREE_CODE (tparm) == PARM_DECL
13594               && uses_template_parms (TREE_TYPE (tparm))
13595               && !saw_undeduced++)
13596             goto again;
13597
13598           /* Core issue #226 (C++0x) [temp.deduct]:
13599
13600                If a template argument has not been deduced, its
13601                default template argument, if any, is used. 
13602
13603              When we are in C++98 mode, TREE_PURPOSE will either
13604              be NULL_TREE or ERROR_MARK_NODE, so we do not need
13605              to explicitly check cxx_dialect here.  */
13606           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
13607             {
13608               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13609               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
13610               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
13611               arg = convert_template_argument (parm, arg, targs, tf_none,
13612                                                i, NULL_TREE);
13613               if (arg == error_mark_node)
13614                 return 1;
13615               else
13616                 {
13617                   TREE_VEC_ELT (targs, i) = arg;
13618                   /* The position of the first default template argument,
13619                      is also the number of non-defaulted arguments in TARGS.
13620                      Record that.  */
13621                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
13622                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
13623                   continue;
13624                 }
13625             }
13626
13627           /* If the type parameter is a parameter pack, then it will
13628              be deduced to an empty parameter pack.  */
13629           if (template_parameter_pack_p (tparm))
13630             {
13631               tree arg;
13632
13633               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
13634                 {
13635                   arg = make_node (NONTYPE_ARGUMENT_PACK);
13636                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
13637                   TREE_CONSTANT (arg) = 1;
13638                 }
13639               else
13640                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
13641
13642               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
13643
13644               TREE_VEC_ELT (targs, i) = arg;
13645               continue;
13646             }
13647
13648           return 2;
13649         }
13650 #ifdef ENABLE_CHECKING
13651   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
13652     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
13653 #endif
13654
13655   return 0;
13656 }
13657
13658 /* Subroutine of type_unification_real.  Args are like the variables
13659    at the call site.  ARG is an overloaded function (or template-id);
13660    we try deducing template args from each of the overloads, and if
13661    only one succeeds, we go with that.  Modifies TARGS and returns
13662    true on success.  */
13663
13664 static bool
13665 resolve_overloaded_unification (tree tparms,
13666                                 tree targs,
13667                                 tree parm,
13668                                 tree arg,
13669                                 unification_kind_t strict,
13670                                 int sub_strict)
13671 {
13672   tree tempargs = copy_node (targs);
13673   int good = 0;
13674   tree goodfn = NULL_TREE;
13675   bool addr_p;
13676
13677   if (TREE_CODE (arg) == ADDR_EXPR)
13678     {
13679       arg = TREE_OPERAND (arg, 0);
13680       addr_p = true;
13681     }
13682   else
13683     addr_p = false;
13684
13685   if (TREE_CODE (arg) == COMPONENT_REF)
13686     /* Handle `&x' where `x' is some static or non-static member
13687        function name.  */
13688     arg = TREE_OPERAND (arg, 1);
13689
13690   if (TREE_CODE (arg) == OFFSET_REF)
13691     arg = TREE_OPERAND (arg, 1);
13692
13693   /* Strip baselink information.  */
13694   if (BASELINK_P (arg))
13695     arg = BASELINK_FUNCTIONS (arg);
13696
13697   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
13698     {
13699       /* If we got some explicit template args, we need to plug them into
13700          the affected templates before we try to unify, in case the
13701          explicit args will completely resolve the templates in question.  */
13702
13703       tree expl_subargs = TREE_OPERAND (arg, 1);
13704       arg = TREE_OPERAND (arg, 0);
13705
13706       for (; arg; arg = OVL_NEXT (arg))
13707         {
13708           tree fn = OVL_CURRENT (arg);
13709           tree subargs, elem;
13710
13711           if (TREE_CODE (fn) != TEMPLATE_DECL)
13712             continue;
13713
13714           ++processing_template_decl;
13715           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
13716                                   expl_subargs, /*check_ret=*/false);
13717           if (subargs)
13718             {
13719               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
13720               if (try_one_overload (tparms, targs, tempargs, parm,
13721                                     elem, strict, sub_strict, addr_p)
13722                   && (!goodfn || !decls_match (goodfn, elem)))
13723                 {
13724                   goodfn = elem;
13725                   ++good;
13726                 }
13727             }
13728           --processing_template_decl;
13729         }
13730     }
13731   else if (TREE_CODE (arg) != OVERLOAD
13732            && TREE_CODE (arg) != FUNCTION_DECL)
13733     /* If ARG is, for example, "(0, &f)" then its type will be unknown
13734        -- but the deduction does not succeed because the expression is
13735        not just the function on its own.  */
13736     return false;
13737   else
13738     for (; arg; arg = OVL_NEXT (arg))
13739       if (try_one_overload (tparms, targs, tempargs, parm,
13740                             TREE_TYPE (OVL_CURRENT (arg)),
13741                             strict, sub_strict, addr_p)
13742           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
13743         {
13744           goodfn = OVL_CURRENT (arg);
13745           ++good;
13746         }
13747
13748   /* [temp.deduct.type] A template-argument can be deduced from a pointer
13749      to function or pointer to member function argument if the set of
13750      overloaded functions does not contain function templates and at most
13751      one of a set of overloaded functions provides a unique match.
13752
13753      So if we found multiple possibilities, we return success but don't
13754      deduce anything.  */
13755
13756   if (good == 1)
13757     {
13758       int i = TREE_VEC_LENGTH (targs);
13759       for (; i--; )
13760         if (TREE_VEC_ELT (tempargs, i))
13761           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
13762     }
13763   if (good)
13764     return true;
13765
13766   return false;
13767 }
13768
13769 /* Core DR 115: In contexts where deduction is done and fails, or in
13770    contexts where deduction is not done, if a template argument list is
13771    specified and it, along with any default template arguments, identifies
13772    a single function template specialization, then the template-id is an
13773    lvalue for the function template specialization.  */
13774
13775 tree
13776 resolve_nondeduced_context (tree orig_expr)
13777 {
13778   tree expr, offset, baselink;
13779   bool addr;
13780
13781   if (!type_unknown_p (orig_expr))
13782     return orig_expr;
13783
13784   expr = orig_expr;
13785   addr = false;
13786   offset = NULL_TREE;
13787   baselink = NULL_TREE;
13788
13789   if (TREE_CODE (expr) == ADDR_EXPR)
13790     {
13791       expr = TREE_OPERAND (expr, 0);
13792       addr = true;
13793     }
13794   if (TREE_CODE (expr) == OFFSET_REF)
13795     {
13796       offset = expr;
13797       expr = TREE_OPERAND (expr, 1);
13798     }
13799   if (TREE_CODE (expr) == BASELINK)
13800     {
13801       baselink = expr;
13802       expr = BASELINK_FUNCTIONS (expr);
13803     }
13804
13805   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
13806     {
13807       int good = 0;
13808       tree goodfn = NULL_TREE;
13809
13810       /* If we got some explicit template args, we need to plug them into
13811          the affected templates before we try to unify, in case the
13812          explicit args will completely resolve the templates in question.  */
13813
13814       tree expl_subargs = TREE_OPERAND (expr, 1);
13815       tree arg = TREE_OPERAND (expr, 0);
13816       tree badfn = NULL_TREE;
13817       tree badargs = NULL_TREE;
13818
13819       for (; arg; arg = OVL_NEXT (arg))
13820         {
13821           tree fn = OVL_CURRENT (arg);
13822           tree subargs, elem;
13823
13824           if (TREE_CODE (fn) != TEMPLATE_DECL)
13825             continue;
13826
13827           ++processing_template_decl;
13828           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
13829                                   expl_subargs, /*check_ret=*/false);
13830           if (subargs && !any_dependent_template_arguments_p (subargs))
13831             {
13832               elem = instantiate_template (fn, subargs, tf_none);
13833               if (elem == error_mark_node)
13834                 {
13835                   badfn = fn;
13836                   badargs = subargs;
13837                 }
13838               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
13839                 {
13840                   goodfn = elem;
13841                   ++good;
13842                 }
13843             }
13844           --processing_template_decl;
13845         }
13846       if (good == 1)
13847         {
13848           expr = goodfn;
13849           if (baselink)
13850             expr = build_baselink (BASELINK_BINFO (baselink),
13851                                    BASELINK_ACCESS_BINFO (baselink),
13852                                    expr, BASELINK_OPTYPE (baselink));
13853           if (offset)
13854             expr = build2 (OFFSET_REF, TREE_TYPE (expr),
13855                            TREE_OPERAND (offset, 0), expr);
13856           if (addr)
13857             expr = build_address (expr);
13858           return expr;
13859         }
13860       else if (good == 0 && badargs)
13861         /* There were no good options and at least one bad one, so let the
13862            user know what the problem is.  */
13863         instantiate_template (badfn, badargs, tf_warning_or_error);
13864     }
13865   return orig_expr;
13866 }
13867
13868 /* Subroutine of resolve_overloaded_unification; does deduction for a single
13869    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
13870    different overloads deduce different arguments for a given parm.
13871    ADDR_P is true if the expression for which deduction is being
13872    performed was of the form "& fn" rather than simply "fn".
13873
13874    Returns 1 on success.  */
13875
13876 static int
13877 try_one_overload (tree tparms,
13878                   tree orig_targs,
13879                   tree targs,
13880                   tree parm,
13881                   tree arg,
13882                   unification_kind_t strict,
13883                   int sub_strict,
13884                   bool addr_p)
13885 {
13886   int nargs;
13887   tree tempargs;
13888   int i;
13889
13890   /* [temp.deduct.type] A template-argument can be deduced from a pointer
13891      to function or pointer to member function argument if the set of
13892      overloaded functions does not contain function templates and at most
13893      one of a set of overloaded functions provides a unique match.
13894
13895      So if this is a template, just return success.  */
13896
13897   if (uses_template_parms (arg))
13898     return 1;
13899
13900   if (TREE_CODE (arg) == METHOD_TYPE)
13901     arg = build_ptrmemfunc_type (build_pointer_type (arg));
13902   else if (addr_p)
13903     arg = build_pointer_type (arg);
13904
13905   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
13906
13907   /* We don't copy orig_targs for this because if we have already deduced
13908      some template args from previous args, unify would complain when we
13909      try to deduce a template parameter for the same argument, even though
13910      there isn't really a conflict.  */
13911   nargs = TREE_VEC_LENGTH (targs);
13912   tempargs = make_tree_vec (nargs);
13913
13914   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
13915     return 0;
13916
13917   /* First make sure we didn't deduce anything that conflicts with
13918      explicitly specified args.  */
13919   for (i = nargs; i--; )
13920     {
13921       tree elt = TREE_VEC_ELT (tempargs, i);
13922       tree oldelt = TREE_VEC_ELT (orig_targs, i);
13923
13924       if (!elt)
13925         /*NOP*/;
13926       else if (uses_template_parms (elt))
13927         /* Since we're unifying against ourselves, we will fill in
13928            template args used in the function parm list with our own
13929            template parms.  Discard them.  */
13930         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
13931       else if (oldelt && !template_args_equal (oldelt, elt))
13932         return 0;
13933     }
13934
13935   for (i = nargs; i--; )
13936     {
13937       tree elt = TREE_VEC_ELT (tempargs, i);
13938
13939       if (elt)
13940         TREE_VEC_ELT (targs, i) = elt;
13941     }
13942
13943   return 1;
13944 }
13945
13946 /* PARM is a template class (perhaps with unbound template
13947    parameters).  ARG is a fully instantiated type.  If ARG can be
13948    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
13949    TARGS are as for unify.  */
13950
13951 static tree
13952 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
13953 {
13954   tree copy_of_targs;
13955
13956   if (!CLASSTYPE_TEMPLATE_INFO (arg)
13957       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
13958           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
13959     return NULL_TREE;
13960
13961   /* We need to make a new template argument vector for the call to
13962      unify.  If we used TARGS, we'd clutter it up with the result of
13963      the attempted unification, even if this class didn't work out.
13964      We also don't want to commit ourselves to all the unifications
13965      we've already done, since unification is supposed to be done on
13966      an argument-by-argument basis.  In other words, consider the
13967      following pathological case:
13968
13969        template <int I, int J, int K>
13970        struct S {};
13971
13972        template <int I, int J>
13973        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
13974
13975        template <int I, int J, int K>
13976        void f(S<I, J, K>, S<I, I, I>);
13977
13978        void g() {
13979          S<0, 0, 0> s0;
13980          S<0, 1, 2> s2;
13981
13982          f(s0, s2);
13983        }
13984
13985      Now, by the time we consider the unification involving `s2', we
13986      already know that we must have `f<0, 0, 0>'.  But, even though
13987      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
13988      because there are two ways to unify base classes of S<0, 1, 2>
13989      with S<I, I, I>.  If we kept the already deduced knowledge, we
13990      would reject the possibility I=1.  */
13991   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
13992
13993   /* If unification failed, we're done.  */
13994   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
13995              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
13996     return NULL_TREE;
13997
13998   return arg;
13999 }
14000
14001 /* Given a template type PARM and a class type ARG, find the unique
14002    base type in ARG that is an instance of PARM.  We do not examine
14003    ARG itself; only its base-classes.  If there is not exactly one
14004    appropriate base class, return NULL_TREE.  PARM may be the type of
14005    a partial specialization, as well as a plain template type.  Used
14006    by unify.  */
14007
14008 static tree
14009 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14010 {
14011   tree rval = NULL_TREE;
14012   tree binfo;
14013
14014   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14015
14016   binfo = TYPE_BINFO (complete_type (arg));
14017   if (!binfo)
14018     /* The type could not be completed.  */
14019     return NULL_TREE;
14020
14021   /* Walk in inheritance graph order.  The search order is not
14022      important, and this avoids multiple walks of virtual bases.  */
14023   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14024     {
14025       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14026
14027       if (r)
14028         {
14029           /* If there is more than one satisfactory baseclass, then:
14030
14031                [temp.deduct.call]
14032
14033               If they yield more than one possible deduced A, the type
14034               deduction fails.
14035
14036              applies.  */
14037           if (rval && !same_type_p (r, rval))
14038             return NULL_TREE;
14039
14040           rval = r;
14041         }
14042     }
14043
14044   return rval;
14045 }
14046
14047 /* Returns the level of DECL, which declares a template parameter.  */
14048
14049 static int
14050 template_decl_level (tree decl)
14051 {
14052   switch (TREE_CODE (decl))
14053     {
14054     case TYPE_DECL:
14055     case TEMPLATE_DECL:
14056       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14057
14058     case PARM_DECL:
14059       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14060
14061     default:
14062       gcc_unreachable ();
14063     }
14064   return 0;
14065 }
14066
14067 /* Decide whether ARG can be unified with PARM, considering only the
14068    cv-qualifiers of each type, given STRICT as documented for unify.
14069    Returns nonzero iff the unification is OK on that basis.  */
14070
14071 static int
14072 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14073 {
14074   int arg_quals = cp_type_quals (arg);
14075   int parm_quals = cp_type_quals (parm);
14076
14077   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14078       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14079     {
14080       /*  Although a CVR qualifier is ignored when being applied to a
14081           substituted template parameter ([8.3.2]/1 for example), that
14082           does not apply during deduction [14.8.2.4]/1, (even though
14083           that is not explicitly mentioned, [14.8.2.4]/9 indicates
14084           this).  Except when we're allowing additional CV qualifiers
14085           at the outer level [14.8.2.1]/3,1st bullet.  */
14086       if ((TREE_CODE (arg) == REFERENCE_TYPE
14087            || TREE_CODE (arg) == FUNCTION_TYPE
14088            || TREE_CODE (arg) == METHOD_TYPE)
14089           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14090         return 0;
14091
14092       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14093           && (parm_quals & TYPE_QUAL_RESTRICT))
14094         return 0;
14095     }
14096
14097   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14098       && (arg_quals & parm_quals) != parm_quals)
14099     return 0;
14100
14101   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14102       && (parm_quals & arg_quals) != arg_quals)
14103     return 0;
14104
14105   return 1;
14106 }
14107
14108 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
14109 void 
14110 template_parm_level_and_index (tree parm, int* level, int* index)
14111 {
14112   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14113       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14114       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14115     {
14116       *index = TEMPLATE_TYPE_IDX (parm);
14117       *level = TEMPLATE_TYPE_LEVEL (parm);
14118     }
14119   else
14120     {
14121       *index = TEMPLATE_PARM_IDX (parm);
14122       *level = TEMPLATE_PARM_LEVEL (parm);
14123     }
14124 }
14125
14126 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14127    expansion at the end of PACKED_PARMS. Returns 0 if the type
14128    deduction succeeds, 1 otherwise. STRICT is the same as in
14129    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14130    call argument list. We'll need to adjust the arguments to make them
14131    types. SUBR tells us if this is from a recursive call to
14132    type_unification_real.  */
14133 int
14134 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
14135                       tree packed_args, int strict, bool call_args_p,
14136                       bool subr)
14137 {
14138   tree parm 
14139     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
14140   tree pattern = PACK_EXPANSION_PATTERN (parm);
14141   tree pack, packs = NULL_TREE;
14142   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
14143   int len = TREE_VEC_LENGTH (packed_args);
14144
14145   /* Determine the parameter packs we will be deducing from the
14146      pattern, and record their current deductions.  */
14147   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
14148        pack; pack = TREE_CHAIN (pack))
14149     {
14150       tree parm_pack = TREE_VALUE (pack);
14151       int idx, level;
14152
14153       /* Determine the index and level of this parameter pack.  */
14154       template_parm_level_and_index (parm_pack, &level, &idx);
14155
14156       /* Keep track of the parameter packs and their corresponding
14157          argument packs.  */
14158       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
14159       TREE_TYPE (packs) = make_tree_vec (len - start);
14160     }
14161   
14162   /* Loop through all of the arguments that have not yet been
14163      unified and unify each with the pattern.  */
14164   for (i = start; i < len; i++)
14165     {
14166       tree parm = pattern;
14167
14168       /* For each parameter pack, clear out the deduced value so that
14169          we can deduce it again.  */
14170       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14171         {
14172           int idx, level;
14173           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14174
14175           TMPL_ARG (targs, level, idx) = NULL_TREE;
14176         }
14177
14178       /* Unify the pattern with the current argument.  */
14179       {
14180         tree arg = TREE_VEC_ELT (packed_args, i);
14181         tree arg_expr = NULL_TREE;
14182         int arg_strict = strict;
14183         bool skip_arg_p = false;
14184
14185         if (call_args_p)
14186           {
14187             int sub_strict;
14188
14189             /* This mirrors what we do in type_unification_real.  */
14190             switch (strict)
14191               {
14192               case DEDUCE_CALL:
14193                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
14194                               | UNIFY_ALLOW_MORE_CV_QUAL
14195                               | UNIFY_ALLOW_DERIVED);
14196                 break;
14197                 
14198               case DEDUCE_CONV:
14199                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14200                 break;
14201                 
14202               case DEDUCE_EXACT:
14203                 sub_strict = UNIFY_ALLOW_NONE;
14204                 break;
14205                 
14206               default:
14207                 gcc_unreachable ();
14208               }
14209
14210             if (!TYPE_P (arg))
14211               {
14212                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14213                 if (type_unknown_p (arg))
14214                   {
14215                     /* [temp.deduct.type] A template-argument can be
14216                        deduced from a pointer to function or pointer
14217                        to member function argument if the set of
14218                        overloaded functions does not contain function
14219                        templates and at most one of a set of
14220                        overloaded functions provides a unique
14221                        match.  */
14222
14223                     if (resolve_overloaded_unification
14224                         (tparms, targs, parm, arg,
14225                          (unification_kind_t) strict,
14226                          sub_strict)
14227                         != 0)
14228                       return 1;
14229                     skip_arg_p = true;
14230                   }
14231
14232                 if (!skip_arg_p)
14233                   {
14234                     arg_expr = arg;
14235                     arg = unlowered_expr_type (arg);
14236                     if (arg == error_mark_node)
14237                       return 1;
14238                   }
14239               }
14240       
14241             arg_strict = sub_strict;
14242
14243             if (!subr)
14244               arg_strict |= 
14245                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
14246                                                   &parm, &arg, arg_expr);
14247           }
14248
14249         if (!skip_arg_p)
14250           {
14251             /* For deduction from an init-list we need the actual list.  */
14252             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
14253               arg = arg_expr;
14254             if (unify (tparms, targs, parm, arg, arg_strict))
14255               return 1;
14256           }
14257       }
14258
14259       /* For each parameter pack, collect the deduced value.  */
14260       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14261         {
14262           int idx, level;
14263           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14264
14265           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
14266             TMPL_ARG (targs, level, idx);
14267         }
14268     }
14269
14270   /* Verify that the results of unification with the parameter packs
14271      produce results consistent with what we've seen before, and make
14272      the deduced argument packs available.  */
14273   for (pack = packs; pack; pack = TREE_CHAIN (pack))
14274     {
14275       tree old_pack = TREE_VALUE (pack);
14276       tree new_args = TREE_TYPE (pack);
14277       int i, len = TREE_VEC_LENGTH (new_args);
14278       int idx, level;
14279       bool nondeduced_p = false;
14280
14281       /* By default keep the original deduced argument pack.
14282          If necessary, more specific code is going to update the
14283          resulting deduced argument later down in this function.  */
14284       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14285       TMPL_ARG (targs, level, idx) = old_pack;
14286
14287       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
14288          actually deduce anything.  */
14289       for (i = 0; i < len && !nondeduced_p; ++i)
14290         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
14291           nondeduced_p = true;
14292       if (nondeduced_p)
14293         continue;
14294
14295       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
14296         {
14297           /* Prepend the explicit arguments onto NEW_ARGS.  */
14298           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14299           tree old_args = new_args;
14300           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
14301           int len = explicit_len + TREE_VEC_LENGTH (old_args);
14302
14303           /* Copy the explicit arguments.  */
14304           new_args = make_tree_vec (len);
14305           for (i = 0; i < explicit_len; i++)
14306             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
14307
14308           /* Copy the deduced arguments.  */
14309           for (; i < len; i++)
14310             TREE_VEC_ELT (new_args, i) =
14311               TREE_VEC_ELT (old_args, i - explicit_len);
14312         }
14313
14314       if (!old_pack)
14315         {
14316           tree result;
14317           /* Build the deduced *_ARGUMENT_PACK.  */
14318           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
14319             {
14320               result = make_node (NONTYPE_ARGUMENT_PACK);
14321               TREE_TYPE (result) = 
14322                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
14323               TREE_CONSTANT (result) = 1;
14324             }
14325           else
14326             result = cxx_make_type (TYPE_ARGUMENT_PACK);
14327
14328           SET_ARGUMENT_PACK_ARGS (result, new_args);
14329
14330           /* Note the deduced argument packs for this parameter
14331              pack.  */
14332           TMPL_ARG (targs, level, idx) = result;
14333         }
14334       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
14335                && (ARGUMENT_PACK_ARGS (old_pack) 
14336                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
14337         {
14338           /* We only had the explicitly-provided arguments before, but
14339              now we have a complete set of arguments.  */
14340           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14341
14342           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
14343           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
14344           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
14345         }
14346       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
14347                                     new_args))
14348         /* Inconsistent unification of this parameter pack.  */
14349         return 1;
14350     }
14351
14352   return 0;
14353 }
14354
14355 /* Deduce the value of template parameters.  TPARMS is the (innermost)
14356    set of template parameters to a template.  TARGS is the bindings
14357    for those template parameters, as determined thus far; TARGS may
14358    include template arguments for outer levels of template parameters
14359    as well.  PARM is a parameter to a template function, or a
14360    subcomponent of that parameter; ARG is the corresponding argument.
14361    This function attempts to match PARM with ARG in a manner
14362    consistent with the existing assignments in TARGS.  If more values
14363    are deduced, then TARGS is updated.
14364
14365    Returns 0 if the type deduction succeeds, 1 otherwise.  The
14366    parameter STRICT is a bitwise or of the following flags:
14367
14368      UNIFY_ALLOW_NONE:
14369        Require an exact match between PARM and ARG.
14370      UNIFY_ALLOW_MORE_CV_QUAL:
14371        Allow the deduced ARG to be more cv-qualified (by qualification
14372        conversion) than ARG.
14373      UNIFY_ALLOW_LESS_CV_QUAL:
14374        Allow the deduced ARG to be less cv-qualified than ARG.
14375      UNIFY_ALLOW_DERIVED:
14376        Allow the deduced ARG to be a template base class of ARG,
14377        or a pointer to a template base class of the type pointed to by
14378        ARG.
14379      UNIFY_ALLOW_INTEGER:
14380        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
14381        case for more information.
14382      UNIFY_ALLOW_OUTER_LEVEL:
14383        This is the outermost level of a deduction. Used to determine validity
14384        of qualification conversions. A valid qualification conversion must
14385        have const qualified pointers leading up to the inner type which
14386        requires additional CV quals, except at the outer level, where const
14387        is not required [conv.qual]. It would be normal to set this flag in
14388        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
14389      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
14390        This is the outermost level of a deduction, and PARM can be more CV
14391        qualified at this point.
14392      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
14393        This is the outermost level of a deduction, and PARM can be less CV
14394        qualified at this point.  */
14395
14396 static int
14397 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
14398 {
14399   int idx;
14400   tree targ;
14401   tree tparm;
14402   int strict_in = strict;
14403
14404   /* I don't think this will do the right thing with respect to types.
14405      But the only case I've seen it in so far has been array bounds, where
14406      signedness is the only information lost, and I think that will be
14407      okay.  */
14408   while (TREE_CODE (parm) == NOP_EXPR)
14409     parm = TREE_OPERAND (parm, 0);
14410
14411   if (arg == error_mark_node)
14412     return 1;
14413   if (arg == unknown_type_node
14414       || arg == init_list_type_node)
14415     /* We can't deduce anything from this, but we might get all the
14416        template args from other function args.  */
14417     return 0;
14418
14419   /* If PARM uses template parameters, then we can't bail out here,
14420      even if ARG == PARM, since we won't record unifications for the
14421      template parameters.  We might need them if we're trying to
14422      figure out which of two things is more specialized.  */
14423   if (arg == parm && !uses_template_parms (parm))
14424     return 0;
14425
14426   /* Handle init lists early, so the rest of the function can assume
14427      we're dealing with a type. */
14428   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
14429     {
14430       tree elt, elttype;
14431       unsigned i;
14432       tree orig_parm = parm;
14433
14434       /* Replace T with std::initializer_list<T> for deduction.  */
14435       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14436           && flag_deduce_init_list)
14437         parm = listify (parm);
14438
14439       if (!is_std_init_list (parm))
14440         /* We can only deduce from an initializer list argument if the
14441            parameter is std::initializer_list; otherwise this is a
14442            non-deduced context. */
14443         return 0;
14444
14445       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
14446
14447       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
14448         {
14449           int elt_strict = strict;
14450           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
14451             {
14452               tree type = TREE_TYPE (elt);
14453               /* It should only be possible to get here for a call.  */
14454               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
14455               elt_strict |= maybe_adjust_types_for_deduction
14456                 (DEDUCE_CALL, &elttype, &type, elt);
14457               elt = type;
14458             }
14459
14460           if (unify (tparms, targs, elttype, elt, elt_strict))
14461             return 1;
14462         }
14463
14464       /* If the std::initializer_list<T> deduction worked, replace the
14465          deduced A with std::initializer_list<A>.  */
14466       if (orig_parm != parm)
14467         {
14468           idx = TEMPLATE_TYPE_IDX (orig_parm);
14469           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14470           targ = listify (targ);
14471           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
14472         }
14473       return 0;
14474     }
14475
14476   /* Immediately reject some pairs that won't unify because of
14477      cv-qualification mismatches.  */
14478   if (TREE_CODE (arg) == TREE_CODE (parm)
14479       && TYPE_P (arg)
14480       /* It is the elements of the array which hold the cv quals of an array
14481          type, and the elements might be template type parms. We'll check
14482          when we recurse.  */
14483       && TREE_CODE (arg) != ARRAY_TYPE
14484       /* We check the cv-qualifiers when unifying with template type
14485          parameters below.  We want to allow ARG `const T' to unify with
14486          PARM `T' for example, when computing which of two templates
14487          is more specialized, for example.  */
14488       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
14489       && !check_cv_quals_for_unify (strict_in, arg, parm))
14490     return 1;
14491
14492   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
14493       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
14494     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
14495   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
14496   strict &= ~UNIFY_ALLOW_DERIVED;
14497   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14498   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
14499
14500   switch (TREE_CODE (parm))
14501     {
14502     case TYPENAME_TYPE:
14503     case SCOPE_REF:
14504     case UNBOUND_CLASS_TEMPLATE:
14505       /* In a type which contains a nested-name-specifier, template
14506          argument values cannot be deduced for template parameters used
14507          within the nested-name-specifier.  */
14508       return 0;
14509
14510     case TEMPLATE_TYPE_PARM:
14511     case TEMPLATE_TEMPLATE_PARM:
14512     case BOUND_TEMPLATE_TEMPLATE_PARM:
14513       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
14514       if (tparm == error_mark_node)
14515         return 1;
14516
14517       if (TEMPLATE_TYPE_LEVEL (parm)
14518           != template_decl_level (tparm))
14519         /* The PARM is not one we're trying to unify.  Just check
14520            to see if it matches ARG.  */
14521         return (TREE_CODE (arg) == TREE_CODE (parm)
14522                 && same_type_p (parm, arg)) ? 0 : 1;
14523       idx = TEMPLATE_TYPE_IDX (parm);
14524       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14525       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
14526
14527       /* Check for mixed types and values.  */
14528       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14529            && TREE_CODE (tparm) != TYPE_DECL)
14530           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14531               && TREE_CODE (tparm) != TEMPLATE_DECL))
14532         return 1;
14533
14534       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14535         {
14536           /* ARG must be constructed from a template class or a template
14537              template parameter.  */
14538           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
14539               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
14540             return 1;
14541
14542           {
14543             tree parmvec = TYPE_TI_ARGS (parm);
14544             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
14545             tree parm_parms 
14546               = DECL_INNERMOST_TEMPLATE_PARMS
14547                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
14548             int i, len;
14549             int parm_variadic_p = 0;
14550
14551             /* The resolution to DR150 makes clear that default
14552                arguments for an N-argument may not be used to bind T
14553                to a template template parameter with fewer than N
14554                parameters.  It is not safe to permit the binding of
14555                default arguments as an extension, as that may change
14556                the meaning of a conforming program.  Consider:
14557
14558                   struct Dense { static const unsigned int dim = 1; };
14559
14560                   template <template <typename> class View,
14561                             typename Block>
14562                   void operator+(float, View<Block> const&);
14563
14564                   template <typename Block,
14565                             unsigned int Dim = Block::dim>
14566                   struct Lvalue_proxy { operator float() const; };
14567
14568                   void
14569                   test_1d (void) {
14570                     Lvalue_proxy<Dense> p;
14571                     float b;
14572                     b + p;
14573                   }
14574
14575               Here, if Lvalue_proxy is permitted to bind to View, then
14576               the global operator+ will be used; if they are not, the
14577               Lvalue_proxy will be converted to float.  */
14578             if (coerce_template_parms (parm_parms,
14579                                        argvec,
14580                                        TYPE_TI_TEMPLATE (parm),
14581                                        tf_none,
14582                                        /*require_all_args=*/true,
14583                                        /*use_default_args=*/false)
14584                 == error_mark_node)
14585               return 1;
14586
14587             /* Deduce arguments T, i from TT<T> or TT<i>.
14588                We check each element of PARMVEC and ARGVEC individually
14589                rather than the whole TREE_VEC since they can have
14590                different number of elements.  */
14591
14592             parmvec = expand_template_argument_pack (parmvec);
14593             argvec = expand_template_argument_pack (argvec);
14594
14595             len = TREE_VEC_LENGTH (parmvec);
14596
14597             /* Check if the parameters end in a pack, making them
14598                variadic.  */
14599             if (len > 0
14600                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
14601               parm_variadic_p = 1;
14602             
14603             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
14604               return 1;
14605
14606              for (i = 0; i < len - parm_variadic_p; ++i)
14607               {
14608                 if (unify (tparms, targs,
14609                            TREE_VEC_ELT (parmvec, i),
14610                            TREE_VEC_ELT (argvec, i),
14611                            UNIFY_ALLOW_NONE))
14612                   return 1;
14613               }
14614
14615             if (parm_variadic_p
14616                 && unify_pack_expansion (tparms, targs,
14617                                          parmvec, argvec,
14618                                          UNIFY_ALLOW_NONE,
14619                                          /*call_args_p=*/false,
14620                                          /*subr=*/false))
14621               return 1;
14622           }
14623           arg = TYPE_TI_TEMPLATE (arg);
14624
14625           /* Fall through to deduce template name.  */
14626         }
14627
14628       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14629           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14630         {
14631           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
14632
14633           /* Simple cases: Value already set, does match or doesn't.  */
14634           if (targ != NULL_TREE && template_args_equal (targ, arg))
14635             return 0;
14636           else if (targ)
14637             return 1;
14638         }
14639       else
14640         {
14641           /* If PARM is `const T' and ARG is only `int', we don't have
14642              a match unless we are allowing additional qualification.
14643              If ARG is `const int' and PARM is just `T' that's OK;
14644              that binds `const int' to `T'.  */
14645           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
14646                                          arg, parm))
14647             return 1;
14648
14649           /* Consider the case where ARG is `const volatile int' and
14650              PARM is `const T'.  Then, T should be `volatile int'.  */
14651           arg = cp_build_qualified_type_real
14652             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
14653           if (arg == error_mark_node)
14654             return 1;
14655
14656           /* Simple cases: Value already set, does match or doesn't.  */
14657           if (targ != NULL_TREE && same_type_p (targ, arg))
14658             return 0;
14659           else if (targ)
14660             return 1;
14661
14662           /* Make sure that ARG is not a variable-sized array.  (Note
14663              that were talking about variable-sized arrays (like
14664              `int[n]'), rather than arrays of unknown size (like
14665              `int[]').)  We'll get very confused by such a type since
14666              the bound of the array will not be computable in an
14667              instantiation.  Besides, such types are not allowed in
14668              ISO C++, so we can do as we please here.  */
14669           if (variably_modified_type_p (arg, NULL_TREE))
14670             return 1;
14671
14672           /* Strip typedefs as in convert_template_argument.  */
14673           arg = strip_typedefs (arg);
14674         }
14675
14676       /* If ARG is a parameter pack or an expansion, we cannot unify
14677          against it unless PARM is also a parameter pack.  */
14678       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
14679           && !template_parameter_pack_p (parm))
14680         return 1;
14681
14682       /* If the argument deduction results is a METHOD_TYPE,
14683          then there is a problem.
14684          METHOD_TYPE doesn't map to any real C++ type the result of
14685          the deduction can not be of that type.  */
14686       if (TREE_CODE (arg) == METHOD_TYPE)
14687         return 1;
14688
14689       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
14690       return 0;
14691
14692     case TEMPLATE_PARM_INDEX:
14693       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
14694       if (tparm == error_mark_node)
14695         return 1;
14696
14697       if (TEMPLATE_PARM_LEVEL (parm)
14698           != template_decl_level (tparm))
14699         /* The PARM is not one we're trying to unify.  Just check
14700            to see if it matches ARG.  */
14701         return !(TREE_CODE (arg) == TREE_CODE (parm)
14702                  && cp_tree_equal (parm, arg));
14703
14704       idx = TEMPLATE_PARM_IDX (parm);
14705       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14706
14707       if (targ)
14708         return !cp_tree_equal (targ, arg);
14709
14710       /* [temp.deduct.type] If, in the declaration of a function template
14711          with a non-type template-parameter, the non-type
14712          template-parameter is used in an expression in the function
14713          parameter-list and, if the corresponding template-argument is
14714          deduced, the template-argument type shall match the type of the
14715          template-parameter exactly, except that a template-argument
14716          deduced from an array bound may be of any integral type.
14717          The non-type parameter might use already deduced type parameters.  */
14718       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
14719       if (!TREE_TYPE (arg))
14720         /* Template-parameter dependent expression.  Just accept it for now.
14721            It will later be processed in convert_template_argument.  */
14722         ;
14723       else if (same_type_p (TREE_TYPE (arg), tparm))
14724         /* OK */;
14725       else if ((strict & UNIFY_ALLOW_INTEGER)
14726                && (TREE_CODE (tparm) == INTEGER_TYPE
14727                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
14728         /* Convert the ARG to the type of PARM; the deduced non-type
14729            template argument must exactly match the types of the
14730            corresponding parameter.  */
14731         arg = fold (build_nop (tparm, arg));
14732       else if (uses_template_parms (tparm))
14733         /* We haven't deduced the type of this parameter yet.  Try again
14734            later.  */
14735         return 0;
14736       else
14737         return 1;
14738
14739       /* If ARG is a parameter pack or an expansion, we cannot unify
14740          against it unless PARM is also a parameter pack.  */
14741       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
14742           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
14743         return 1;
14744
14745       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
14746       return 0;
14747
14748     case PTRMEM_CST:
14749      {
14750         /* A pointer-to-member constant can be unified only with
14751          another constant.  */
14752       if (TREE_CODE (arg) != PTRMEM_CST)
14753         return 1;
14754
14755       /* Just unify the class member. It would be useless (and possibly
14756          wrong, depending on the strict flags) to unify also
14757          PTRMEM_CST_CLASS, because we want to be sure that both parm and
14758          arg refer to the same variable, even if through different
14759          classes. For instance:
14760
14761          struct A { int x; };
14762          struct B : A { };
14763
14764          Unification of &A::x and &B::x must succeed.  */
14765       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
14766                     PTRMEM_CST_MEMBER (arg), strict);
14767      }
14768
14769     case POINTER_TYPE:
14770       {
14771         if (TREE_CODE (arg) != POINTER_TYPE)
14772           return 1;
14773
14774         /* [temp.deduct.call]
14775
14776            A can be another pointer or pointer to member type that can
14777            be converted to the deduced A via a qualification
14778            conversion (_conv.qual_).
14779
14780            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
14781            This will allow for additional cv-qualification of the
14782            pointed-to types if appropriate.  */
14783
14784         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
14785           /* The derived-to-base conversion only persists through one
14786              level of pointers.  */
14787           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
14788
14789         return unify (tparms, targs, TREE_TYPE (parm),
14790                       TREE_TYPE (arg), strict);
14791       }
14792
14793     case REFERENCE_TYPE:
14794       if (TREE_CODE (arg) != REFERENCE_TYPE)
14795         return 1;
14796       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
14797                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
14798
14799     case ARRAY_TYPE:
14800       if (TREE_CODE (arg) != ARRAY_TYPE)
14801         return 1;
14802       if ((TYPE_DOMAIN (parm) == NULL_TREE)
14803           != (TYPE_DOMAIN (arg) == NULL_TREE))
14804         return 1;
14805       if (TYPE_DOMAIN (parm) != NULL_TREE)
14806         {
14807           tree parm_max;
14808           tree arg_max;
14809           bool parm_cst;
14810           bool arg_cst;
14811
14812           /* Our representation of array types uses "N - 1" as the
14813              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
14814              not an integer constant.  We cannot unify arbitrarily
14815              complex expressions, so we eliminate the MINUS_EXPRs
14816              here.  */
14817           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
14818           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
14819           if (!parm_cst)
14820             {
14821               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
14822               parm_max = TREE_OPERAND (parm_max, 0);
14823             }
14824           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
14825           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
14826           if (!arg_cst)
14827             {
14828               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
14829                  trying to unify the type of a variable with the type
14830                  of a template parameter.  For example:
14831
14832                    template <unsigned int N>
14833                    void f (char (&) [N]);
14834                    int g(); 
14835                    void h(int i) {
14836                      char a[g(i)];
14837                      f(a); 
14838                    }
14839
14840                 Here, the type of the ARG will be "int [g(i)]", and
14841                 may be a SAVE_EXPR, etc.  */
14842               if (TREE_CODE (arg_max) != MINUS_EXPR)
14843                 return 1;
14844               arg_max = TREE_OPERAND (arg_max, 0);
14845             }
14846
14847           /* If only one of the bounds used a MINUS_EXPR, compensate
14848              by adding one to the other bound.  */
14849           if (parm_cst && !arg_cst)
14850             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
14851                                     integer_type_node,
14852                                     parm_max,
14853                                     integer_one_node);
14854           else if (arg_cst && !parm_cst)
14855             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
14856                                    integer_type_node,
14857                                    arg_max,
14858                                    integer_one_node);
14859
14860           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
14861             return 1;
14862         }
14863       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
14864                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
14865
14866     case REAL_TYPE:
14867     case COMPLEX_TYPE:
14868     case VECTOR_TYPE:
14869     case INTEGER_TYPE:
14870     case BOOLEAN_TYPE:
14871     case ENUMERAL_TYPE:
14872     case VOID_TYPE:
14873       if (TREE_CODE (arg) != TREE_CODE (parm))
14874         return 1;
14875
14876       /* We have already checked cv-qualification at the top of the
14877          function.  */
14878       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
14879         return 1;
14880
14881       /* As far as unification is concerned, this wins.  Later checks
14882          will invalidate it if necessary.  */
14883       return 0;
14884
14885       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
14886       /* Type INTEGER_CST can come from ordinary constant template args.  */
14887     case INTEGER_CST:
14888       while (TREE_CODE (arg) == NOP_EXPR)
14889         arg = TREE_OPERAND (arg, 0);
14890
14891       if (TREE_CODE (arg) != INTEGER_CST)
14892         return 1;
14893       return !tree_int_cst_equal (parm, arg);
14894
14895     case TREE_VEC:
14896       {
14897         int i;
14898         if (TREE_CODE (arg) != TREE_VEC)
14899           return 1;
14900         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
14901           return 1;
14902         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
14903           if (unify (tparms, targs,
14904                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
14905                      UNIFY_ALLOW_NONE))
14906             return 1;
14907         return 0;
14908       }
14909
14910     case RECORD_TYPE:
14911     case UNION_TYPE:
14912       if (TREE_CODE (arg) != TREE_CODE (parm))
14913         return 1;
14914
14915       if (TYPE_PTRMEMFUNC_P (parm))
14916         {
14917           if (!TYPE_PTRMEMFUNC_P (arg))
14918             return 1;
14919
14920           return unify (tparms, targs,
14921                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
14922                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
14923                         strict);
14924         }
14925
14926       if (CLASSTYPE_TEMPLATE_INFO (parm))
14927         {
14928           tree t = NULL_TREE;
14929
14930           if (strict_in & UNIFY_ALLOW_DERIVED)
14931             {
14932               /* First, we try to unify the PARM and ARG directly.  */
14933               t = try_class_unification (tparms, targs,
14934                                          parm, arg);
14935
14936               if (!t)
14937                 {
14938                   /* Fallback to the special case allowed in
14939                      [temp.deduct.call]:
14940
14941                        If P is a class, and P has the form
14942                        template-id, then A can be a derived class of
14943                        the deduced A.  Likewise, if P is a pointer to
14944                        a class of the form template-id, A can be a
14945                        pointer to a derived class pointed to by the
14946                        deduced A.  */
14947                   t = get_template_base (tparms, targs, parm, arg);
14948
14949                   if (!t)
14950                     return 1;
14951                 }
14952             }
14953           else if (CLASSTYPE_TEMPLATE_INFO (arg)
14954                    && (CLASSTYPE_TI_TEMPLATE (parm)
14955                        == CLASSTYPE_TI_TEMPLATE (arg)))
14956             /* Perhaps PARM is something like S<U> and ARG is S<int>.
14957                Then, we should unify `int' and `U'.  */
14958             t = arg;
14959           else
14960             /* There's no chance of unification succeeding.  */
14961             return 1;
14962
14963           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
14964                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
14965         }
14966       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
14967         return 1;
14968       return 0;
14969
14970     case METHOD_TYPE:
14971     case FUNCTION_TYPE:
14972       {
14973         unsigned int nargs;
14974         tree *args;
14975         tree a;
14976         unsigned int i;
14977
14978         if (TREE_CODE (arg) != TREE_CODE (parm))
14979           return 1;
14980
14981         /* CV qualifications for methods can never be deduced, they must
14982            match exactly.  We need to check them explicitly here,
14983            because type_unification_real treats them as any other
14984            cv-qualified parameter.  */
14985         if (TREE_CODE (parm) == METHOD_TYPE
14986             && (!check_cv_quals_for_unify
14987                 (UNIFY_ALLOW_NONE,
14988                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
14989                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
14990           return 1;
14991
14992         if (unify (tparms, targs, TREE_TYPE (parm),
14993                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
14994           return 1;
14995
14996         nargs = list_length (TYPE_ARG_TYPES (arg));
14997         args = XALLOCAVEC (tree, nargs);
14998         for (a = TYPE_ARG_TYPES (arg), i = 0;
14999              a != NULL_TREE && a != void_list_node;
15000              a = TREE_CHAIN (a), ++i)
15001           args[i] = TREE_VALUE (a);
15002         nargs = i;
15003
15004         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15005                                       args, nargs, 1, DEDUCE_EXACT,
15006                                       LOOKUP_NORMAL);
15007       }
15008
15009     case OFFSET_TYPE:
15010       /* Unify a pointer to member with a pointer to member function, which
15011          deduces the type of the member as a function type. */
15012       if (TYPE_PTRMEMFUNC_P (arg))
15013         {
15014           tree method_type;
15015           tree fntype;
15016           cp_cv_quals cv_quals;
15017
15018           /* Check top-level cv qualifiers */
15019           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15020             return 1;
15021
15022           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15023                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15024             return 1;
15025
15026           /* Determine the type of the function we are unifying against. */
15027           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15028           fntype =
15029             build_function_type (TREE_TYPE (method_type),
15030                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15031
15032           /* Extract the cv-qualifiers of the member function from the
15033              implicit object parameter and place them on the function
15034              type to be restored later. */
15035           cv_quals =
15036             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
15037           fntype = build_qualified_type (fntype, cv_quals);
15038           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15039         }
15040
15041       if (TREE_CODE (arg) != OFFSET_TYPE)
15042         return 1;
15043       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15044                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15045         return 1;
15046       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15047                     strict);
15048
15049     case CONST_DECL:
15050       if (DECL_TEMPLATE_PARM_P (parm))
15051         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15052       if (arg != integral_constant_value (parm))
15053         return 1;
15054       return 0;
15055
15056     case FIELD_DECL:
15057     case TEMPLATE_DECL:
15058       /* Matched cases are handled by the ARG == PARM test above.  */
15059       return 1;
15060
15061     case VAR_DECL:
15062       /* A non-type template parameter that is a variable should be a
15063          an integral constant, in which case, it whould have been
15064          folded into its (constant) value. So we should not be getting
15065          a variable here.  */
15066       gcc_unreachable ();
15067
15068     case TYPE_ARGUMENT_PACK:
15069     case NONTYPE_ARGUMENT_PACK:
15070       {
15071         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15072         tree packed_args = ARGUMENT_PACK_ARGS (arg);
15073         int i, len = TREE_VEC_LENGTH (packed_parms);
15074         int argslen = TREE_VEC_LENGTH (packed_args);
15075         int parm_variadic_p = 0;
15076
15077         for (i = 0; i < len; ++i)
15078           {
15079             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15080               {
15081                 if (i == len - 1)
15082                   /* We can unify against something with a trailing
15083                      parameter pack.  */
15084                   parm_variadic_p = 1;
15085                 else
15086                   /* Since there is something following the pack
15087                      expansion, we cannot unify this template argument
15088                      list.  */
15089                   return 0;
15090               }
15091           }
15092           
15093
15094         /* If we don't have enough arguments to satisfy the parameters
15095            (not counting the pack expression at the end), or we have
15096            too many arguments for a parameter list that doesn't end in
15097            a pack expression, we can't unify.  */
15098         if (argslen < (len - parm_variadic_p)
15099             || (argslen > len && !parm_variadic_p))
15100           return 1;
15101
15102         /* Unify all of the parameters that precede the (optional)
15103            pack expression.  */
15104         for (i = 0; i < len - parm_variadic_p; ++i)
15105           {
15106             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15107                        TREE_VEC_ELT (packed_args, i), strict))
15108               return 1;
15109           }
15110
15111         if (parm_variadic_p)
15112           return unify_pack_expansion (tparms, targs, 
15113                                        packed_parms, packed_args,
15114                                        strict, /*call_args_p=*/false,
15115                                        /*subr=*/false);
15116         return 0;
15117       }
15118
15119       break;
15120
15121     case TYPEOF_TYPE:
15122     case DECLTYPE_TYPE:
15123       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
15124          nodes.  */
15125       return 0;
15126
15127     case ERROR_MARK:
15128       /* Unification fails if we hit an error node.  */
15129       return 1;
15130
15131     default:
15132       gcc_assert (EXPR_P (parm));
15133
15134       /* We must be looking at an expression.  This can happen with
15135          something like:
15136
15137            template <int I>
15138            void foo(S<I>, S<I + 2>);
15139
15140          This is a "nondeduced context":
15141
15142            [deduct.type]
15143
15144            The nondeduced contexts are:
15145
15146            --A type that is a template-id in which one or more of
15147              the template-arguments is an expression that references
15148              a template-parameter.
15149
15150          In these cases, we assume deduction succeeded, but don't
15151          actually infer any unifications.  */
15152
15153       if (!uses_template_parms (parm)
15154           && !template_args_equal (parm, arg))
15155         return 1;
15156       else
15157         return 0;
15158     }
15159 }
15160 \f
15161 /* Note that DECL can be defined in this translation unit, if
15162    required.  */
15163
15164 static void
15165 mark_definable (tree decl)
15166 {
15167   tree clone;
15168   DECL_NOT_REALLY_EXTERN (decl) = 1;
15169   FOR_EACH_CLONE (clone, decl)
15170     DECL_NOT_REALLY_EXTERN (clone) = 1;
15171 }
15172
15173 /* Called if RESULT is explicitly instantiated, or is a member of an
15174    explicitly instantiated class.  */
15175
15176 void
15177 mark_decl_instantiated (tree result, int extern_p)
15178 {
15179   SET_DECL_EXPLICIT_INSTANTIATION (result);
15180
15181   /* If this entity has already been written out, it's too late to
15182      make any modifications.  */
15183   if (TREE_ASM_WRITTEN (result))
15184     return;
15185
15186   if (TREE_CODE (result) != FUNCTION_DECL)
15187     /* The TREE_PUBLIC flag for function declarations will have been
15188        set correctly by tsubst.  */
15189     TREE_PUBLIC (result) = 1;
15190
15191   /* This might have been set by an earlier implicit instantiation.  */
15192   DECL_COMDAT (result) = 0;
15193
15194   if (extern_p)
15195     DECL_NOT_REALLY_EXTERN (result) = 0;
15196   else
15197     {
15198       mark_definable (result);
15199       /* Always make artificials weak.  */
15200       if (DECL_ARTIFICIAL (result) && flag_weak)
15201         comdat_linkage (result);
15202       /* For WIN32 we also want to put explicit instantiations in
15203          linkonce sections.  */
15204       else if (TREE_PUBLIC (result))
15205         maybe_make_one_only (result);
15206     }
15207
15208   /* If EXTERN_P, then this function will not be emitted -- unless
15209      followed by an explicit instantiation, at which point its linkage
15210      will be adjusted.  If !EXTERN_P, then this function will be
15211      emitted here.  In neither circumstance do we want
15212      import_export_decl to adjust the linkage.  */
15213   DECL_INTERFACE_KNOWN (result) = 1;
15214 }
15215
15216 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
15217    important template arguments.  If any are missing, we check whether
15218    they're important by using error_mark_node for substituting into any
15219    args that were used for partial ordering (the ones between ARGS and END)
15220    and seeing if it bubbles up.  */
15221
15222 static bool
15223 check_undeduced_parms (tree targs, tree args, tree end)
15224 {
15225   bool found = false;
15226   int i;
15227   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
15228     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
15229       {
15230         found = true;
15231         TREE_VEC_ELT (targs, i) = error_mark_node;
15232       }
15233   if (found)
15234     {
15235       for (; args != end; args = TREE_CHAIN (args))
15236         {
15237           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
15238           if (substed == error_mark_node)
15239             return true;
15240         }
15241     }
15242   return false;
15243 }
15244
15245 /* Given two function templates PAT1 and PAT2, return:
15246
15247    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
15248    -1 if PAT2 is more specialized than PAT1.
15249    0 if neither is more specialized.
15250
15251    LEN indicates the number of parameters we should consider
15252    (defaulted parameters should not be considered).
15253
15254    The 1998 std underspecified function template partial ordering, and
15255    DR214 addresses the issue.  We take pairs of arguments, one from
15256    each of the templates, and deduce them against each other.  One of
15257    the templates will be more specialized if all the *other*
15258    template's arguments deduce against its arguments and at least one
15259    of its arguments *does* *not* deduce against the other template's
15260    corresponding argument.  Deduction is done as for class templates.
15261    The arguments used in deduction have reference and top level cv
15262    qualifiers removed.  Iff both arguments were originally reference
15263    types *and* deduction succeeds in both directions, the template
15264    with the more cv-qualified argument wins for that pairing (if
15265    neither is more cv-qualified, they both are equal).  Unlike regular
15266    deduction, after all the arguments have been deduced in this way,
15267    we do *not* verify the deduced template argument values can be
15268    substituted into non-deduced contexts.
15269
15270    The logic can be a bit confusing here, because we look at deduce1 and
15271    targs1 to see if pat2 is at least as specialized, and vice versa; if we
15272    can find template arguments for pat1 to make arg1 look like arg2, that
15273    means that arg2 is at least as specialized as arg1.  */
15274
15275 int
15276 more_specialized_fn (tree pat1, tree pat2, int len)
15277 {
15278   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
15279   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
15280   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
15281   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
15282   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
15283   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
15284   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
15285   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
15286   tree origs1, origs2;
15287   bool lose1 = false;
15288   bool lose2 = false;
15289
15290   /* Remove the this parameter from non-static member functions.  If
15291      one is a non-static member function and the other is not a static
15292      member function, remove the first parameter from that function
15293      also.  This situation occurs for operator functions where we
15294      locate both a member function (with this pointer) and non-member
15295      operator (with explicit first operand).  */
15296   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
15297     {
15298       len--; /* LEN is the number of significant arguments for DECL1 */
15299       args1 = TREE_CHAIN (args1);
15300       if (!DECL_STATIC_FUNCTION_P (decl2))
15301         args2 = TREE_CHAIN (args2);
15302     }
15303   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
15304     {
15305       args2 = TREE_CHAIN (args2);
15306       if (!DECL_STATIC_FUNCTION_P (decl1))
15307         {
15308           len--;
15309           args1 = TREE_CHAIN (args1);
15310         }
15311     }
15312
15313   /* If only one is a conversion operator, they are unordered.  */
15314   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
15315     return 0;
15316
15317   /* Consider the return type for a conversion function */
15318   if (DECL_CONV_FN_P (decl1))
15319     {
15320       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
15321       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
15322       len++;
15323     }
15324
15325   processing_template_decl++;
15326
15327   origs1 = args1;
15328   origs2 = args2;
15329
15330   while (len--
15331          /* Stop when an ellipsis is seen.  */
15332          && args1 != NULL_TREE && args2 != NULL_TREE)
15333     {
15334       tree arg1 = TREE_VALUE (args1);
15335       tree arg2 = TREE_VALUE (args2);
15336       int deduce1, deduce2;
15337       int quals1 = -1;
15338       int quals2 = -1;
15339
15340       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15341           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15342         {
15343           /* When both arguments are pack expansions, we need only
15344              unify the patterns themselves.  */
15345           arg1 = PACK_EXPANSION_PATTERN (arg1);
15346           arg2 = PACK_EXPANSION_PATTERN (arg2);
15347
15348           /* This is the last comparison we need to do.  */
15349           len = 0;
15350         }
15351
15352       if (TREE_CODE (arg1) == REFERENCE_TYPE)
15353         {
15354           arg1 = TREE_TYPE (arg1);
15355           quals1 = cp_type_quals (arg1);
15356         }
15357
15358       if (TREE_CODE (arg2) == REFERENCE_TYPE)
15359         {
15360           arg2 = TREE_TYPE (arg2);
15361           quals2 = cp_type_quals (arg2);
15362         }
15363
15364       if ((quals1 < 0) != (quals2 < 0))
15365         {
15366           /* Only of the args is a reference, see if we should apply
15367              array/function pointer decay to it.  This is not part of
15368              DR214, but is, IMHO, consistent with the deduction rules
15369              for the function call itself, and with our earlier
15370              implementation of the underspecified partial ordering
15371              rules.  (nathan).  */
15372           if (quals1 >= 0)
15373             {
15374               switch (TREE_CODE (arg1))
15375                 {
15376                 case ARRAY_TYPE:
15377                   arg1 = TREE_TYPE (arg1);
15378                   /* FALLTHROUGH. */
15379                 case FUNCTION_TYPE:
15380                   arg1 = build_pointer_type (arg1);
15381                   break;
15382
15383                 default:
15384                   break;
15385                 }
15386             }
15387           else
15388             {
15389               switch (TREE_CODE (arg2))
15390                 {
15391                 case ARRAY_TYPE:
15392                   arg2 = TREE_TYPE (arg2);
15393                   /* FALLTHROUGH. */
15394                 case FUNCTION_TYPE:
15395                   arg2 = build_pointer_type (arg2);
15396                   break;
15397
15398                 default:
15399                   break;
15400                 }
15401             }
15402         }
15403
15404       arg1 = TYPE_MAIN_VARIANT (arg1);
15405       arg2 = TYPE_MAIN_VARIANT (arg2);
15406
15407       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
15408         {
15409           int i, len2 = list_length (args2);
15410           tree parmvec = make_tree_vec (1);
15411           tree argvec = make_tree_vec (len2);
15412           tree ta = args2;
15413
15414           /* Setup the parameter vector, which contains only ARG1.  */
15415           TREE_VEC_ELT (parmvec, 0) = arg1;
15416
15417           /* Setup the argument vector, which contains the remaining
15418              arguments.  */
15419           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
15420             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15421
15422           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
15423                                            argvec, UNIFY_ALLOW_NONE, 
15424                                            /*call_args_p=*/false, 
15425                                            /*subr=*/0);
15426
15427           /* We cannot deduce in the other direction, because ARG1 is
15428              a pack expansion but ARG2 is not.  */
15429           deduce2 = 0;
15430         }
15431       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15432         {
15433           int i, len1 = list_length (args1);
15434           tree parmvec = make_tree_vec (1);
15435           tree argvec = make_tree_vec (len1);
15436           tree ta = args1;
15437
15438           /* Setup the parameter vector, which contains only ARG1.  */
15439           TREE_VEC_ELT (parmvec, 0) = arg2;
15440
15441           /* Setup the argument vector, which contains the remaining
15442              arguments.  */
15443           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
15444             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15445
15446           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
15447                                            argvec, UNIFY_ALLOW_NONE, 
15448                                            /*call_args_p=*/false, 
15449                                            /*subr=*/0);
15450
15451           /* We cannot deduce in the other direction, because ARG2 is
15452              a pack expansion but ARG1 is not.*/
15453           deduce1 = 0;
15454         }
15455
15456       else
15457         {
15458           /* The normal case, where neither argument is a pack
15459              expansion.  */
15460           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
15461           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
15462         }
15463
15464       /* If we couldn't deduce arguments for tparms1 to make arg1 match
15465          arg2, then arg2 is not as specialized as arg1.  */
15466       if (!deduce1)
15467         lose2 = true;
15468       if (!deduce2)
15469         lose1 = true;
15470
15471       /* "If, for a given type, deduction succeeds in both directions
15472          (i.e., the types are identical after the transformations above)
15473          and if the type from the argument template is more cv-qualified
15474          than the type from the parameter template (as described above)
15475          that type is considered to be more specialized than the other. If
15476          neither type is more cv-qualified than the other then neither type
15477          is more specialized than the other."
15478
15479          We check same_type_p explicitly because deduction can also succeed
15480          in both directions when there is a nondeduced context.  */
15481       if (deduce1 && deduce2
15482           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0
15483           && same_type_p (arg1, arg2))
15484         {
15485           if ((quals1 & quals2) == quals2)
15486             lose2 = true;
15487           if ((quals1 & quals2) == quals1)
15488             lose1 = true;
15489         }
15490
15491       if (lose1 && lose2)
15492         /* We've failed to deduce something in either direction.
15493            These must be unordered.  */
15494         break;
15495
15496       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15497           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15498         /* We have already processed all of the arguments in our
15499            handing of the pack expansion type.  */
15500         len = 0;
15501
15502       args1 = TREE_CHAIN (args1);
15503       args2 = TREE_CHAIN (args2);
15504     }
15505
15506   /* "In most cases, all template parameters must have values in order for
15507      deduction to succeed, but for partial ordering purposes a template
15508      parameter may remain without a value provided it is not used in the
15509      types being used for partial ordering."
15510
15511      Thus, if we are missing any of the targs1 we need to substitute into
15512      origs1, then pat2 is not as specialized as pat1.  This can happen when
15513      there is a nondeduced context.  */
15514   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
15515     lose2 = true;
15516   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
15517     lose1 = true;
15518
15519   processing_template_decl--;
15520
15521   /* All things being equal, if the next argument is a pack expansion
15522      for one function but not for the other, prefer the
15523      non-variadic function.  FIXME this is bogus; see c++/41958.  */
15524   if (lose1 == lose2
15525       && args1 && TREE_VALUE (args1)
15526       && args2 && TREE_VALUE (args2))
15527     {
15528       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
15529       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
15530     }
15531
15532   if (lose1 == lose2)
15533     return 0;
15534   else if (!lose1)
15535     return 1;
15536   else
15537     return -1;
15538 }
15539
15540 /* Determine which of two partial specializations is more specialized.
15541
15542    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
15543    to the first partial specialization.  The TREE_VALUE is the
15544    innermost set of template parameters for the partial
15545    specialization.  PAT2 is similar, but for the second template.
15546
15547    Return 1 if the first partial specialization is more specialized;
15548    -1 if the second is more specialized; 0 if neither is more
15549    specialized.
15550
15551    See [temp.class.order] for information about determining which of
15552    two templates is more specialized.  */
15553
15554 static int
15555 more_specialized_class (tree pat1, tree pat2)
15556 {
15557   tree targs;
15558   tree tmpl1, tmpl2;
15559   int winner = 0;
15560   bool any_deductions = false;
15561
15562   tmpl1 = TREE_TYPE (pat1);
15563   tmpl2 = TREE_TYPE (pat2);
15564
15565   /* Just like what happens for functions, if we are ordering between
15566      different class template specializations, we may encounter dependent
15567      types in the arguments, and we need our dependency check functions
15568      to behave correctly.  */
15569   ++processing_template_decl;
15570   targs = get_class_bindings (TREE_VALUE (pat1),
15571                               CLASSTYPE_TI_ARGS (tmpl1),
15572                               CLASSTYPE_TI_ARGS (tmpl2));
15573   if (targs)
15574     {
15575       --winner;
15576       any_deductions = true;
15577     }
15578
15579   targs = get_class_bindings (TREE_VALUE (pat2),
15580                               CLASSTYPE_TI_ARGS (tmpl2),
15581                               CLASSTYPE_TI_ARGS (tmpl1));
15582   if (targs)
15583     {
15584       ++winner;
15585       any_deductions = true;
15586     }
15587   --processing_template_decl;
15588
15589   /* In the case of a tie where at least one of the class templates
15590      has a parameter pack at the end, the template with the most
15591      non-packed parameters wins.  */
15592   if (winner == 0
15593       && any_deductions
15594       && (template_args_variadic_p (TREE_PURPOSE (pat1))
15595           || template_args_variadic_p (TREE_PURPOSE (pat2))))
15596     {
15597       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
15598       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
15599       int len1 = TREE_VEC_LENGTH (args1);
15600       int len2 = TREE_VEC_LENGTH (args2);
15601
15602       /* We don't count the pack expansion at the end.  */
15603       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
15604         --len1;
15605       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
15606         --len2;
15607
15608       if (len1 > len2)
15609         return 1;
15610       else if (len1 < len2)
15611         return -1;
15612     }
15613
15614   return winner;
15615 }
15616
15617 /* Return the template arguments that will produce the function signature
15618    DECL from the function template FN, with the explicit template
15619    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
15620    also match.  Return NULL_TREE if no satisfactory arguments could be
15621    found.  */
15622
15623 static tree
15624 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
15625 {
15626   int ntparms = DECL_NTPARMS (fn);
15627   tree targs = make_tree_vec (ntparms);
15628   tree decl_type;
15629   tree decl_arg_types;
15630   tree *args;
15631   unsigned int nargs, ix;
15632   tree arg;
15633
15634   /* Substitute the explicit template arguments into the type of DECL.
15635      The call to fn_type_unification will handle substitution into the
15636      FN.  */
15637   decl_type = TREE_TYPE (decl);
15638   if (explicit_args && uses_template_parms (decl_type))
15639     {
15640       tree tmpl;
15641       tree converted_args;
15642
15643       if (DECL_TEMPLATE_INFO (decl))
15644         tmpl = DECL_TI_TEMPLATE (decl);
15645       else
15646         /* We can get here for some invalid specializations.  */
15647         return NULL_TREE;
15648
15649       converted_args
15650         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
15651                                  explicit_args, NULL_TREE,
15652                                  tf_none,
15653                                  /*require_all_args=*/false,
15654                                  /*use_default_args=*/false);
15655       if (converted_args == error_mark_node)
15656         return NULL_TREE;
15657
15658       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
15659       if (decl_type == error_mark_node)
15660         return NULL_TREE;
15661     }
15662
15663   /* Never do unification on the 'this' parameter.  */
15664   decl_arg_types = skip_artificial_parms_for (decl, 
15665                                               TYPE_ARG_TYPES (decl_type));
15666
15667   nargs = list_length (decl_arg_types);
15668   args = XALLOCAVEC (tree, nargs);
15669   for (arg = decl_arg_types, ix = 0;
15670        arg != NULL_TREE && arg != void_list_node;
15671        arg = TREE_CHAIN (arg), ++ix)
15672     args[ix] = TREE_VALUE (arg);
15673
15674   if (fn_type_unification (fn, explicit_args, targs,
15675                            args, ix,
15676                            (check_rettype || DECL_CONV_FN_P (fn)
15677                             ? TREE_TYPE (decl_type) : NULL_TREE),
15678                            DEDUCE_EXACT, LOOKUP_NORMAL))
15679     return NULL_TREE;
15680
15681   return targs;
15682 }
15683
15684 /* Return the innermost template arguments that, when applied to a
15685    template specialization whose innermost template parameters are
15686    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
15687    ARGS.
15688
15689    For example, suppose we have:
15690
15691      template <class T, class U> struct S {};
15692      template <class T> struct S<T*, int> {};
15693
15694    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
15695    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
15696    int}.  The resulting vector will be {double}, indicating that `T'
15697    is bound to `double'.  */
15698
15699 static tree
15700 get_class_bindings (tree tparms, tree spec_args, tree args)
15701 {
15702   int i, ntparms = TREE_VEC_LENGTH (tparms);
15703   tree deduced_args;
15704   tree innermost_deduced_args;
15705
15706   innermost_deduced_args = make_tree_vec (ntparms);
15707   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
15708     {
15709       deduced_args = copy_node (args);
15710       SET_TMPL_ARGS_LEVEL (deduced_args,
15711                            TMPL_ARGS_DEPTH (deduced_args),
15712                            innermost_deduced_args);
15713     }
15714   else
15715     deduced_args = innermost_deduced_args;
15716
15717   if (unify (tparms, deduced_args,
15718              INNERMOST_TEMPLATE_ARGS (spec_args),
15719              INNERMOST_TEMPLATE_ARGS (args),
15720              UNIFY_ALLOW_NONE))
15721     return NULL_TREE;
15722
15723   for (i =  0; i < ntparms; ++i)
15724     if (! TREE_VEC_ELT (innermost_deduced_args, i))
15725       return NULL_TREE;
15726
15727   /* Verify that nondeduced template arguments agree with the type
15728      obtained from argument deduction.
15729
15730      For example:
15731
15732        struct A { typedef int X; };
15733        template <class T, class U> struct C {};
15734        template <class T> struct C<T, typename T::X> {};
15735
15736      Then with the instantiation `C<A, int>', we can deduce that
15737      `T' is `A' but unify () does not check whether `typename T::X'
15738      is `int'.  */
15739   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
15740   if (spec_args == error_mark_node
15741       /* We only need to check the innermost arguments; the other
15742          arguments will always agree.  */
15743       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
15744                               INNERMOST_TEMPLATE_ARGS (args)))
15745     return NULL_TREE;
15746
15747   /* Now that we have bindings for all of the template arguments,
15748      ensure that the arguments deduced for the template template
15749      parameters have compatible template parameter lists.  See the use
15750      of template_template_parm_bindings_ok_p in fn_type_unification
15751      for more information.  */
15752   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
15753     return NULL_TREE;
15754
15755   return deduced_args;
15756 }
15757
15758 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
15759    Return the TREE_LIST node with the most specialized template, if
15760    any.  If there is no most specialized template, the error_mark_node
15761    is returned.
15762
15763    Note that this function does not look at, or modify, the
15764    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
15765    returned is one of the elements of INSTANTIATIONS, callers may
15766    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
15767    and retrieve it from the value returned.  */
15768
15769 tree
15770 most_specialized_instantiation (tree templates)
15771 {
15772   tree fn, champ;
15773
15774   ++processing_template_decl;
15775
15776   champ = templates;
15777   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
15778     {
15779       int fate = 0;
15780
15781       if (get_bindings (TREE_VALUE (champ),
15782                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
15783                         NULL_TREE, /*check_ret=*/false))
15784         fate--;
15785
15786       if (get_bindings (TREE_VALUE (fn),
15787                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
15788                         NULL_TREE, /*check_ret=*/false))
15789         fate++;
15790
15791       if (fate == -1)
15792         champ = fn;
15793       else if (!fate)
15794         {
15795           /* Equally specialized, move to next function.  If there
15796              is no next function, nothing's most specialized.  */
15797           fn = TREE_CHAIN (fn);
15798           champ = fn;
15799           if (!fn)
15800             break;
15801         }
15802     }
15803
15804   if (champ)
15805     /* Now verify that champ is better than everything earlier in the
15806        instantiation list.  */
15807     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
15808       if (get_bindings (TREE_VALUE (champ),
15809                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
15810                         NULL_TREE, /*check_ret=*/false)
15811           || !get_bindings (TREE_VALUE (fn),
15812                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
15813                             NULL_TREE, /*check_ret=*/false))
15814         {
15815           champ = NULL_TREE;
15816           break;
15817         }
15818
15819   processing_template_decl--;
15820
15821   if (!champ)
15822     return error_mark_node;
15823
15824   return champ;
15825 }
15826
15827 /* If DECL is a specialization of some template, return the most
15828    general such template.  Otherwise, returns NULL_TREE.
15829
15830    For example, given:
15831
15832      template <class T> struct S { template <class U> void f(U); };
15833
15834    if TMPL is `template <class U> void S<int>::f(U)' this will return
15835    the full template.  This function will not trace past partial
15836    specializations, however.  For example, given in addition:
15837
15838      template <class T> struct S<T*> { template <class U> void f(U); };
15839
15840    if TMPL is `template <class U> void S<int*>::f(U)' this will return
15841    `template <class T> template <class U> S<T*>::f(U)'.  */
15842
15843 tree
15844 most_general_template (tree decl)
15845 {
15846   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
15847      an immediate specialization.  */
15848   if (TREE_CODE (decl) == FUNCTION_DECL)
15849     {
15850       if (DECL_TEMPLATE_INFO (decl)) {
15851         decl = DECL_TI_TEMPLATE (decl);
15852
15853         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
15854            template friend.  */
15855         if (TREE_CODE (decl) != TEMPLATE_DECL)
15856           return NULL_TREE;
15857       } else
15858         return NULL_TREE;
15859     }
15860
15861   /* Look for more and more general templates.  */
15862   while (DECL_TEMPLATE_INFO (decl))
15863     {
15864       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
15865          (See cp-tree.h for details.)  */
15866       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
15867         break;
15868
15869       if (CLASS_TYPE_P (TREE_TYPE (decl))
15870           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
15871         break;
15872
15873       /* Stop if we run into an explicitly specialized class template.  */
15874       if (!DECL_NAMESPACE_SCOPE_P (decl)
15875           && DECL_CONTEXT (decl)
15876           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
15877         break;
15878
15879       decl = DECL_TI_TEMPLATE (decl);
15880     }
15881
15882   return decl;
15883 }
15884
15885 /* Return the most specialized of the class template partial
15886    specializations of TMPL which can produce TYPE, a specialization of
15887    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
15888    a _TYPE node corresponding to the partial specialization, while the
15889    TREE_PURPOSE is the set of template arguments that must be
15890    substituted into the TREE_TYPE in order to generate TYPE.
15891
15892    If the choice of partial specialization is ambiguous, a diagnostic
15893    is issued, and the error_mark_node is returned.  If there are no
15894    partial specializations of TMPL matching TYPE, then NULL_TREE is
15895    returned.  */
15896
15897 static tree
15898 most_specialized_class (tree type, tree tmpl)
15899 {
15900   tree list = NULL_TREE;
15901   tree t;
15902   tree champ;
15903   int fate;
15904   bool ambiguous_p;
15905   tree args;
15906   tree outer_args = NULL_TREE;
15907
15908   tmpl = most_general_template (tmpl);
15909   args = CLASSTYPE_TI_ARGS (type);
15910
15911   /* For determining which partial specialization to use, only the
15912      innermost args are interesting.  */
15913   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
15914     {
15915       outer_args = strip_innermost_template_args (args, 1);
15916       args = INNERMOST_TEMPLATE_ARGS (args);
15917     }
15918
15919   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
15920     {
15921       tree partial_spec_args;
15922       tree spec_args;
15923       tree parms = TREE_VALUE (t);
15924
15925       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
15926       if (outer_args)
15927         {
15928           int i;
15929
15930           ++processing_template_decl;
15931
15932           /* Discard the outer levels of args, and then substitute in the
15933              template args from the enclosing class.  */
15934           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
15935           partial_spec_args = tsubst_template_args
15936             (partial_spec_args, outer_args, tf_none, NULL_TREE);
15937
15938           /* PARMS already refers to just the innermost parms, but the
15939              template parms in partial_spec_args had their levels lowered
15940              by tsubst, so we need to do the same for the parm list.  We
15941              can't just tsubst the TREE_VEC itself, as tsubst wants to
15942              treat a TREE_VEC as an argument vector.  */
15943           parms = copy_node (parms);
15944           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
15945             TREE_VEC_ELT (parms, i) =
15946               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
15947
15948           --processing_template_decl;
15949         }
15950
15951       partial_spec_args =
15952           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
15953                                  add_to_template_args (outer_args,
15954                                                        partial_spec_args),
15955                                  tmpl, tf_none,
15956                                  /*require_all_args=*/true,
15957                                  /*use_default_args=*/true);
15958
15959       if (partial_spec_args == error_mark_node)
15960         return error_mark_node;
15961
15962       spec_args = get_class_bindings (parms,
15963                                       partial_spec_args,
15964                                       args);
15965       if (spec_args)
15966         {
15967           if (outer_args)
15968             spec_args = add_to_template_args (outer_args, spec_args);
15969           list = tree_cons (spec_args, TREE_VALUE (t), list);
15970           TREE_TYPE (list) = TREE_TYPE (t);
15971         }
15972     }
15973
15974   if (! list)
15975     return NULL_TREE;
15976
15977   ambiguous_p = false;
15978   t = list;
15979   champ = t;
15980   t = TREE_CHAIN (t);
15981   for (; t; t = TREE_CHAIN (t))
15982     {
15983       fate = more_specialized_class (champ, t);
15984       if (fate == 1)
15985         ;
15986       else
15987         {
15988           if (fate == 0)
15989             {
15990               t = TREE_CHAIN (t);
15991               if (! t)
15992                 {
15993                   ambiguous_p = true;
15994                   break;
15995                 }
15996             }
15997           champ = t;
15998         }
15999     }
16000
16001   if (!ambiguous_p)
16002     for (t = list; t && t != champ; t = TREE_CHAIN (t))
16003       {
16004         fate = more_specialized_class (champ, t);
16005         if (fate != 1)
16006           {
16007             ambiguous_p = true;
16008             break;
16009           }
16010       }
16011
16012   if (ambiguous_p)
16013     {
16014       const char *str;
16015       char *spaces = NULL;
16016       error ("ambiguous class template instantiation for %q#T", type);
16017       str = TREE_CHAIN (list) ? _("candidates are:") : _("candidate is:");
16018       for (t = list; t; t = TREE_CHAIN (t))
16019         {
16020           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16021           spaces = spaces ? spaces : get_spaces (str);
16022         }
16023       free (spaces);
16024       return error_mark_node;
16025     }
16026
16027   return champ;
16028 }
16029
16030 /* Explicitly instantiate DECL.  */
16031
16032 void
16033 do_decl_instantiation (tree decl, tree storage)
16034 {
16035   tree result = NULL_TREE;
16036   int extern_p = 0;
16037
16038   if (!decl || decl == error_mark_node)
16039     /* An error occurred, for which grokdeclarator has already issued
16040        an appropriate message.  */
16041     return;
16042   else if (! DECL_LANG_SPECIFIC (decl))
16043     {
16044       error ("explicit instantiation of non-template %q#D", decl);
16045       return;
16046     }
16047   else if (TREE_CODE (decl) == VAR_DECL)
16048     {
16049       /* There is an asymmetry here in the way VAR_DECLs and
16050          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
16051          the latter, the DECL we get back will be marked as a
16052          template instantiation, and the appropriate
16053          DECL_TEMPLATE_INFO will be set up.  This does not happen for
16054          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
16055          should handle VAR_DECLs as it currently handles
16056          FUNCTION_DECLs.  */
16057       if (!DECL_CLASS_SCOPE_P (decl))
16058         {
16059           error ("%qD is not a static data member of a class template", decl);
16060           return;
16061         }
16062       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16063       if (!result || TREE_CODE (result) != VAR_DECL)
16064         {
16065           error ("no matching template for %qD found", decl);
16066           return;
16067         }
16068       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16069         {
16070           error ("type %qT for explicit instantiation %qD does not match "
16071                  "declared type %qT", TREE_TYPE (result), decl,
16072                  TREE_TYPE (decl));
16073           return;
16074         }
16075     }
16076   else if (TREE_CODE (decl) != FUNCTION_DECL)
16077     {
16078       error ("explicit instantiation of %q#D", decl);
16079       return;
16080     }
16081   else
16082     result = decl;
16083
16084   /* Check for various error cases.  Note that if the explicit
16085      instantiation is valid the RESULT will currently be marked as an
16086      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16087      until we get here.  */
16088
16089   if (DECL_TEMPLATE_SPECIALIZATION (result))
16090     {
16091       /* DR 259 [temp.spec].
16092
16093          Both an explicit instantiation and a declaration of an explicit
16094          specialization shall not appear in a program unless the explicit
16095          instantiation follows a declaration of the explicit specialization.
16096
16097          For a given set of template parameters, if an explicit
16098          instantiation of a template appears after a declaration of an
16099          explicit specialization for that template, the explicit
16100          instantiation has no effect.  */
16101       return;
16102     }
16103   else if (DECL_EXPLICIT_INSTANTIATION (result))
16104     {
16105       /* [temp.spec]
16106
16107          No program shall explicitly instantiate any template more
16108          than once.
16109
16110          We check DECL_NOT_REALLY_EXTERN so as not to complain when
16111          the first instantiation was `extern' and the second is not,
16112          and EXTERN_P for the opposite case.  */
16113       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16114         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16115       /* If an "extern" explicit instantiation follows an ordinary
16116          explicit instantiation, the template is instantiated.  */
16117       if (extern_p)
16118         return;
16119     }
16120   else if (!DECL_IMPLICIT_INSTANTIATION (result))
16121     {
16122       error ("no matching template for %qD found", result);
16123       return;
16124     }
16125   else if (!DECL_TEMPLATE_INFO (result))
16126     {
16127       permerror (input_location, "explicit instantiation of non-template %q#D", result);
16128       return;
16129     }
16130
16131   if (storage == NULL_TREE)
16132     ;
16133   else if (storage == ridpointers[(int) RID_EXTERN])
16134     {
16135       if (!in_system_header && (cxx_dialect == cxx98))
16136         pedwarn (input_location, OPT_pedantic, 
16137                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
16138                  "instantiations");
16139       extern_p = 1;
16140     }
16141   else
16142     error ("storage class %qD applied to template instantiation", storage);
16143
16144   check_explicit_instantiation_namespace (result);
16145   mark_decl_instantiated (result, extern_p);
16146   if (! extern_p)
16147     instantiate_decl (result, /*defer_ok=*/1,
16148                       /*expl_inst_class_mem_p=*/false);
16149 }
16150
16151 static void
16152 mark_class_instantiated (tree t, int extern_p)
16153 {
16154   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
16155   SET_CLASSTYPE_INTERFACE_KNOWN (t);
16156   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
16157   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
16158   if (! extern_p)
16159     {
16160       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
16161       rest_of_type_compilation (t, 1);
16162     }
16163 }
16164
16165 /* Called from do_type_instantiation through binding_table_foreach to
16166    do recursive instantiation for the type bound in ENTRY.  */
16167 static void
16168 bt_instantiate_type_proc (binding_entry entry, void *data)
16169 {
16170   tree storage = *(tree *) data;
16171
16172   if (MAYBE_CLASS_TYPE_P (entry->type)
16173       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
16174     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
16175 }
16176
16177 /* Called from do_type_instantiation to instantiate a member
16178    (a member function or a static member variable) of an
16179    explicitly instantiated class template.  */
16180 static void
16181 instantiate_class_member (tree decl, int extern_p)
16182 {
16183   mark_decl_instantiated (decl, extern_p);
16184   if (! extern_p)
16185     instantiate_decl (decl, /*defer_ok=*/1,
16186                       /*expl_inst_class_mem_p=*/true);
16187 }
16188
16189 /* Perform an explicit instantiation of template class T.  STORAGE, if
16190    non-null, is the RID for extern, inline or static.  COMPLAIN is
16191    nonzero if this is called from the parser, zero if called recursively,
16192    since the standard is unclear (as detailed below).  */
16193
16194 void
16195 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
16196 {
16197   int extern_p = 0;
16198   int nomem_p = 0;
16199   int static_p = 0;
16200   int previous_instantiation_extern_p = 0;
16201
16202   if (TREE_CODE (t) == TYPE_DECL)
16203     t = TREE_TYPE (t);
16204
16205   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
16206     {
16207       error ("explicit instantiation of non-template type %qT", t);
16208       return;
16209     }
16210
16211   complete_type (t);
16212
16213   if (!COMPLETE_TYPE_P (t))
16214     {
16215       if (complain & tf_error)
16216         error ("explicit instantiation of %q#T before definition of template",
16217                t);
16218       return;
16219     }
16220
16221   if (storage != NULL_TREE)
16222     {
16223       if (!in_system_header)
16224         {
16225           if (storage == ridpointers[(int) RID_EXTERN])
16226             {
16227               if (cxx_dialect == cxx98)
16228                 pedwarn (input_location, OPT_pedantic, 
16229                          "ISO C++ 1998 forbids the use of %<extern%> on "
16230                          "explicit instantiations");
16231             }
16232           else
16233             pedwarn (input_location, OPT_pedantic, 
16234                      "ISO C++ forbids the use of %qE"
16235                      " on explicit instantiations", storage);
16236         }
16237
16238       if (storage == ridpointers[(int) RID_INLINE])
16239         nomem_p = 1;
16240       else if (storage == ridpointers[(int) RID_EXTERN])
16241         extern_p = 1;
16242       else if (storage == ridpointers[(int) RID_STATIC])
16243         static_p = 1;
16244       else
16245         {
16246           error ("storage class %qD applied to template instantiation",
16247                  storage);
16248           extern_p = 0;
16249         }
16250     }
16251
16252   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
16253     {
16254       /* DR 259 [temp.spec].
16255
16256          Both an explicit instantiation and a declaration of an explicit
16257          specialization shall not appear in a program unless the explicit
16258          instantiation follows a declaration of the explicit specialization.
16259
16260          For a given set of template parameters, if an explicit
16261          instantiation of a template appears after a declaration of an
16262          explicit specialization for that template, the explicit
16263          instantiation has no effect.  */
16264       return;
16265     }
16266   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
16267     {
16268       /* [temp.spec]
16269
16270          No program shall explicitly instantiate any template more
16271          than once.
16272
16273          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
16274          instantiation was `extern'.  If EXTERN_P then the second is.
16275          These cases are OK.  */
16276       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
16277
16278       if (!previous_instantiation_extern_p && !extern_p
16279           && (complain & tf_error))
16280         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
16281
16282       /* If we've already instantiated the template, just return now.  */
16283       if (!CLASSTYPE_INTERFACE_ONLY (t))
16284         return;
16285     }
16286
16287   check_explicit_instantiation_namespace (TYPE_NAME (t));
16288   mark_class_instantiated (t, extern_p);
16289
16290   if (nomem_p)
16291     return;
16292
16293   {
16294     tree tmp;
16295
16296     /* In contrast to implicit instantiation, where only the
16297        declarations, and not the definitions, of members are
16298        instantiated, we have here:
16299
16300          [temp.explicit]
16301
16302          The explicit instantiation of a class template specialization
16303          implies the instantiation of all of its members not
16304          previously explicitly specialized in the translation unit
16305          containing the explicit instantiation.
16306
16307        Of course, we can't instantiate member template classes, since
16308        we don't have any arguments for them.  Note that the standard
16309        is unclear on whether the instantiation of the members are
16310        *explicit* instantiations or not.  However, the most natural
16311        interpretation is that it should be an explicit instantiation.  */
16312
16313     if (! static_p)
16314       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
16315         if (TREE_CODE (tmp) == FUNCTION_DECL
16316             && DECL_TEMPLATE_INSTANTIATION (tmp))
16317           instantiate_class_member (tmp, extern_p);
16318
16319     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
16320       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
16321         instantiate_class_member (tmp, extern_p);
16322
16323     if (CLASSTYPE_NESTED_UTDS (t))
16324       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
16325                              bt_instantiate_type_proc, &storage);
16326   }
16327 }
16328
16329 /* Given a function DECL, which is a specialization of TMPL, modify
16330    DECL to be a re-instantiation of TMPL with the same template
16331    arguments.  TMPL should be the template into which tsubst'ing
16332    should occur for DECL, not the most general template.
16333
16334    One reason for doing this is a scenario like this:
16335
16336      template <class T>
16337      void f(const T&, int i);
16338
16339      void g() { f(3, 7); }
16340
16341      template <class T>
16342      void f(const T& t, const int i) { }
16343
16344    Note that when the template is first instantiated, with
16345    instantiate_template, the resulting DECL will have no name for the
16346    first parameter, and the wrong type for the second.  So, when we go
16347    to instantiate the DECL, we regenerate it.  */
16348
16349 static void
16350 regenerate_decl_from_template (tree decl, tree tmpl)
16351 {
16352   /* The arguments used to instantiate DECL, from the most general
16353      template.  */
16354   tree args;
16355   tree code_pattern;
16356
16357   args = DECL_TI_ARGS (decl);
16358   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
16359
16360   /* Make sure that we can see identifiers, and compute access
16361      correctly.  */
16362   push_access_scope (decl);
16363
16364   if (TREE_CODE (decl) == FUNCTION_DECL)
16365     {
16366       tree decl_parm;
16367       tree pattern_parm;
16368       tree specs;
16369       int args_depth;
16370       int parms_depth;
16371
16372       args_depth = TMPL_ARGS_DEPTH (args);
16373       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
16374       if (args_depth > parms_depth)
16375         args = get_innermost_template_args (args, parms_depth);
16376
16377       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
16378                                               args, tf_error, NULL_TREE);
16379       if (specs)
16380         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
16381                                                     specs);
16382
16383       /* Merge parameter declarations.  */
16384       decl_parm = skip_artificial_parms_for (decl,
16385                                              DECL_ARGUMENTS (decl));
16386       pattern_parm
16387         = skip_artificial_parms_for (code_pattern,
16388                                      DECL_ARGUMENTS (code_pattern));
16389       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
16390         {
16391           tree parm_type;
16392           tree attributes;
16393           
16394           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16395             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
16396           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
16397                               NULL_TREE);
16398           parm_type = type_decays_to (parm_type);
16399           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16400             TREE_TYPE (decl_parm) = parm_type;
16401           attributes = DECL_ATTRIBUTES (pattern_parm);
16402           if (DECL_ATTRIBUTES (decl_parm) != attributes)
16403             {
16404               DECL_ATTRIBUTES (decl_parm) = attributes;
16405               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16406             }
16407           decl_parm = TREE_CHAIN (decl_parm);
16408           pattern_parm = TREE_CHAIN (pattern_parm);
16409         }
16410       /* Merge any parameters that match with the function parameter
16411          pack.  */
16412       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
16413         {
16414           int i, len;
16415           tree expanded_types;
16416           /* Expand the TYPE_PACK_EXPANSION that provides the types for
16417              the parameters in this function parameter pack.  */
16418           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
16419                                                  args, tf_error, NULL_TREE);
16420           len = TREE_VEC_LENGTH (expanded_types);
16421           for (i = 0; i < len; i++)
16422             {
16423               tree parm_type;
16424               tree attributes;
16425           
16426               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16427                 /* Rename the parameter to include the index.  */
16428                 DECL_NAME (decl_parm) = 
16429                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
16430               parm_type = TREE_VEC_ELT (expanded_types, i);
16431               parm_type = type_decays_to (parm_type);
16432               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16433                 TREE_TYPE (decl_parm) = parm_type;
16434               attributes = DECL_ATTRIBUTES (pattern_parm);
16435               if (DECL_ATTRIBUTES (decl_parm) != attributes)
16436                 {
16437                   DECL_ATTRIBUTES (decl_parm) = attributes;
16438                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16439                 }
16440               decl_parm = TREE_CHAIN (decl_parm);
16441             }
16442         }
16443       /* Merge additional specifiers from the CODE_PATTERN.  */
16444       if (DECL_DECLARED_INLINE_P (code_pattern)
16445           && !DECL_DECLARED_INLINE_P (decl))
16446         DECL_DECLARED_INLINE_P (decl) = 1;
16447     }
16448   else if (TREE_CODE (decl) == VAR_DECL)
16449     DECL_INITIAL (decl) =
16450       tsubst_expr (DECL_INITIAL (code_pattern), args,
16451                    tf_error, DECL_TI_TEMPLATE (decl),
16452                    /*integral_constant_expression_p=*/false);
16453   else
16454     gcc_unreachable ();
16455
16456   pop_access_scope (decl);
16457 }
16458
16459 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
16460    substituted to get DECL.  */
16461
16462 tree
16463 template_for_substitution (tree decl)
16464 {
16465   tree tmpl = DECL_TI_TEMPLATE (decl);
16466
16467   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
16468      for the instantiation.  This is not always the most general
16469      template.  Consider, for example:
16470
16471         template <class T>
16472         struct S { template <class U> void f();
16473                    template <> void f<int>(); };
16474
16475      and an instantiation of S<double>::f<int>.  We want TD to be the
16476      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
16477   while (/* An instantiation cannot have a definition, so we need a
16478             more general template.  */
16479          DECL_TEMPLATE_INSTANTIATION (tmpl)
16480            /* We must also deal with friend templates.  Given:
16481
16482                 template <class T> struct S {
16483                   template <class U> friend void f() {};
16484                 };
16485
16486               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
16487               so far as the language is concerned, but that's still
16488               where we get the pattern for the instantiation from.  On
16489               other hand, if the definition comes outside the class, say:
16490
16491                 template <class T> struct S {
16492                   template <class U> friend void f();
16493                 };
16494                 template <class U> friend void f() {}
16495
16496               we don't need to look any further.  That's what the check for
16497               DECL_INITIAL is for.  */
16498           || (TREE_CODE (decl) == FUNCTION_DECL
16499               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
16500               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
16501     {
16502       /* The present template, TD, should not be a definition.  If it
16503          were a definition, we should be using it!  Note that we
16504          cannot restructure the loop to just keep going until we find
16505          a template with a definition, since that might go too far if
16506          a specialization was declared, but not defined.  */
16507       gcc_assert (TREE_CODE (decl) != VAR_DECL
16508                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
16509
16510       /* Fetch the more general template.  */
16511       tmpl = DECL_TI_TEMPLATE (tmpl);
16512     }
16513
16514   return tmpl;
16515 }
16516
16517 /* Returns true if we need to instantiate this template instance even if we
16518    know we aren't going to emit it..  */
16519
16520 bool
16521 always_instantiate_p (tree decl)
16522 {
16523   /* We always instantiate inline functions so that we can inline them.  An
16524      explicit instantiation declaration prohibits implicit instantiation of
16525      non-inline functions.  With high levels of optimization, we would
16526      normally inline non-inline functions -- but we're not allowed to do
16527      that for "extern template" functions.  Therefore, we check
16528      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
16529   return ((TREE_CODE (decl) == FUNCTION_DECL
16530            && DECL_DECLARED_INLINE_P (decl))
16531           /* And we need to instantiate static data members so that
16532              their initializers are available in integral constant
16533              expressions.  */
16534           || (TREE_CODE (decl) == VAR_DECL
16535               && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)));
16536 }
16537
16538 /* Produce the definition of D, a _DECL generated from a template.  If
16539    DEFER_OK is nonzero, then we don't have to actually do the
16540    instantiation now; we just have to do it sometime.  Normally it is
16541    an error if this is an explicit instantiation but D is undefined.
16542    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
16543    explicitly instantiated class template.  */
16544
16545 tree
16546 instantiate_decl (tree d, int defer_ok,
16547                   bool expl_inst_class_mem_p)
16548 {
16549   tree tmpl = DECL_TI_TEMPLATE (d);
16550   tree gen_args;
16551   tree args;
16552   tree td;
16553   tree code_pattern;
16554   tree spec;
16555   tree gen_tmpl;
16556   bool pattern_defined;
16557   int need_push;
16558   location_t saved_loc = input_location;
16559   bool external_p;
16560
16561   /* This function should only be used to instantiate templates for
16562      functions and static member variables.  */
16563   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
16564               || TREE_CODE (d) == VAR_DECL);
16565
16566   /* Variables are never deferred; if instantiation is required, they
16567      are instantiated right away.  That allows for better code in the
16568      case that an expression refers to the value of the variable --
16569      if the variable has a constant value the referring expression can
16570      take advantage of that fact.  */
16571   if (TREE_CODE (d) == VAR_DECL)
16572     defer_ok = 0;
16573
16574   /* Don't instantiate cloned functions.  Instead, instantiate the
16575      functions they cloned.  */
16576   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
16577     d = DECL_CLONED_FUNCTION (d);
16578
16579   if (DECL_TEMPLATE_INSTANTIATED (d)
16580       || DECL_TEMPLATE_SPECIALIZATION (d))
16581     /* D has already been instantiated or explicitly specialized, so
16582        there's nothing for us to do here.
16583
16584        It might seem reasonable to check whether or not D is an explicit
16585        instantiation, and, if so, stop here.  But when an explicit
16586        instantiation is deferred until the end of the compilation,
16587        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
16588        the instantiation.  */
16589     return d;
16590
16591   /* Check to see whether we know that this template will be
16592      instantiated in some other file, as with "extern template"
16593      extension.  */
16594   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
16595
16596   /* In general, we do not instantiate such templates.  */
16597   if (external_p && !always_instantiate_p (d))
16598     return d;
16599
16600   gen_tmpl = most_general_template (tmpl);
16601   gen_args = DECL_TI_ARGS (d);
16602
16603   if (tmpl != gen_tmpl)
16604     /* We should already have the extra args.  */
16605     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
16606                 == TMPL_ARGS_DEPTH (gen_args));
16607   /* And what's in the hash table should match D.  */
16608   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
16609               || spec == NULL_TREE);
16610
16611   /* This needs to happen before any tsubsting.  */
16612   if (! push_tinst_level (d))
16613     return d;
16614
16615   timevar_push (TV_PARSE);
16616
16617   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
16618      for the instantiation.  */
16619   td = template_for_substitution (d);
16620   code_pattern = DECL_TEMPLATE_RESULT (td);
16621
16622   /* We should never be trying to instantiate a member of a class
16623      template or partial specialization.  */
16624   gcc_assert (d != code_pattern);
16625
16626   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
16627       || DECL_TEMPLATE_SPECIALIZATION (td))
16628     /* In the case of a friend template whose definition is provided
16629        outside the class, we may have too many arguments.  Drop the
16630        ones we don't need.  The same is true for specializations.  */
16631     args = get_innermost_template_args
16632       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
16633   else
16634     args = gen_args;
16635
16636   if (TREE_CODE (d) == FUNCTION_DECL)
16637     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
16638   else
16639     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
16640
16641   /* We may be in the middle of deferred access check.  Disable it now.  */
16642   push_deferring_access_checks (dk_no_deferred);
16643
16644   /* Unless an explicit instantiation directive has already determined
16645      the linkage of D, remember that a definition is available for
16646      this entity.  */
16647   if (pattern_defined
16648       && !DECL_INTERFACE_KNOWN (d)
16649       && !DECL_NOT_REALLY_EXTERN (d))
16650     mark_definable (d);
16651
16652   input_location = DECL_SOURCE_LOCATION (d);
16653
16654   /* If D is a member of an explicitly instantiated class template,
16655      and no definition is available, treat it like an implicit
16656      instantiation.  */
16657   if (!pattern_defined && expl_inst_class_mem_p
16658       && DECL_EXPLICIT_INSTANTIATION (d))
16659     {
16660       DECL_NOT_REALLY_EXTERN (d) = 0;
16661       DECL_INTERFACE_KNOWN (d) = 0;
16662       SET_DECL_IMPLICIT_INSTANTIATION (d);
16663     }
16664
16665   /* Recheck the substitutions to obtain any warning messages
16666      about ignoring cv qualifiers.  Don't do this for artificial decls,
16667      as it breaks the context-sensitive substitution for lambda op(). */
16668   if (!defer_ok && !DECL_ARTIFICIAL (d))
16669     {
16670       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
16671       tree type = TREE_TYPE (gen);
16672
16673       /* Make sure that we can see identifiers, and compute access
16674          correctly.  D is already the target FUNCTION_DECL with the
16675          right context.  */
16676       push_access_scope (d);
16677
16678       if (TREE_CODE (gen) == FUNCTION_DECL)
16679         {
16680           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
16681           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
16682                                           d);
16683           /* Don't simply tsubst the function type, as that will give
16684              duplicate warnings about poor parameter qualifications.
16685              The function arguments are the same as the decl_arguments
16686              without the top level cv qualifiers.  */
16687           type = TREE_TYPE (type);
16688         }
16689       tsubst (type, gen_args, tf_warning_or_error, d);
16690
16691       pop_access_scope (d);
16692     }
16693
16694   /* Defer all other templates, unless we have been explicitly
16695      forbidden from doing so.  */
16696   if (/* If there is no definition, we cannot instantiate the
16697          template.  */
16698       ! pattern_defined
16699       /* If it's OK to postpone instantiation, do so.  */
16700       || defer_ok
16701       /* If this is a static data member that will be defined
16702          elsewhere, we don't want to instantiate the entire data
16703          member, but we do want to instantiate the initializer so that
16704          we can substitute that elsewhere.  */
16705       || (external_p && TREE_CODE (d) == VAR_DECL))
16706     {
16707       /* The definition of the static data member is now required so
16708          we must substitute the initializer.  */
16709       if (TREE_CODE (d) == VAR_DECL
16710           && !DECL_INITIAL (d)
16711           && DECL_INITIAL (code_pattern))
16712         {
16713           tree ns;
16714           tree init;
16715
16716           ns = decl_namespace_context (d);
16717           push_nested_namespace (ns);
16718           push_nested_class (DECL_CONTEXT (d));
16719           init = tsubst_expr (DECL_INITIAL (code_pattern),
16720                               args,
16721                               tf_warning_or_error, NULL_TREE,
16722                               /*integral_constant_expression_p=*/false);
16723           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
16724                           /*asmspec_tree=*/NULL_TREE,
16725                           LOOKUP_ONLYCONVERTING);
16726           pop_nested_class ();
16727           pop_nested_namespace (ns);
16728         }
16729
16730       /* We restore the source position here because it's used by
16731          add_pending_template.  */
16732       input_location = saved_loc;
16733
16734       if (at_eof && !pattern_defined
16735           && DECL_EXPLICIT_INSTANTIATION (d)
16736           && DECL_NOT_REALLY_EXTERN (d))
16737         /* [temp.explicit]
16738
16739            The definition of a non-exported function template, a
16740            non-exported member function template, or a non-exported
16741            member function or static data member of a class template
16742            shall be present in every translation unit in which it is
16743            explicitly instantiated.  */
16744         permerror (input_location,  "explicit instantiation of %qD "
16745                    "but no definition available", d);
16746
16747       /* ??? Historically, we have instantiated inline functions, even
16748          when marked as "extern template".  */
16749       if (!(external_p && TREE_CODE (d) == VAR_DECL))
16750         add_pending_template (d);
16751       goto out;
16752     }
16753   /* Tell the repository that D is available in this translation unit
16754      -- and see if it is supposed to be instantiated here.  */
16755   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
16756     {
16757       /* In a PCH file, despite the fact that the repository hasn't
16758          requested instantiation in the PCH it is still possible that
16759          an instantiation will be required in a file that includes the
16760          PCH.  */
16761       if (pch_file)
16762         add_pending_template (d);
16763       /* Instantiate inline functions so that the inliner can do its
16764          job, even though we'll not be emitting a copy of this
16765          function.  */
16766       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
16767         goto out;
16768     }
16769
16770   need_push = !cfun || !global_bindings_p ();
16771   if (need_push)
16772     push_to_top_level ();
16773
16774   /* Mark D as instantiated so that recursive calls to
16775      instantiate_decl do not try to instantiate it again.  */
16776   DECL_TEMPLATE_INSTANTIATED (d) = 1;
16777
16778   /* Regenerate the declaration in case the template has been modified
16779      by a subsequent redeclaration.  */
16780   regenerate_decl_from_template (d, td);
16781
16782   /* We already set the file and line above.  Reset them now in case
16783      they changed as a result of calling regenerate_decl_from_template.  */
16784   input_location = DECL_SOURCE_LOCATION (d);
16785
16786   if (TREE_CODE (d) == VAR_DECL)
16787     {
16788       tree init;
16789
16790       /* Clear out DECL_RTL; whatever was there before may not be right
16791          since we've reset the type of the declaration.  */
16792       SET_DECL_RTL (d, NULL_RTX);
16793       DECL_IN_AGGR_P (d) = 0;
16794
16795       /* The initializer is placed in DECL_INITIAL by
16796          regenerate_decl_from_template.  Pull it out so that
16797          cp_finish_decl can process it.  */
16798       init = DECL_INITIAL (d);
16799       DECL_INITIAL (d) = NULL_TREE;
16800       DECL_INITIALIZED_P (d) = 0;
16801
16802       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
16803          initializer.  That function will defer actual emission until
16804          we have a chance to determine linkage.  */
16805       DECL_EXTERNAL (d) = 0;
16806
16807       /* Enter the scope of D so that access-checking works correctly.  */
16808       push_nested_class (DECL_CONTEXT (d));
16809       cp_finish_decl (d, init, false, NULL_TREE, 0);
16810       pop_nested_class ();
16811     }
16812   else if (TREE_CODE (d) == FUNCTION_DECL)
16813     {
16814       htab_t saved_local_specializations;
16815       tree subst_decl;
16816       tree tmpl_parm;
16817       tree spec_parm;
16818
16819       /* Save away the current list, in case we are instantiating one
16820          template from within the body of another.  */
16821       saved_local_specializations = local_specializations;
16822
16823       /* Set up the list of local specializations.  */
16824       local_specializations = htab_create (37,
16825                                            hash_local_specialization,
16826                                            eq_local_specializations,
16827                                            NULL);
16828
16829       /* Set up context.  */
16830       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
16831
16832       /* Create substitution entries for the parameters.  */
16833       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
16834       tmpl_parm = DECL_ARGUMENTS (subst_decl);
16835       spec_parm = DECL_ARGUMENTS (d);
16836       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
16837         {
16838           register_local_specialization (spec_parm, tmpl_parm);
16839           spec_parm = skip_artificial_parms_for (d, spec_parm);
16840           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
16841         }
16842       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
16843         {
16844           register_local_specialization (spec_parm, tmpl_parm);
16845           tmpl_parm = TREE_CHAIN (tmpl_parm);
16846           spec_parm = TREE_CHAIN (spec_parm);
16847         }
16848       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
16849         {
16850           /* Register the (value) argument pack as a specialization of
16851              TMPL_PARM, then move on.  */
16852           tree argpack = make_fnparm_pack (spec_parm);
16853           register_local_specialization (argpack, tmpl_parm);
16854           tmpl_parm = TREE_CHAIN (tmpl_parm);
16855           spec_parm = NULL_TREE;
16856         }
16857       gcc_assert (!spec_parm);
16858
16859       /* Substitute into the body of the function.  */
16860       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
16861                    tf_warning_or_error, tmpl,
16862                    /*integral_constant_expression_p=*/false);
16863
16864       /* Set the current input_location to the end of the function
16865          so that finish_function knows where we are.  */
16866       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
16867
16868       /* We don't need the local specializations any more.  */
16869       htab_delete (local_specializations);
16870       local_specializations = saved_local_specializations;
16871
16872       /* Finish the function.  */
16873       d = finish_function (0);
16874       expand_or_defer_fn (d);
16875     }
16876
16877   /* We're not deferring instantiation any more.  */
16878   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
16879
16880   if (need_push)
16881     pop_from_top_level ();
16882
16883 out:
16884   input_location = saved_loc;
16885   pop_deferring_access_checks ();
16886   pop_tinst_level ();
16887
16888   timevar_pop (TV_PARSE);
16889
16890   return d;
16891 }
16892
16893 /* Run through the list of templates that we wish we could
16894    instantiate, and instantiate any we can.  RETRIES is the
16895    number of times we retry pending template instantiation.  */
16896
16897 void
16898 instantiate_pending_templates (int retries)
16899 {
16900   int reconsider;
16901   location_t saved_loc = input_location;
16902
16903   /* Instantiating templates may trigger vtable generation.  This in turn
16904      may require further template instantiations.  We place a limit here
16905      to avoid infinite loop.  */
16906   if (pending_templates && retries >= max_tinst_depth)
16907     {
16908       tree decl = pending_templates->tinst->decl;
16909
16910       error ("template instantiation depth exceeds maximum of %d"
16911              " instantiating %q+D, possibly from virtual table generation"
16912              " (use -ftemplate-depth= to increase the maximum)",
16913              max_tinst_depth, decl);
16914       if (TREE_CODE (decl) == FUNCTION_DECL)
16915         /* Pretend that we defined it.  */
16916         DECL_INITIAL (decl) = error_mark_node;
16917       return;
16918     }
16919
16920   do
16921     {
16922       struct pending_template **t = &pending_templates;
16923       struct pending_template *last = NULL;
16924       reconsider = 0;
16925       while (*t)
16926         {
16927           tree instantiation = reopen_tinst_level ((*t)->tinst);
16928           bool complete = false;
16929
16930           if (TYPE_P (instantiation))
16931             {
16932               tree fn;
16933
16934               if (!COMPLETE_TYPE_P (instantiation))
16935                 {
16936                   instantiate_class_template (instantiation);
16937                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
16938                     for (fn = TYPE_METHODS (instantiation);
16939                          fn;
16940                          fn = TREE_CHAIN (fn))
16941                       if (! DECL_ARTIFICIAL (fn))
16942                         instantiate_decl (fn,
16943                                           /*defer_ok=*/0,
16944                                           /*expl_inst_class_mem_p=*/false);
16945                   if (COMPLETE_TYPE_P (instantiation))
16946                     reconsider = 1;
16947                 }
16948
16949               complete = COMPLETE_TYPE_P (instantiation);
16950             }
16951           else
16952             {
16953               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
16954                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
16955                 {
16956                   instantiation
16957                     = instantiate_decl (instantiation,
16958                                         /*defer_ok=*/0,
16959                                         /*expl_inst_class_mem_p=*/false);
16960                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
16961                     reconsider = 1;
16962                 }
16963
16964               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
16965                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
16966             }
16967
16968           if (complete)
16969             /* If INSTANTIATION has been instantiated, then we don't
16970                need to consider it again in the future.  */
16971             *t = (*t)->next;
16972           else
16973             {
16974               last = *t;
16975               t = &(*t)->next;
16976             }
16977           tinst_depth = 0;
16978           current_tinst_level = NULL;
16979         }
16980       last_pending_template = last;
16981     }
16982   while (reconsider);
16983
16984   input_location = saved_loc;
16985 }
16986
16987 /* Substitute ARGVEC into T, which is a list of initializers for
16988    either base class or a non-static data member.  The TREE_PURPOSEs
16989    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
16990    instantiate_decl.  */
16991
16992 static tree
16993 tsubst_initializer_list (tree t, tree argvec)
16994 {
16995   tree inits = NULL_TREE;
16996
16997   for (; t; t = TREE_CHAIN (t))
16998     {
16999       tree decl;
17000       tree init;
17001       tree expanded_bases = NULL_TREE;
17002       tree expanded_arguments = NULL_TREE;
17003       int i, len = 1;
17004
17005       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17006         {
17007           tree expr;
17008           tree arg;
17009
17010           /* Expand the base class expansion type into separate base
17011              classes.  */
17012           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17013                                                  tf_warning_or_error,
17014                                                  NULL_TREE);
17015           if (expanded_bases == error_mark_node)
17016             continue;
17017           
17018           /* We'll be building separate TREE_LISTs of arguments for
17019              each base.  */
17020           len = TREE_VEC_LENGTH (expanded_bases);
17021           expanded_arguments = make_tree_vec (len);
17022           for (i = 0; i < len; i++)
17023             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17024
17025           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17026              expand each argument in the TREE_VALUE of t.  */
17027           expr = make_node (EXPR_PACK_EXPANSION);
17028           PACK_EXPANSION_PARAMETER_PACKS (expr) =
17029             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17030
17031           if (TREE_VALUE (t) == void_type_node)
17032             /* VOID_TYPE_NODE is used to indicate
17033                value-initialization.  */
17034             {
17035               for (i = 0; i < len; i++)
17036                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17037             }
17038           else
17039             {
17040               /* Substitute parameter packs into each argument in the
17041                  TREE_LIST.  */
17042               in_base_initializer = 1;
17043               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17044                 {
17045                   tree expanded_exprs;
17046
17047                   /* Expand the argument.  */
17048                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17049                   expanded_exprs 
17050                     = tsubst_pack_expansion (expr, argvec,
17051                                              tf_warning_or_error,
17052                                              NULL_TREE);
17053                   if (expanded_exprs == error_mark_node)
17054                     continue;
17055
17056                   /* Prepend each of the expanded expressions to the
17057                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
17058                   for (i = 0; i < len; i++)
17059                     {
17060                       TREE_VEC_ELT (expanded_arguments, i) = 
17061                         tree_cons (NULL_TREE, 
17062                                    TREE_VEC_ELT (expanded_exprs, i),
17063                                    TREE_VEC_ELT (expanded_arguments, i));
17064                     }
17065                 }
17066               in_base_initializer = 0;
17067
17068               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17069                  since we built them backwards.  */
17070               for (i = 0; i < len; i++)
17071                 {
17072                   TREE_VEC_ELT (expanded_arguments, i) = 
17073                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
17074                 }
17075             }
17076         }
17077
17078       for (i = 0; i < len; ++i)
17079         {
17080           if (expanded_bases)
17081             {
17082               decl = TREE_VEC_ELT (expanded_bases, i);
17083               decl = expand_member_init (decl);
17084               init = TREE_VEC_ELT (expanded_arguments, i);
17085             }
17086           else
17087             {
17088               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
17089                                   tf_warning_or_error, NULL_TREE);
17090
17091               decl = expand_member_init (decl);
17092               if (decl && !DECL_P (decl))
17093                 in_base_initializer = 1;
17094
17095               init = tsubst_expr (TREE_VALUE (t), argvec, 
17096                                   tf_warning_or_error, NULL_TREE,
17097                                   /*integral_constant_expression_p=*/false);
17098               in_base_initializer = 0;
17099             }
17100
17101           if (decl)
17102             {
17103               init = build_tree_list (decl, init);
17104               TREE_CHAIN (init) = inits;
17105               inits = init;
17106             }
17107         }
17108     }
17109   return inits;
17110 }
17111
17112 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
17113
17114 static void
17115 set_current_access_from_decl (tree decl)
17116 {
17117   if (TREE_PRIVATE (decl))
17118     current_access_specifier = access_private_node;
17119   else if (TREE_PROTECTED (decl))
17120     current_access_specifier = access_protected_node;
17121   else
17122     current_access_specifier = access_public_node;
17123 }
17124
17125 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
17126    is the instantiation (which should have been created with
17127    start_enum) and ARGS are the template arguments to use.  */
17128
17129 static void
17130 tsubst_enum (tree tag, tree newtag, tree args)
17131 {
17132   tree e;
17133
17134   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
17135     {
17136       tree value;
17137       tree decl;
17138
17139       decl = TREE_VALUE (e);
17140       /* Note that in a template enum, the TREE_VALUE is the
17141          CONST_DECL, not the corresponding INTEGER_CST.  */
17142       value = tsubst_expr (DECL_INITIAL (decl),
17143                            args, tf_warning_or_error, NULL_TREE,
17144                            /*integral_constant_expression_p=*/true);
17145
17146       /* Give this enumeration constant the correct access.  */
17147       set_current_access_from_decl (decl);
17148
17149       /* Actually build the enumerator itself.  */
17150       build_enumerator (DECL_NAME (decl), value, newtag);
17151     }
17152
17153   finish_enum (newtag);
17154   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
17155     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
17156 }
17157
17158 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
17159    its type -- but without substituting the innermost set of template
17160    arguments.  So, innermost set of template parameters will appear in
17161    the type.  */
17162
17163 tree
17164 get_mostly_instantiated_function_type (tree decl)
17165 {
17166   tree fn_type;
17167   tree tmpl;
17168   tree targs;
17169   tree tparms;
17170   int parm_depth;
17171
17172   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
17173   targs = DECL_TI_ARGS (decl);
17174   tparms = DECL_TEMPLATE_PARMS (tmpl);
17175   parm_depth = TMPL_PARMS_DEPTH (tparms);
17176
17177   /* There should be as many levels of arguments as there are levels
17178      of parameters.  */
17179   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
17180
17181   fn_type = TREE_TYPE (tmpl);
17182
17183   if (parm_depth == 1)
17184     /* No substitution is necessary.  */
17185     ;
17186   else
17187     {
17188       int i, save_access_control;
17189       tree partial_args;
17190
17191       /* Replace the innermost level of the TARGS with NULL_TREEs to
17192          let tsubst know not to substitute for those parameters.  */
17193       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
17194       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
17195         SET_TMPL_ARGS_LEVEL (partial_args, i,
17196                              TMPL_ARGS_LEVEL (targs, i));
17197       SET_TMPL_ARGS_LEVEL (partial_args,
17198                            TMPL_ARGS_DEPTH (targs),
17199                            make_tree_vec (DECL_NTPARMS (tmpl)));
17200
17201       /* Disable access control as this function is used only during
17202          name-mangling.  */
17203       save_access_control = flag_access_control;
17204       flag_access_control = 0;
17205
17206       ++processing_template_decl;
17207       /* Now, do the (partial) substitution to figure out the
17208          appropriate function type.  */
17209       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
17210       --processing_template_decl;
17211
17212       /* Substitute into the template parameters to obtain the real
17213          innermost set of parameters.  This step is important if the
17214          innermost set of template parameters contains value
17215          parameters whose types depend on outer template parameters.  */
17216       TREE_VEC_LENGTH (partial_args)--;
17217       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
17218
17219       flag_access_control = save_access_control;
17220     }
17221
17222   return fn_type;
17223 }
17224
17225 /* Return truthvalue if we're processing a template different from
17226    the last one involved in diagnostics.  */
17227 int
17228 problematic_instantiation_changed (void)
17229 {
17230   return last_template_error_tick != tinst_level_tick;
17231 }
17232
17233 /* Remember current template involved in diagnostics.  */
17234 void
17235 record_last_problematic_instantiation (void)
17236 {
17237   last_template_error_tick = tinst_level_tick;
17238 }
17239
17240 struct tinst_level *
17241 current_instantiation (void)
17242 {
17243   return current_tinst_level;
17244 }
17245
17246 /* [temp.param] Check that template non-type parm TYPE is of an allowable
17247    type. Return zero for ok, nonzero for disallowed. Issue error and
17248    warning messages under control of COMPLAIN.  */
17249
17250 static int
17251 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
17252 {
17253   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
17254     return 0;
17255   else if (POINTER_TYPE_P (type))
17256     return 0;
17257   else if (TYPE_PTR_TO_MEMBER_P (type))
17258     return 0;
17259   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
17260     return 0;
17261   else if (TREE_CODE (type) == TYPENAME_TYPE)
17262     return 0;
17263
17264   if (complain & tf_error)
17265     error ("%q#T is not a valid type for a template constant parameter", type);
17266   return 1;
17267 }
17268
17269 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
17270    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
17271
17272 static bool
17273 dependent_type_p_r (tree type)
17274 {
17275   tree scope;
17276
17277   /* [temp.dep.type]
17278
17279      A type is dependent if it is:
17280
17281      -- a template parameter. Template template parameters are types
17282         for us (since TYPE_P holds true for them) so we handle
17283         them here.  */
17284   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
17285       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
17286     return true;
17287   /* -- a qualified-id with a nested-name-specifier which contains a
17288         class-name that names a dependent type or whose unqualified-id
17289         names a dependent type.  */
17290   if (TREE_CODE (type) == TYPENAME_TYPE)
17291     return true;
17292   /* -- a cv-qualified type where the cv-unqualified type is
17293         dependent.  */
17294   type = TYPE_MAIN_VARIANT (type);
17295   /* -- a compound type constructed from any dependent type.  */
17296   if (TYPE_PTR_TO_MEMBER_P (type))
17297     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
17298             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
17299                                            (type)));
17300   else if (TREE_CODE (type) == POINTER_TYPE
17301            || TREE_CODE (type) == REFERENCE_TYPE)
17302     return dependent_type_p (TREE_TYPE (type));
17303   else if (TREE_CODE (type) == FUNCTION_TYPE
17304            || TREE_CODE (type) == METHOD_TYPE)
17305     {
17306       tree arg_type;
17307
17308       if (dependent_type_p (TREE_TYPE (type)))
17309         return true;
17310       for (arg_type = TYPE_ARG_TYPES (type);
17311            arg_type;
17312            arg_type = TREE_CHAIN (arg_type))
17313         if (dependent_type_p (TREE_VALUE (arg_type)))
17314           return true;
17315       return false;
17316     }
17317   /* -- an array type constructed from any dependent type or whose
17318         size is specified by a constant expression that is
17319         value-dependent.  */
17320   if (TREE_CODE (type) == ARRAY_TYPE)
17321     {
17322       if (TYPE_DOMAIN (type)
17323           && dependent_type_p (TYPE_DOMAIN (type)))
17324         return true;
17325       return dependent_type_p (TREE_TYPE (type));
17326     }
17327   else if (TREE_CODE (type) == INTEGER_TYPE
17328            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
17329     {
17330       /* If this is the TYPE_DOMAIN of an array type, consider it
17331          dependent.  We already checked for value-dependence in
17332          compute_array_index_type.  */
17333       return type_dependent_expression_p (TYPE_MAX_VALUE (type));
17334     }
17335
17336   /* -- a template-id in which either the template name is a template
17337      parameter ...  */
17338   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
17339     return true;
17340   /* ... or any of the template arguments is a dependent type or
17341         an expression that is type-dependent or value-dependent.  */
17342   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
17343            && (any_dependent_template_arguments_p
17344                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
17345     return true;
17346
17347   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
17348      argument of the `typeof' expression is not type-dependent, then
17349      it should already been have resolved.  */
17350   if (TREE_CODE (type) == TYPEOF_TYPE
17351       || TREE_CODE (type) == DECLTYPE_TYPE)
17352     return true;
17353
17354   /* A template argument pack is dependent if any of its packed
17355      arguments are.  */
17356   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
17357     {
17358       tree args = ARGUMENT_PACK_ARGS (type);
17359       int i, len = TREE_VEC_LENGTH (args);
17360       for (i = 0; i < len; ++i)
17361         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17362           return true;
17363     }
17364
17365   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
17366      be template parameters.  */
17367   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
17368     return true;
17369
17370   /* The standard does not specifically mention types that are local
17371      to template functions or local classes, but they should be
17372      considered dependent too.  For example:
17373
17374        template <int I> void f() {
17375          enum E { a = I };
17376          S<sizeof (E)> s;
17377        }
17378
17379      The size of `E' cannot be known until the value of `I' has been
17380      determined.  Therefore, `E' must be considered dependent.  */
17381   scope = TYPE_CONTEXT (type);
17382   if (scope && TYPE_P (scope))
17383     return dependent_type_p (scope);
17384   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
17385     return type_dependent_expression_p (scope);
17386
17387   /* Other types are non-dependent.  */
17388   return false;
17389 }
17390
17391 /* Returns TRUE if TYPE is dependent, in the sense of
17392    [temp.dep.type].  */
17393
17394 bool
17395 dependent_type_p (tree type)
17396 {
17397   /* If there are no template parameters in scope, then there can't be
17398      any dependent types.  */
17399   if (!processing_template_decl)
17400     {
17401       /* If we are not processing a template, then nobody should be
17402          providing us with a dependent type.  */
17403       gcc_assert (type);
17404       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
17405       return false;
17406     }
17407
17408   /* If the type is NULL, we have not computed a type for the entity
17409      in question; in that case, the type is dependent.  */
17410   if (!type)
17411     return true;
17412
17413   /* Erroneous types can be considered non-dependent.  */
17414   if (type == error_mark_node)
17415     return false;
17416
17417   /* If we have not already computed the appropriate value for TYPE,
17418      do so now.  */
17419   if (!TYPE_DEPENDENT_P_VALID (type))
17420     {
17421       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
17422       TYPE_DEPENDENT_P_VALID (type) = 1;
17423     }
17424
17425   return TYPE_DEPENDENT_P (type);
17426 }
17427
17428 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
17429    lookup.  In other words, a dependent type that is not the current
17430    instantiation.  */
17431
17432 bool
17433 dependent_scope_p (tree scope)
17434 {
17435   return (scope && TYPE_P (scope) && dependent_type_p (scope)
17436           && !currently_open_class (scope));
17437 }
17438
17439 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
17440
17441 static bool
17442 dependent_scope_ref_p (tree expression, bool criterion (tree))
17443 {
17444   tree scope;
17445   tree name;
17446
17447   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
17448
17449   if (!TYPE_P (TREE_OPERAND (expression, 0)))
17450     return true;
17451
17452   scope = TREE_OPERAND (expression, 0);
17453   name = TREE_OPERAND (expression, 1);
17454
17455   /* [temp.dep.expr]
17456
17457      An id-expression is type-dependent if it contains a
17458      nested-name-specifier that contains a class-name that names a
17459      dependent type.  */
17460   /* The suggested resolution to Core Issue 224 implies that if the
17461      qualifying type is the current class, then we must peek
17462      inside it.  */
17463   if (DECL_P (name)
17464       && currently_open_class (scope)
17465       && !criterion (name))
17466     return false;
17467   if (dependent_type_p (scope))
17468     return true;
17469
17470   return false;
17471 }
17472
17473 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
17474    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
17475    expression.  */
17476
17477 bool
17478 value_dependent_expression_p (tree expression)
17479 {
17480   if (!processing_template_decl)
17481     return false;
17482
17483   /* A name declared with a dependent type.  */
17484   if (DECL_P (expression) && type_dependent_expression_p (expression))
17485     return true;
17486
17487   switch (TREE_CODE (expression))
17488     {
17489     case IDENTIFIER_NODE:
17490       /* A name that has not been looked up -- must be dependent.  */
17491       return true;
17492
17493     case TEMPLATE_PARM_INDEX:
17494       /* A non-type template parm.  */
17495       return true;
17496
17497     case CONST_DECL:
17498       /* A non-type template parm.  */
17499       if (DECL_TEMPLATE_PARM_P (expression))
17500         return true;
17501       return value_dependent_expression_p (DECL_INITIAL (expression));
17502
17503     case VAR_DECL:
17504        /* A constant with integral or enumeration type and is initialized
17505           with an expression that is value-dependent.  */
17506       if (DECL_INITIAL (expression)
17507           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
17508           && value_dependent_expression_p (DECL_INITIAL (expression)))
17509         return true;
17510       return false;
17511
17512     case DYNAMIC_CAST_EXPR:
17513     case STATIC_CAST_EXPR:
17514     case CONST_CAST_EXPR:
17515     case REINTERPRET_CAST_EXPR:
17516     case CAST_EXPR:
17517       /* These expressions are value-dependent if the type to which
17518          the cast occurs is dependent or the expression being casted
17519          is value-dependent.  */
17520       {
17521         tree type = TREE_TYPE (expression);
17522
17523         if (dependent_type_p (type))
17524           return true;
17525
17526         /* A functional cast has a list of operands.  */
17527         expression = TREE_OPERAND (expression, 0);
17528         if (!expression)
17529           {
17530             /* If there are no operands, it must be an expression such
17531                as "int()". This should not happen for aggregate types
17532                because it would form non-constant expressions.  */
17533             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
17534
17535             return false;
17536           }
17537
17538         if (TREE_CODE (expression) == TREE_LIST)
17539           return any_value_dependent_elements_p (expression);
17540
17541         return value_dependent_expression_p (expression);
17542       }
17543
17544     case SIZEOF_EXPR:
17545     case ALIGNOF_EXPR:
17546       /* A `sizeof' expression is value-dependent if the operand is
17547          type-dependent or is a pack expansion.  */
17548       expression = TREE_OPERAND (expression, 0);
17549       if (PACK_EXPANSION_P (expression))
17550         return true;
17551       else if (TYPE_P (expression))
17552         return dependent_type_p (expression);
17553       return type_dependent_expression_p (expression);
17554
17555     case SCOPE_REF:
17556       return dependent_scope_ref_p (expression, value_dependent_expression_p);
17557
17558     case COMPONENT_REF:
17559       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
17560               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
17561
17562     case CALL_EXPR:
17563       /* A CALL_EXPR may appear in a constant expression if it is a
17564          call to a builtin function, e.g., __builtin_constant_p.  All
17565          such calls are value-dependent.  */
17566       return true;
17567
17568     case NONTYPE_ARGUMENT_PACK:
17569       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
17570          is value-dependent.  */
17571       {
17572         tree values = ARGUMENT_PACK_ARGS (expression);
17573         int i, len = TREE_VEC_LENGTH (values);
17574         
17575         for (i = 0; i < len; ++i)
17576           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
17577             return true;
17578         
17579         return false;
17580       }
17581
17582     case TRAIT_EXPR:
17583       {
17584         tree type2 = TRAIT_EXPR_TYPE2 (expression);
17585         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
17586                 || (type2 ? dependent_type_p (type2) : false));
17587       }
17588
17589     case MODOP_EXPR:
17590       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
17591               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
17592
17593     default:
17594       /* A constant expression is value-dependent if any subexpression is
17595          value-dependent.  */
17596       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
17597         {
17598         case tcc_reference:
17599         case tcc_unary:
17600           return (value_dependent_expression_p
17601                   (TREE_OPERAND (expression, 0)));
17602
17603         case tcc_comparison:
17604         case tcc_binary:
17605           return ((value_dependent_expression_p
17606                    (TREE_OPERAND (expression, 0)))
17607                   || (value_dependent_expression_p
17608                       (TREE_OPERAND (expression, 1))));
17609
17610         case tcc_expression:
17611         case tcc_vl_exp:
17612           {
17613             int i;
17614             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
17615               /* In some cases, some of the operands may be missing.
17616                  (For example, in the case of PREDECREMENT_EXPR, the
17617                  amount to increment by may be missing.)  That doesn't
17618                  make the expression dependent.  */
17619               if (TREE_OPERAND (expression, i)
17620                   && (value_dependent_expression_p
17621                       (TREE_OPERAND (expression, i))))
17622                 return true;
17623             return false;
17624           }
17625
17626         default:
17627           break;
17628         }
17629     }
17630
17631   /* The expression is not value-dependent.  */
17632   return false;
17633 }
17634
17635 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
17636    [temp.dep.expr].  */
17637
17638 bool
17639 type_dependent_expression_p (tree expression)
17640 {
17641   if (!processing_template_decl)
17642     return false;
17643
17644   if (expression == error_mark_node)
17645     return false;
17646
17647   /* An unresolved name is always dependent.  */
17648   if (TREE_CODE (expression) == IDENTIFIER_NODE
17649       || TREE_CODE (expression) == USING_DECL)
17650     return true;
17651
17652   /* Some expression forms are never type-dependent.  */
17653   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
17654       || TREE_CODE (expression) == SIZEOF_EXPR
17655       || TREE_CODE (expression) == ALIGNOF_EXPR
17656       || TREE_CODE (expression) == TRAIT_EXPR
17657       || TREE_CODE (expression) == TYPEID_EXPR
17658       || TREE_CODE (expression) == DELETE_EXPR
17659       || TREE_CODE (expression) == VEC_DELETE_EXPR
17660       || TREE_CODE (expression) == THROW_EXPR)
17661     return false;
17662
17663   /* The types of these expressions depends only on the type to which
17664      the cast occurs.  */
17665   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
17666       || TREE_CODE (expression) == STATIC_CAST_EXPR
17667       || TREE_CODE (expression) == CONST_CAST_EXPR
17668       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
17669       || TREE_CODE (expression) == CAST_EXPR)
17670     return dependent_type_p (TREE_TYPE (expression));
17671
17672   /* The types of these expressions depends only on the type created
17673      by the expression.  */
17674   if (TREE_CODE (expression) == NEW_EXPR
17675       || TREE_CODE (expression) == VEC_NEW_EXPR)
17676     {
17677       /* For NEW_EXPR tree nodes created inside a template, either
17678          the object type itself or a TREE_LIST may appear as the
17679          operand 1.  */
17680       tree type = TREE_OPERAND (expression, 1);
17681       if (TREE_CODE (type) == TREE_LIST)
17682         /* This is an array type.  We need to check array dimensions
17683            as well.  */
17684         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
17685                || value_dependent_expression_p
17686                     (TREE_OPERAND (TREE_VALUE (type), 1));
17687       else
17688         return dependent_type_p (type);
17689     }
17690
17691   if (TREE_CODE (expression) == SCOPE_REF
17692       && dependent_scope_ref_p (expression,
17693                                 type_dependent_expression_p))
17694     return true;
17695
17696   if (TREE_CODE (expression) == FUNCTION_DECL
17697       && DECL_LANG_SPECIFIC (expression)
17698       && DECL_TEMPLATE_INFO (expression)
17699       && (any_dependent_template_arguments_p
17700           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
17701     return true;
17702
17703   if (TREE_CODE (expression) == TEMPLATE_DECL
17704       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
17705     return false;
17706
17707   if (TREE_CODE (expression) == STMT_EXPR)
17708     expression = stmt_expr_value_expr (expression);
17709
17710   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
17711     {
17712       tree elt;
17713       unsigned i;
17714
17715       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
17716         {
17717           if (type_dependent_expression_p (elt))
17718             return true;
17719         }
17720       return false;
17721     }
17722
17723   if (TREE_TYPE (expression) == unknown_type_node)
17724     {
17725       if (TREE_CODE (expression) == ADDR_EXPR)
17726         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
17727       if (TREE_CODE (expression) == COMPONENT_REF
17728           || TREE_CODE (expression) == OFFSET_REF)
17729         {
17730           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
17731             return true;
17732           expression = TREE_OPERAND (expression, 1);
17733           if (TREE_CODE (expression) == IDENTIFIER_NODE)
17734             return false;
17735         }
17736       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
17737       if (TREE_CODE (expression) == SCOPE_REF)
17738         return false;
17739
17740       if (TREE_CODE (expression) == BASELINK)
17741         expression = BASELINK_FUNCTIONS (expression);
17742
17743       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
17744         {
17745           if (any_dependent_template_arguments_p
17746               (TREE_OPERAND (expression, 1)))
17747             return true;
17748           expression = TREE_OPERAND (expression, 0);
17749         }
17750       gcc_assert (TREE_CODE (expression) == OVERLOAD
17751                   || TREE_CODE (expression) == FUNCTION_DECL);
17752
17753       while (expression)
17754         {
17755           if (type_dependent_expression_p (OVL_CURRENT (expression)))
17756             return true;
17757           expression = OVL_NEXT (expression);
17758         }
17759       return false;
17760     }
17761
17762   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
17763
17764   return (dependent_type_p (TREE_TYPE (expression)));
17765 }
17766
17767 /* Like type_dependent_expression_p, but it also works while not processing
17768    a template definition, i.e. during substitution or mangling.  */
17769
17770 bool
17771 type_dependent_expression_p_push (tree expr)
17772 {
17773   bool b;
17774   ++processing_template_decl;
17775   b = type_dependent_expression_p (expr);
17776   --processing_template_decl;
17777   return b;
17778 }
17779
17780 /* Returns TRUE if ARGS contains a type-dependent expression.  */
17781
17782 bool
17783 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
17784 {
17785   unsigned int i;
17786   tree arg;
17787
17788   for (i = 0; VEC_iterate (tree, args, i, arg); ++i)
17789     {
17790       if (type_dependent_expression_p (arg))
17791         return true;
17792     }
17793   return false;
17794 }
17795
17796 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
17797    expressions) contains any value-dependent expressions.  */
17798
17799 bool
17800 any_value_dependent_elements_p (const_tree list)
17801 {
17802   for (; list; list = TREE_CHAIN (list))
17803     if (value_dependent_expression_p (TREE_VALUE (list)))
17804       return true;
17805
17806   return false;
17807 }
17808
17809 /* Returns TRUE if the ARG (a template argument) is dependent.  */
17810
17811 bool
17812 dependent_template_arg_p (tree arg)
17813 {
17814   if (!processing_template_decl)
17815     return false;
17816
17817   if (TREE_CODE (arg) == TEMPLATE_DECL
17818       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
17819     return dependent_template_p (arg);
17820   else if (ARGUMENT_PACK_P (arg))
17821     {
17822       tree args = ARGUMENT_PACK_ARGS (arg);
17823       int i, len = TREE_VEC_LENGTH (args);
17824       for (i = 0; i < len; ++i)
17825         {
17826           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17827             return true;
17828         }
17829
17830       return false;
17831     }
17832   else if (TYPE_P (arg))
17833     return dependent_type_p (arg);
17834   else
17835     return (type_dependent_expression_p (arg)
17836             || value_dependent_expression_p (arg));
17837 }
17838
17839 /* Returns true if ARGS (a collection of template arguments) contains
17840    any types that require structural equality testing.  */
17841
17842 bool
17843 any_template_arguments_need_structural_equality_p (tree args)
17844 {
17845   int i;
17846   int j;
17847
17848   if (!args)
17849     return false;
17850   if (args == error_mark_node)
17851     return true;
17852
17853   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
17854     {
17855       tree level = TMPL_ARGS_LEVEL (args, i + 1);
17856       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
17857         {
17858           tree arg = TREE_VEC_ELT (level, j);
17859           tree packed_args = NULL_TREE;
17860           int k, len = 1;
17861
17862           if (ARGUMENT_PACK_P (arg))
17863             {
17864               /* Look inside the argument pack.  */
17865               packed_args = ARGUMENT_PACK_ARGS (arg);
17866               len = TREE_VEC_LENGTH (packed_args);
17867             }
17868
17869           for (k = 0; k < len; ++k)
17870             {
17871               if (packed_args)
17872                 arg = TREE_VEC_ELT (packed_args, k);
17873
17874               if (error_operand_p (arg))
17875                 return true;
17876               else if (TREE_CODE (arg) == TEMPLATE_DECL
17877                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
17878                 continue;
17879               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
17880                 return true;
17881               else if (!TYPE_P (arg) && TREE_TYPE (arg)
17882                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
17883                 return true;
17884             }
17885         }
17886     }
17887
17888   return false;
17889 }
17890
17891 /* Returns true if ARGS (a collection of template arguments) contains
17892    any dependent arguments.  */
17893
17894 bool
17895 any_dependent_template_arguments_p (const_tree args)
17896 {
17897   int i;
17898   int j;
17899
17900   if (!args)
17901     return false;
17902   if (args == error_mark_node)
17903     return true;
17904
17905   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
17906     {
17907       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
17908       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
17909         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
17910           return true;
17911     }
17912
17913   return false;
17914 }
17915
17916 /* Returns TRUE if the template TMPL is dependent.  */
17917
17918 bool
17919 dependent_template_p (tree tmpl)
17920 {
17921   if (TREE_CODE (tmpl) == OVERLOAD)
17922     {
17923       while (tmpl)
17924         {
17925           if (dependent_template_p (OVL_FUNCTION (tmpl)))
17926             return true;
17927           tmpl = OVL_CHAIN (tmpl);
17928         }
17929       return false;
17930     }
17931
17932   /* Template template parameters are dependent.  */
17933   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
17934       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
17935     return true;
17936   /* So are names that have not been looked up.  */
17937   if (TREE_CODE (tmpl) == SCOPE_REF
17938       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
17939     return true;
17940   /* So are member templates of dependent classes.  */
17941   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
17942     return dependent_type_p (DECL_CONTEXT (tmpl));
17943   return false;
17944 }
17945
17946 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
17947
17948 bool
17949 dependent_template_id_p (tree tmpl, tree args)
17950 {
17951   return (dependent_template_p (tmpl)
17952           || any_dependent_template_arguments_p (args));
17953 }
17954
17955 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
17956    is dependent.  */
17957
17958 bool
17959 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
17960 {
17961   int i;
17962
17963   if (!processing_template_decl)
17964     return false;
17965
17966   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
17967     {
17968       tree decl = TREE_VEC_ELT (declv, i);
17969       tree init = TREE_VEC_ELT (initv, i);
17970       tree cond = TREE_VEC_ELT (condv, i);
17971       tree incr = TREE_VEC_ELT (incrv, i);
17972
17973       if (type_dependent_expression_p (decl))
17974         return true;
17975
17976       if (init && type_dependent_expression_p (init))
17977         return true;
17978
17979       if (type_dependent_expression_p (cond))
17980         return true;
17981
17982       if (COMPARISON_CLASS_P (cond)
17983           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
17984               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
17985         return true;
17986
17987       if (TREE_CODE (incr) == MODOP_EXPR)
17988         {
17989           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
17990               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
17991             return true;
17992         }
17993       else if (type_dependent_expression_p (incr))
17994         return true;
17995       else if (TREE_CODE (incr) == MODIFY_EXPR)
17996         {
17997           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
17998             return true;
17999           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18000             {
18001               tree t = TREE_OPERAND (incr, 1);
18002               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
18003                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
18004                 return true;
18005             }
18006         }
18007     }
18008
18009   return false;
18010 }
18011
18012 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
18013    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
18014    no such TYPE can be found.  Note that this function peers inside
18015    uninstantiated templates and therefore should be used only in
18016    extremely limited situations.  ONLY_CURRENT_P restricts this
18017    peering to the currently open classes hierarchy (which is required
18018    when comparing types).  */
18019
18020 tree
18021 resolve_typename_type (tree type, bool only_current_p)
18022 {
18023   tree scope;
18024   tree name;
18025   tree decl;
18026   int quals;
18027   tree pushed_scope;
18028   tree result;
18029
18030   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
18031
18032   scope = TYPE_CONTEXT (type);
18033   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
18034      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
18035      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
18036      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
18037      identifier  of the TYPENAME_TYPE anymore.
18038      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
18039      TYPENAME_TYPE instead, we avoid messing up with a possible
18040      typedef variant case.  */
18041   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
18042
18043   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
18044      it first before we can figure out what NAME refers to.  */
18045   if (TREE_CODE (scope) == TYPENAME_TYPE)
18046     scope = resolve_typename_type (scope, only_current_p);
18047   /* If we don't know what SCOPE refers to, then we cannot resolve the
18048      TYPENAME_TYPE.  */
18049   if (TREE_CODE (scope) == TYPENAME_TYPE)
18050     return type;
18051   /* If the SCOPE is a template type parameter, we have no way of
18052      resolving the name.  */
18053   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
18054     return type;
18055   /* If the SCOPE is not the current instantiation, there's no reason
18056      to look inside it.  */
18057   if (only_current_p && !currently_open_class (scope))
18058     return type;
18059   /* If this is a typedef, we don't want to look inside (c++/11987).  */
18060   if (typedef_variant_p (type))
18061     return type;
18062   /* If SCOPE isn't the template itself, it will not have a valid
18063      TYPE_FIELDS list.  */
18064   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
18065     /* scope is either the template itself or a compatible instantiation
18066        like X<T>, so look up the name in the original template.  */
18067     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
18068   else
18069     /* scope is a partial instantiation, so we can't do the lookup or we
18070        will lose the template arguments.  */
18071     return type;
18072   /* Enter the SCOPE so that name lookup will be resolved as if we
18073      were in the class definition.  In particular, SCOPE will no
18074      longer be considered a dependent type.  */
18075   pushed_scope = push_scope (scope);
18076   /* Look up the declaration.  */
18077   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
18078
18079   result = NULL_TREE;
18080   
18081   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
18082      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
18083   if (!decl)
18084     /*nop*/;
18085   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
18086            && TREE_CODE (decl) == TYPE_DECL)
18087     {
18088       result = TREE_TYPE (decl);
18089       if (result == error_mark_node)
18090         result = NULL_TREE;
18091     }
18092   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
18093            && DECL_CLASS_TEMPLATE_P (decl))
18094     {
18095       tree tmpl;
18096       tree args;
18097       /* Obtain the template and the arguments.  */
18098       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
18099       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
18100       /* Instantiate the template.  */
18101       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
18102                                       /*entering_scope=*/0,
18103                                       tf_error | tf_user);
18104       if (result == error_mark_node)
18105         result = NULL_TREE;
18106     }
18107   
18108   /* Leave the SCOPE.  */
18109   if (pushed_scope)
18110     pop_scope (pushed_scope);
18111
18112   /* If we failed to resolve it, return the original typename.  */
18113   if (!result)
18114     return type;
18115   
18116   /* If lookup found a typename type, resolve that too.  */
18117   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
18118     {
18119       /* Ill-formed programs can cause infinite recursion here, so we
18120          must catch that.  */
18121       TYPENAME_IS_RESOLVING_P (type) = 1;
18122       result = resolve_typename_type (result, only_current_p);
18123       TYPENAME_IS_RESOLVING_P (type) = 0;
18124     }
18125   
18126   /* Qualify the resulting type.  */
18127   quals = cp_type_quals (type);
18128   if (quals)
18129     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
18130
18131   return result;
18132 }
18133
18134 /* EXPR is an expression which is not type-dependent.  Return a proxy
18135    for EXPR that can be used to compute the types of larger
18136    expressions containing EXPR.  */
18137
18138 tree
18139 build_non_dependent_expr (tree expr)
18140 {
18141   tree inner_expr;
18142
18143   /* Preserve null pointer constants so that the type of things like
18144      "p == 0" where "p" is a pointer can be determined.  */
18145   if (null_ptr_cst_p (expr))
18146     return expr;
18147   /* Preserve OVERLOADs; the functions must be available to resolve
18148      types.  */
18149   inner_expr = expr;
18150   if (TREE_CODE (inner_expr) == STMT_EXPR)
18151     inner_expr = stmt_expr_value_expr (inner_expr);
18152   if (TREE_CODE (inner_expr) == ADDR_EXPR)
18153     inner_expr = TREE_OPERAND (inner_expr, 0);
18154   if (TREE_CODE (inner_expr) == COMPONENT_REF)
18155     inner_expr = TREE_OPERAND (inner_expr, 1);
18156   if (is_overloaded_fn (inner_expr)
18157       || TREE_CODE (inner_expr) == OFFSET_REF)
18158     return expr;
18159   /* There is no need to return a proxy for a variable.  */
18160   if (TREE_CODE (expr) == VAR_DECL)
18161     return expr;
18162   /* Preserve string constants; conversions from string constants to
18163      "char *" are allowed, even though normally a "const char *"
18164      cannot be used to initialize a "char *".  */
18165   if (TREE_CODE (expr) == STRING_CST)
18166     return expr;
18167   /* Preserve arithmetic constants, as an optimization -- there is no
18168      reason to create a new node.  */
18169   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
18170     return expr;
18171   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
18172      There is at least one place where we want to know that a
18173      particular expression is a throw-expression: when checking a ?:
18174      expression, there are special rules if the second or third
18175      argument is a throw-expression.  */
18176   if (TREE_CODE (expr) == THROW_EXPR)
18177     return expr;
18178
18179   if (TREE_CODE (expr) == COND_EXPR)
18180     return build3 (COND_EXPR,
18181                    TREE_TYPE (expr),
18182                    TREE_OPERAND (expr, 0),
18183                    (TREE_OPERAND (expr, 1)
18184                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
18185                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
18186                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
18187   if (TREE_CODE (expr) == COMPOUND_EXPR
18188       && !COMPOUND_EXPR_OVERLOADED (expr))
18189     return build2 (COMPOUND_EXPR,
18190                    TREE_TYPE (expr),
18191                    TREE_OPERAND (expr, 0),
18192                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
18193
18194   /* If the type is unknown, it can't really be non-dependent */
18195   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
18196
18197   /* Otherwise, build a NON_DEPENDENT_EXPR.
18198
18199      REFERENCE_TYPEs are not stripped for expressions in templates
18200      because doing so would play havoc with mangling.  Consider, for
18201      example:
18202
18203        template <typename T> void f<T& g>() { g(); }
18204
18205      In the body of "f", the expression for "g" will have
18206      REFERENCE_TYPE, even though the standard says that it should
18207      not.  The reason is that we must preserve the syntactic form of
18208      the expression so that mangling (say) "f<g>" inside the body of
18209      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
18210      stripped here.  */
18211   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
18212 }
18213
18214 /* ARGS is a vector of expressions as arguments to a function call.
18215    Replace the arguments with equivalent non-dependent expressions.
18216    This modifies ARGS in place.  */
18217
18218 void
18219 make_args_non_dependent (VEC(tree,gc) *args)
18220 {
18221   unsigned int ix;
18222   tree arg;
18223
18224   for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
18225     {
18226       tree newarg = build_non_dependent_expr (arg);
18227       if (newarg != arg)
18228         VEC_replace (tree, args, ix, newarg);
18229     }
18230 }
18231
18232 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
18233    with a level one deeper than the actual template parms.  */
18234
18235 tree
18236 make_auto (void)
18237 {
18238   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
18239   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
18240                                TYPE_DECL, get_identifier ("auto"), au);
18241   TYPE_STUB_DECL (au) = TYPE_NAME (au);
18242   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
18243     (0, processing_template_decl + 1, processing_template_decl + 1,
18244      TYPE_NAME (au), NULL_TREE);
18245   TYPE_CANONICAL (au) = canonical_type_parameter (au);
18246   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
18247   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
18248
18249   return au;
18250 }
18251
18252 /* Given type ARG, return std::initializer_list<ARG>.  */
18253
18254 static tree
18255 listify (tree arg)
18256 {
18257   tree std_init_list = namespace_binding
18258     (get_identifier ("initializer_list"), std_node);
18259   tree argvec;
18260   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
18261     {    
18262       error ("deducing from brace-enclosed initializer list requires "
18263              "#include <initializer_list>");
18264       return error_mark_node;
18265     }
18266   argvec = make_tree_vec (1);
18267   TREE_VEC_ELT (argvec, 0) = arg;
18268   return lookup_template_class (std_init_list, argvec, NULL_TREE,
18269                                 NULL_TREE, 0, tf_warning_or_error);
18270 }
18271
18272 /* Replace auto in TYPE with std::initializer_list<auto>.  */
18273
18274 static tree
18275 listify_autos (tree type, tree auto_node)
18276 {
18277   tree init_auto = listify (auto_node);
18278   tree argvec = make_tree_vec (1);
18279   TREE_VEC_ELT (argvec, 0) = init_auto;
18280   if (processing_template_decl)
18281     argvec = add_to_template_args (current_template_args (), argvec);
18282   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18283 }
18284
18285 /* walk_tree helper for do_auto_deduction.  */
18286
18287 static tree
18288 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
18289                  void *type)
18290 {
18291   /* Is this a variable with the type we're looking for?  */
18292   if (DECL_P (*tp)
18293       && TREE_TYPE (*tp) == type)
18294     return *tp;
18295   else
18296     return NULL_TREE;
18297 }
18298
18299 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
18300    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
18301
18302 tree
18303 do_auto_deduction (tree type, tree init, tree auto_node)
18304 {
18305   tree parms, tparms, targs;
18306   tree args[1];
18307   tree decl;
18308   int val;
18309
18310   /* The name of the object being declared shall not appear in the
18311      initializer expression.  */
18312   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
18313   if (decl)
18314     {
18315       error ("variable %q#D with %<auto%> type used in its own "
18316              "initializer", decl);
18317       return error_mark_node;
18318     }
18319
18320   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
18321      with either a new invented type template parameter U or, if the
18322      initializer is a braced-init-list (8.5.4), with
18323      std::initializer_list<U>.  */
18324   if (BRACE_ENCLOSED_INITIALIZER_P (init))
18325     type = listify_autos (type, auto_node);
18326
18327   parms = build_tree_list (NULL_TREE, type);
18328   args[0] = init;
18329   tparms = make_tree_vec (1);
18330   targs = make_tree_vec (1);
18331   TREE_VEC_ELT (tparms, 0)
18332     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
18333   val = type_unification_real (tparms, targs, parms, args, 1, 0,
18334                                DEDUCE_CALL, LOOKUP_NORMAL);
18335   if (val > 0)
18336     {
18337       error ("unable to deduce %qT from %qE", type, init);
18338       return error_mark_node;
18339     }
18340
18341   /* If the list of declarators contains more than one declarator, the type
18342      of each declared variable is determined as described above. If the
18343      type deduced for the template parameter U is not the same in each
18344      deduction, the program is ill-formed.  */
18345   if (TREE_TYPE (auto_node)
18346       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
18347     {
18348       error ("inconsistent deduction for %qT: %qT and then %qT",
18349              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
18350       return error_mark_node;
18351     }
18352   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
18353
18354   if (processing_template_decl)
18355     targs = add_to_template_args (current_template_args (), targs);
18356   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
18357 }
18358
18359 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
18360    result.  */
18361
18362 tree
18363 splice_late_return_type (tree type, tree late_return_type)
18364 {
18365   tree argvec;
18366
18367   if (late_return_type == NULL_TREE)
18368     return type;
18369   argvec = make_tree_vec (1);
18370   TREE_VEC_ELT (argvec, 0) = late_return_type;
18371   if (processing_template_decl)
18372     argvec = add_to_template_args (current_template_args (), argvec);
18373   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18374 }
18375
18376 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
18377
18378 bool
18379 is_auto (const_tree type)
18380 {
18381   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18382       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
18383     return true;
18384   else
18385     return false;
18386 }
18387
18388 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
18389    appear as a type-specifier for the declaration in question, we don't
18390    have to look through the whole type.  */
18391
18392 tree
18393 type_uses_auto (tree type)
18394 {
18395   enum tree_code code;
18396   if (is_auto (type))
18397     return type;
18398
18399   code = TREE_CODE (type);
18400
18401   if (code == POINTER_TYPE || code == REFERENCE_TYPE
18402       || code == OFFSET_TYPE || code == FUNCTION_TYPE
18403       || code == METHOD_TYPE || code == ARRAY_TYPE)
18404     return type_uses_auto (TREE_TYPE (type));
18405
18406   if (TYPE_PTRMEMFUNC_P (type))
18407     return type_uses_auto (TREE_TYPE (TREE_TYPE
18408                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
18409
18410   return NULL_TREE;
18411 }
18412
18413 /* For a given template T, return the vector of typedefs referenced
18414    in T for which access check is needed at T instantiation time.
18415    T is either  a FUNCTION_DECL or a RECORD_TYPE.
18416    Those typedefs were added to T by the function
18417    append_type_to_template_for_access_check.  */
18418
18419 VEC(qualified_typedef_usage_t,gc)*
18420 get_types_needing_access_check (tree t)
18421 {
18422   tree ti;
18423   VEC(qualified_typedef_usage_t,gc) *result = NULL;
18424
18425   if (!t || t == error_mark_node)
18426     return NULL;
18427
18428   if (!(ti = get_template_info (t)))
18429     return NULL;
18430
18431   if (CLASS_TYPE_P (t)
18432       || TREE_CODE (t) == FUNCTION_DECL)
18433     {
18434       if (!TI_TEMPLATE (ti))
18435         return NULL;
18436
18437       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
18438     }
18439
18440   return result;
18441 }
18442
18443 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
18444    tied to T. That list of typedefs will be access checked at
18445    T instantiation time.
18446    T is either a FUNCTION_DECL or a RECORD_TYPE.
18447    TYPE_DECL is a TYPE_DECL node representing a typedef.
18448    SCOPE is the scope through which TYPE_DECL is accessed.
18449    LOCATION is the location of the usage point of TYPE_DECL.
18450
18451    This function is a subroutine of
18452    append_type_to_template_for_access_check.  */
18453
18454 static void
18455 append_type_to_template_for_access_check_1 (tree t,
18456                                             tree type_decl,
18457                                             tree scope,
18458                                             location_t location)
18459 {
18460   qualified_typedef_usage_t typedef_usage;
18461   tree ti;
18462
18463   if (!t || t == error_mark_node)
18464     return;
18465
18466   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
18467                || CLASS_TYPE_P (t))
18468               && type_decl
18469               && TREE_CODE (type_decl) == TYPE_DECL
18470               && scope);
18471
18472   if (!(ti = get_template_info (t)))
18473     return;
18474
18475   gcc_assert (TI_TEMPLATE (ti));
18476
18477   typedef_usage.typedef_decl = type_decl;
18478   typedef_usage.context = scope;
18479   typedef_usage.locus = location;
18480
18481   VEC_safe_push (qualified_typedef_usage_t, gc,
18482                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
18483                  &typedef_usage);
18484 }
18485
18486 /* Append TYPE_DECL to the template TEMPL.
18487    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
18488    At TEMPL instanciation time, TYPE_DECL will be checked to see
18489    if it can be accessed through SCOPE.
18490    LOCATION is the location of the usage point of TYPE_DECL.
18491
18492    e.g. consider the following code snippet:
18493
18494      class C
18495      {
18496        typedef int myint;
18497      };
18498
18499      template<class U> struct S
18500      {
18501        C::myint mi; // <-- usage point of the typedef C::myint
18502      };
18503
18504      S<char> s;
18505
18506    At S<char> instantiation time, we need to check the access of C::myint
18507    In other words, we need to check the access of the myint typedef through
18508    the C scope. For that purpose, this function will add the myint typedef
18509    and the scope C through which its being accessed to a list of typedefs
18510    tied to the template S. That list will be walked at template instantiation
18511    time and access check performed on each typedefs it contains.
18512    Note that this particular code snippet should yield an error because
18513    myint is private to C.  */
18514
18515 void
18516 append_type_to_template_for_access_check (tree templ,
18517                                           tree type_decl,
18518                                           tree scope,
18519                                           location_t location)
18520 {
18521   qualified_typedef_usage_t *iter;
18522   int i;
18523
18524   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
18525
18526   /* Make sure we don't append the type to the template twice.  */
18527   for (i = 0;
18528        VEC_iterate (qualified_typedef_usage_t,
18529                     get_types_needing_access_check (templ),
18530                     i, iter);
18531        ++i)
18532     if (iter->typedef_decl == type_decl && scope == iter->context)
18533       return;
18534
18535   append_type_to_template_for_access_check_1 (templ, type_decl,
18536                                               scope, location);
18537 }
18538
18539 /* Set up the hash tables for template instantiations.  */
18540
18541 void
18542 init_template_processing (void)
18543 {
18544   decl_specializations = htab_create_ggc (37,
18545                                           hash_specialization,
18546                                           eq_specializations,
18547                                           ggc_free);
18548   type_specializations = htab_create_ggc (37,
18549                                           hash_specialization,
18550                                           eq_specializations,
18551                                           ggc_free);
18552 }
18553
18554 #include "gt-cp-pt.h"