OSDN Git Service

PR c++/38850
[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  Free Software Foundation, Inc.
4    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5    Rewritten by Jason Merrill (jason@cygnus.com).
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* Known bugs or deficiencies include:
24
25      all methods must be provided in header files; can't use a source
26      file that contains only the method templates and "just win".  */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "obstack.h"
33 #include "tree.h"
34 #include "pointer-set.h"
35 #include "flags.h"
36 #include "c-common.h"
37 #include "cp-tree.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "rtl.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct pending_template GTY (()) {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 /* Contains canonical template parameter types. The vector is indexed by
85    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
86    TREE_LIST, whose TREE_VALUEs contain the canonical template
87    parameters of various types and levels.  */
88 static GTY(()) VEC(tree,gc) *canonical_template_parms;
89
90 #define UNIFY_ALLOW_NONE 0
91 #define UNIFY_ALLOW_MORE_CV_QUAL 1
92 #define UNIFY_ALLOW_LESS_CV_QUAL 2
93 #define UNIFY_ALLOW_DERIVED 4
94 #define UNIFY_ALLOW_INTEGER 8
95 #define UNIFY_ALLOW_OUTER_LEVEL 16
96 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
97 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
98
99 static void push_access_scope (tree);
100 static void pop_access_scope (tree);
101 static bool resolve_overloaded_unification (tree, tree, tree, tree,
102                                             unification_kind_t, int);
103 static int try_one_overload (tree, tree, tree, tree, tree,
104                              unification_kind_t, int, bool);
105 static int unify (tree, tree, tree, tree, int);
106 static void add_pending_template (tree);
107 static int push_tinst_level (tree);
108 static void pop_tinst_level (void);
109 static tree reopen_tinst_level (struct tinst_level *);
110 static tree tsubst_initializer_list (tree, tree);
111 static tree get_class_bindings (tree, tree, tree);
112 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
113                                    bool, bool);
114 static void tsubst_enum (tree, tree, tree);
115 static tree add_to_template_args (tree, tree);
116 static tree add_outermost_template_args (tree, tree);
117 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
118 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
119                                              tree);
120 static int  type_unification_real (tree, tree, tree, tree,
121                                    int, unification_kind_t, int);
122 static void note_template_header (int);
123 static tree convert_nontype_argument_function (tree, tree);
124 static tree convert_nontype_argument (tree, tree);
125 static tree convert_template_argument (tree, tree, tree,
126                                        tsubst_flags_t, int, tree);
127 static int for_each_template_parm (tree, tree_fn_t, void*,
128                                    struct pointer_set_t*, bool);
129 static tree expand_template_argument_pack (tree);
130 static tree build_template_parm_index (int, int, int, tree, tree);
131 static bool inline_needs_template_parms (tree);
132 static void push_inline_template_parms_recursive (tree, int);
133 static tree retrieve_local_specialization (tree);
134 static void register_local_specialization (tree, tree);
135 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
136 static int mark_template_parm (tree, void *);
137 static int template_parm_this_level_p (tree, void *);
138 static tree tsubst_friend_function (tree, tree);
139 static tree tsubst_friend_class (tree, tree);
140 static int can_complete_type_without_circularity (tree);
141 static tree get_bindings (tree, tree, tree, bool);
142 static int template_decl_level (tree);
143 static int check_cv_quals_for_unify (int, tree, tree);
144 static void template_parm_level_and_index (tree, int*, int*);
145 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
146 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
147 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
148 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
149 static void regenerate_decl_from_template (tree, tree);
150 static tree most_specialized_class (tree, tree);
151 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
152 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
153 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
154 static bool check_specialization_scope (void);
155 static tree process_partial_specialization (tree);
156 static void set_current_access_from_decl (tree);
157 static tree get_template_base (tree, tree, tree, tree);
158 static tree try_class_unification (tree, tree, tree, tree);
159 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
160                                            tree, tree);
161 static bool template_template_parm_bindings_ok_p (tree, tree);
162 static int template_args_equal (tree, tree);
163 static void tsubst_default_arguments (tree);
164 static tree for_each_template_parm_r (tree *, int *, void *);
165 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
166 static void copy_default_args_to_explicit_spec (tree);
167 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
168 static int eq_local_specializations (const void *, const void *);
169 static bool dependent_template_arg_p (tree);
170 static bool any_template_arguments_need_structural_equality_p (tree);
171 static bool dependent_type_p_r (tree);
172 static tree tsubst (tree, tree, tsubst_flags_t, tree);
173 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
174 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
175 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
176
177 /* Make the current scope suitable for access checking when we are
178    processing T.  T can be FUNCTION_DECL for instantiated function
179    template, or VAR_DECL for static member variable (need by
180    instantiate_decl).  */
181
182 static void
183 push_access_scope (tree t)
184 {
185   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
186               || TREE_CODE (t) == VAR_DECL);
187
188   if (DECL_FRIEND_CONTEXT (t))
189     push_nested_class (DECL_FRIEND_CONTEXT (t));
190   else if (DECL_CLASS_SCOPE_P (t))
191     push_nested_class (DECL_CONTEXT (t));
192   else
193     push_to_top_level ();
194
195   if (TREE_CODE (t) == FUNCTION_DECL)
196     {
197       saved_access_scope = tree_cons
198         (NULL_TREE, current_function_decl, saved_access_scope);
199       current_function_decl = t;
200     }
201 }
202
203 /* Restore the scope set up by push_access_scope.  T is the node we
204    are processing.  */
205
206 static void
207 pop_access_scope (tree t)
208 {
209   if (TREE_CODE (t) == FUNCTION_DECL)
210     {
211       current_function_decl = TREE_VALUE (saved_access_scope);
212       saved_access_scope = TREE_CHAIN (saved_access_scope);
213     }
214
215   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
216     pop_nested_class ();
217   else
218     pop_from_top_level ();
219 }
220
221 /* Do any processing required when DECL (a member template
222    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
223    to DECL, unless it is a specialization, in which case the DECL
224    itself is returned.  */
225
226 tree
227 finish_member_template_decl (tree decl)
228 {
229   if (decl == error_mark_node)
230     return error_mark_node;
231
232   gcc_assert (DECL_P (decl));
233
234   if (TREE_CODE (decl) == TYPE_DECL)
235     {
236       tree type;
237
238       type = TREE_TYPE (decl);
239       if (type == error_mark_node)
240         return error_mark_node;
241       if (MAYBE_CLASS_TYPE_P (type)
242           && CLASSTYPE_TEMPLATE_INFO (type)
243           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
244         {
245           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
246           check_member_template (tmpl);
247           return tmpl;
248         }
249       return NULL_TREE;
250     }
251   else if (TREE_CODE (decl) == FIELD_DECL)
252     error ("data member %qD cannot be a member template", decl);
253   else if (DECL_TEMPLATE_INFO (decl))
254     {
255       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
256         {
257           check_member_template (DECL_TI_TEMPLATE (decl));
258           return DECL_TI_TEMPLATE (decl);
259         }
260       else
261         return decl;
262     }
263   else
264     error ("invalid member template declaration %qD", decl);
265
266   return error_mark_node;
267 }
268
269 /* Return the template info node corresponding to T, whatever T is.  */
270
271 tree
272 get_template_info (tree t)
273 {
274   tree tinfo = NULL_TREE;
275
276   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
277     tinfo = DECL_TEMPLATE_INFO (t);
278
279   if (!tinfo && TREE_CODE (t) == TYPE_DECL)
280     t = TREE_TYPE (t);
281
282   if (TAGGED_TYPE_P (t))
283     tinfo = TYPE_TEMPLATE_INFO (t);
284
285   return tinfo;
286 }
287
288 /* Returns the template nesting level of the indicated class TYPE.
289
290    For example, in:
291      template <class T>
292      struct A
293      {
294        template <class U>
295        struct B {};
296      };
297
298    A<T>::B<U> has depth two, while A<T> has depth one.
299    Both A<T>::B<int> and A<int>::B<U> have depth one, if
300    they are instantiations, not specializations.
301
302    This function is guaranteed to return 0 if passed NULL_TREE so
303    that, for example, `template_class_depth (current_class_type)' is
304    always safe.  */
305
306 int
307 template_class_depth (tree type)
308 {
309   int depth;
310
311   for (depth = 0;
312        type && TREE_CODE (type) != NAMESPACE_DECL;
313        type = (TREE_CODE (type) == FUNCTION_DECL)
314          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
315     {
316       tree tinfo = get_template_info (type);
317
318       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
319           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
320         ++depth;
321     }
322
323   return depth;
324 }
325
326 /* Subroutine of maybe_begin_member_template_processing.
327    Returns true if processing DECL needs us to push template parms.  */
328
329 static bool
330 inline_needs_template_parms (tree decl)
331 {
332   if (! DECL_TEMPLATE_INFO (decl))
333     return false;
334
335   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
336           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
337 }
338
339 /* Subroutine of maybe_begin_member_template_processing.
340    Push the template parms in PARMS, starting from LEVELS steps into the
341    chain, and ending at the beginning, since template parms are listed
342    innermost first.  */
343
344 static void
345 push_inline_template_parms_recursive (tree parmlist, int levels)
346 {
347   tree parms = TREE_VALUE (parmlist);
348   int i;
349
350   if (levels > 1)
351     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
352
353   ++processing_template_decl;
354   current_template_parms
355     = tree_cons (size_int (processing_template_decl),
356                  parms, current_template_parms);
357   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
358
359   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
360                NULL);
361   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
362     {
363       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
364
365       if (parm == error_mark_node)
366         continue;
367
368       gcc_assert (DECL_P (parm));
369
370       switch (TREE_CODE (parm))
371         {
372         case TYPE_DECL:
373         case TEMPLATE_DECL:
374           pushdecl (parm);
375           break;
376
377         case PARM_DECL:
378           {
379             /* Make a CONST_DECL as is done in process_template_parm.
380                It is ugly that we recreate this here; the original
381                version built in process_template_parm is no longer
382                available.  */
383             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
384                                     TREE_TYPE (parm));
385             DECL_ARTIFICIAL (decl) = 1;
386             TREE_CONSTANT (decl) = 1;
387             TREE_READONLY (decl) = 1;
388             DECL_INITIAL (decl) = DECL_INITIAL (parm);
389             SET_DECL_TEMPLATE_PARM_P (decl);
390             pushdecl (decl);
391           }
392           break;
393
394         default:
395           gcc_unreachable ();
396         }
397     }
398 }
399
400 /* Restore the template parameter context for a member template or
401    a friend template defined in a class definition.  */
402
403 void
404 maybe_begin_member_template_processing (tree decl)
405 {
406   tree parms;
407   int levels = 0;
408
409   if (inline_needs_template_parms (decl))
410     {
411       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
412       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
413
414       if (DECL_TEMPLATE_SPECIALIZATION (decl))
415         {
416           --levels;
417           parms = TREE_CHAIN (parms);
418         }
419
420       push_inline_template_parms_recursive (parms, levels);
421     }
422
423   /* Remember how many levels of template parameters we pushed so that
424      we can pop them later.  */
425   VEC_safe_push (int, heap, inline_parm_levels, levels);
426 }
427
428 /* Undo the effects of maybe_begin_member_template_processing.  */
429
430 void
431 maybe_end_member_template_processing (void)
432 {
433   int i;
434   int last;
435
436   if (VEC_length (int, inline_parm_levels) == 0)
437     return;
438
439   last = VEC_pop (int, inline_parm_levels);
440   for (i = 0; i < last; ++i)
441     {
442       --processing_template_decl;
443       current_template_parms = TREE_CHAIN (current_template_parms);
444       poplevel (0, 0, 0);
445     }
446 }
447
448 /* Return a new template argument vector which contains all of ARGS,
449    but has as its innermost set of arguments the EXTRA_ARGS.  */
450
451 static tree
452 add_to_template_args (tree args, tree extra_args)
453 {
454   tree new_args;
455   int extra_depth;
456   int i;
457   int j;
458
459   extra_depth = TMPL_ARGS_DEPTH (extra_args);
460   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
461
462   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
463     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
464
465   for (j = 1; j <= extra_depth; ++j, ++i)
466     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
467
468   return new_args;
469 }
470
471 /* Like add_to_template_args, but only the outermost ARGS are added to
472    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
473    (EXTRA_ARGS) levels are added.  This function is used to combine
474    the template arguments from a partial instantiation with the
475    template arguments used to attain the full instantiation from the
476    partial instantiation.  */
477
478 static tree
479 add_outermost_template_args (tree args, tree extra_args)
480 {
481   tree new_args;
482
483   /* If there are more levels of EXTRA_ARGS than there are ARGS,
484      something very fishy is going on.  */
485   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
486
487   /* If *all* the new arguments will be the EXTRA_ARGS, just return
488      them.  */
489   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
490     return extra_args;
491
492   /* For the moment, we make ARGS look like it contains fewer levels.  */
493   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
494
495   new_args = add_to_template_args (args, extra_args);
496
497   /* Now, we restore ARGS to its full dimensions.  */
498   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
499
500   return new_args;
501 }
502
503 /* Return the N levels of innermost template arguments from the ARGS.  */
504
505 tree
506 get_innermost_template_args (tree args, int n)
507 {
508   tree new_args;
509   int extra_levels;
510   int i;
511
512   gcc_assert (n >= 0);
513
514   /* If N is 1, just return the innermost set of template arguments.  */
515   if (n == 1)
516     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
517
518   /* If we're not removing anything, just return the arguments we were
519      given.  */
520   extra_levels = TMPL_ARGS_DEPTH (args) - n;
521   gcc_assert (extra_levels >= 0);
522   if (extra_levels == 0)
523     return args;
524
525   /* Make a new set of arguments, not containing the outer arguments.  */
526   new_args = make_tree_vec (n);
527   for (i = 1; i <= n; ++i)
528     SET_TMPL_ARGS_LEVEL (new_args, i,
529                          TMPL_ARGS_LEVEL (args, i + extra_levels));
530
531   return new_args;
532 }
533
534 /* The inverse of get_innermost_template_args: Return all but the innermost
535    EXTRA_LEVELS levels of template arguments from the ARGS.  */
536
537 static tree
538 strip_innermost_template_args (tree args, int extra_levels)
539 {
540   tree new_args;
541   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
542   int i;
543
544   gcc_assert (n >= 0);
545
546   /* If N is 1, just return the outermost set of template arguments.  */
547   if (n == 1)
548     return TMPL_ARGS_LEVEL (args, 1);
549
550   /* If we're not removing anything, just return the arguments we were
551      given.  */
552   gcc_assert (extra_levels >= 0);
553   if (extra_levels == 0)
554     return args;
555
556   /* Make a new set of arguments, not containing the inner arguments.  */
557   new_args = make_tree_vec (n);
558   for (i = 1; i <= n; ++i)
559     SET_TMPL_ARGS_LEVEL (new_args, i,
560                          TMPL_ARGS_LEVEL (args, i));
561
562   return new_args;
563 }
564
565 /* We've got a template header coming up; push to a new level for storing
566    the parms.  */
567
568 void
569 begin_template_parm_list (void)
570 {
571   /* We use a non-tag-transparent scope here, which causes pushtag to
572      put tags in this scope, rather than in the enclosing class or
573      namespace scope.  This is the right thing, since we want
574      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
575      global template class, push_template_decl handles putting the
576      TEMPLATE_DECL into top-level scope.  For a nested template class,
577      e.g.:
578
579        template <class T> struct S1 {
580          template <class T> struct S2 {};
581        };
582
583      pushtag contains special code to call pushdecl_with_scope on the
584      TEMPLATE_DECL for S2.  */
585   begin_scope (sk_template_parms, NULL);
586   ++processing_template_decl;
587   ++processing_template_parmlist;
588   note_template_header (0);
589 }
590
591 /* This routine is called when a specialization is declared.  If it is
592    invalid to declare a specialization here, an error is reported and
593    false is returned, otherwise this routine will return true.  */
594
595 static bool
596 check_specialization_scope (void)
597 {
598   tree scope = current_scope ();
599
600   /* [temp.expl.spec]
601
602      An explicit specialization shall be declared in the namespace of
603      which the template is a member, or, for member templates, in the
604      namespace of which the enclosing class or enclosing class
605      template is a member.  An explicit specialization of a member
606      function, member class or static data member of a class template
607      shall be declared in the namespace of which the class template
608      is a member.  */
609   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
610     {
611       error ("explicit specialization in non-namespace scope %qD", scope);
612       return false;
613     }
614
615   /* [temp.expl.spec]
616
617      In an explicit specialization declaration for a member of a class
618      template or a member template that appears in namespace scope,
619      the member template and some of its enclosing class templates may
620      remain unspecialized, except that the declaration shall not
621      explicitly specialize a class member template if its enclosing
622      class templates are not explicitly specialized as well.  */
623   if (current_template_parms)
624     {
625       error ("enclosing class templates are not explicitly specialized");
626       return false;
627     }
628
629   return true;
630 }
631
632 /* We've just seen template <>.  */
633
634 bool
635 begin_specialization (void)
636 {
637   begin_scope (sk_template_spec, NULL);
638   note_template_header (1);
639   return check_specialization_scope ();
640 }
641
642 /* Called at then end of processing a declaration preceded by
643    template<>.  */
644
645 void
646 end_specialization (void)
647 {
648   finish_scope ();
649   reset_specialization ();
650 }
651
652 /* Any template <>'s that we have seen thus far are not referring to a
653    function specialization.  */
654
655 void
656 reset_specialization (void)
657 {
658   processing_specialization = 0;
659   template_header_count = 0;
660 }
661
662 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
663    it was of the form template <>.  */
664
665 static void
666 note_template_header (int specialization)
667 {
668   processing_specialization = specialization;
669   template_header_count++;
670 }
671
672 /* We're beginning an explicit instantiation.  */
673
674 void
675 begin_explicit_instantiation (void)
676 {
677   gcc_assert (!processing_explicit_instantiation);
678   processing_explicit_instantiation = true;
679 }
680
681
682 void
683 end_explicit_instantiation (void)
684 {
685   gcc_assert (processing_explicit_instantiation);
686   processing_explicit_instantiation = false;
687 }
688
689 /* An explicit specialization or partial specialization TMPL is being
690    declared.  Check that the namespace in which the specialization is
691    occurring is permissible.  Returns false iff it is invalid to
692    specialize TMPL in the current namespace.  */
693
694 static bool
695 check_specialization_namespace (tree tmpl)
696 {
697   tree tpl_ns = decl_namespace_context (tmpl);
698
699   /* [tmpl.expl.spec]
700
701      An explicit specialization shall be declared in the namespace of
702      which the template is a member, or, for member templates, in the
703      namespace of which the enclosing class or enclosing class
704      template is a member.  An explicit specialization of a member
705      function, member class or static data member of a class template
706      shall be declared in the namespace of which the class template is
707      a member.  */
708   if (is_associated_namespace (current_namespace, tpl_ns))
709     /* Same or super-using namespace.  */
710     return true;
711   else
712     {
713       permerror (input_location, "specialization of %qD in different namespace", tmpl);
714       permerror (input_location, "  from definition of %q+#D", tmpl);
715       return false;
716     }
717 }
718
719 /* SPEC is an explicit instantiation.  Check that it is valid to
720    perform this explicit instantiation in the current namespace.  */
721
722 static void
723 check_explicit_instantiation_namespace (tree spec)
724 {
725   tree ns;
726
727   /* DR 275: An explicit instantiation shall appear in an enclosing
728      namespace of its template.  */
729   ns = decl_namespace_context (spec);
730   if (!is_ancestor (current_namespace, ns))
731     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
732                "(which does not enclose namespace %qD)",
733                spec, current_namespace, ns);
734 }
735
736 /* The TYPE is being declared.  If it is a template type, that means it
737    is a partial specialization.  Do appropriate error-checking.  */
738
739 tree
740 maybe_process_partial_specialization (tree type)
741 {
742   tree context;
743
744   if (type == error_mark_node)
745     return error_mark_node;
746
747   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
748     {
749       error ("name of class shadows template template parameter %qD",
750              TYPE_NAME (type));
751       return error_mark_node;
752     }
753
754   context = TYPE_CONTEXT (type);
755
756   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
757     {
758       /* This is for ordinary explicit specialization and partial
759          specialization of a template class such as:
760
761            template <> class C<int>;
762
763          or:
764
765            template <class T> class C<T*>;
766
767          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
768
769       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
770           && !COMPLETE_TYPE_P (type))
771         {
772           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
773           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
774           if (processing_template_decl)
775             {
776               if (push_template_decl (TYPE_MAIN_DECL (type))
777                   == error_mark_node)
778                 return error_mark_node;
779             }
780         }
781       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
782         error ("specialization of %qT after instantiation", type);
783     }
784   else if (CLASS_TYPE_P (type)
785            && !CLASSTYPE_USE_TEMPLATE (type)
786            && CLASSTYPE_TEMPLATE_INFO (type)
787            && context && CLASS_TYPE_P (context)
788            && CLASSTYPE_TEMPLATE_INFO (context))
789     {
790       /* This is for an explicit specialization of member class
791          template according to [temp.expl.spec/18]:
792
793            template <> template <class U> class C<int>::D;
794
795          The context `C<int>' must be an implicit instantiation.
796          Otherwise this is just a member class template declared
797          earlier like:
798
799            template <> class C<int> { template <class U> class D; };
800            template <> template <class U> class C<int>::D;
801
802          In the first case, `C<int>::D' is a specialization of `C<T>::D'
803          while in the second case, `C<int>::D' is a primary template
804          and `C<T>::D' may not exist.  */
805
806       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
807           && !COMPLETE_TYPE_P (type))
808         {
809           tree t;
810
811           if (current_namespace
812               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
813             {
814               permerror (input_location, "specializing %q#T in different namespace", type);
815               permerror (input_location, "  from definition of %q+#D",
816                          CLASSTYPE_TI_TEMPLATE (type));
817             }
818
819           /* Check for invalid specialization after instantiation:
820
821                template <> template <> class C<int>::D<int>;
822                template <> template <class U> class C<int>::D;  */
823
824           for (t = DECL_TEMPLATE_INSTANTIATIONS
825                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
826                t; t = TREE_CHAIN (t))
827             if (TREE_VALUE (t) != type
828                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
829               error ("specialization %qT after instantiation %qT",
830                      type, TREE_VALUE (t));
831
832           /* Mark TYPE as a specialization.  And as a result, we only
833              have one level of template argument for the innermost
834              class template.  */
835           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
836           CLASSTYPE_TI_ARGS (type)
837             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
838         }
839     }
840   else if (processing_specialization)
841     {
842       error ("explicit specialization of non-template %qT", type);
843       return error_mark_node;
844     }
845
846   return type;
847 }
848
849 /* Returns nonzero if we can optimize the retrieval of specializations
850    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
851    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
852
853 static inline bool
854 optimize_specialization_lookup_p (tree tmpl)
855 {
856   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
857           && DECL_CLASS_SCOPE_P (tmpl)
858           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
859              parameter.  */
860           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
861           /* The optimized lookup depends on the fact that the
862              template arguments for the member function template apply
863              purely to the containing class, which is not true if the
864              containing class is an explicit or partial
865              specialization.  */
866           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
867           && !DECL_MEMBER_TEMPLATE_P (tmpl)
868           && !DECL_CONV_FN_P (tmpl)
869           /* It is possible to have a template that is not a member
870              template and is not a member of a template class:
871
872              template <typename T>
873              struct S { friend A::f(); };
874
875              Here, the friend function is a template, but the context does
876              not have template information.  The optimized lookup relies
877              on having ARGS be the template arguments for both the class
878              and the function template.  */
879           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
880 }
881
882 /* Retrieve the specialization (in the sense of [temp.spec] - a
883    specialization is either an instantiation or an explicit
884    specialization) of TMPL for the given template ARGS.  If there is
885    no such specialization, return NULL_TREE.  The ARGS are a vector of
886    arguments, or a vector of vectors of arguments, in the case of
887    templates with more than one level of parameters.
888
889    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
890    then we search for a partial specialization matching ARGS.  This
891    parameter is ignored if TMPL is not a class template.  */
892
893 static tree
894 retrieve_specialization (tree tmpl, tree args,
895                          bool class_specializations_p)
896 {
897   if (args == error_mark_node)
898     return NULL_TREE;
899
900   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
901
902   /* There should be as many levels of arguments as there are
903      levels of parameters.  */
904   gcc_assert (TMPL_ARGS_DEPTH (args)
905               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
906
907   if (optimize_specialization_lookup_p (tmpl))
908     {
909       tree class_template;
910       tree class_specialization;
911       VEC(tree,gc) *methods;
912       tree fns;
913       int idx;
914
915       /* The template arguments actually apply to the containing
916          class.  Find the class specialization with those
917          arguments.  */
918       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
919       class_specialization
920         = retrieve_specialization (class_template, args,
921                                    /*class_specializations_p=*/false);
922       if (!class_specialization)
923         return NULL_TREE;
924       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
925          for the specialization.  */
926       idx = class_method_index_for_fn (class_specialization, tmpl);
927       if (idx == -1)
928         return NULL_TREE;
929       /* Iterate through the methods with the indicated name, looking
930          for the one that has an instance of TMPL.  */
931       methods = CLASSTYPE_METHOD_VEC (class_specialization);
932       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
933         {
934           tree fn = OVL_CURRENT (fns);
935           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
936             return fn;
937         }
938       return NULL_TREE;
939     }
940   else
941     {
942       tree *sp;
943       tree *head;
944
945       /* Class templates store their instantiations on the
946          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
947          DECL_TEMPLATE_SPECIALIZATIONS list.  */
948       if (!class_specializations_p
949           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
950           && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
951         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
952       else
953         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
954       head = sp;
955       /* Iterate through the list until we find a matching template.  */
956       while (*sp != NULL_TREE)
957         {
958           tree spec = *sp;
959
960           if (comp_template_args (TREE_PURPOSE (spec), args))
961             {
962               /* Use the move-to-front heuristic to speed up future
963                  searches.  */
964               if (spec != *head)
965                 {
966                   *sp = TREE_CHAIN (*sp);
967                   TREE_CHAIN (spec) = *head;
968                   *head = spec;
969                 }
970               return TREE_VALUE (spec);
971             }
972           sp = &TREE_CHAIN (spec);
973         }
974     }
975
976   return NULL_TREE;
977 }
978
979 /* Like retrieve_specialization, but for local declarations.  */
980
981 static tree
982 retrieve_local_specialization (tree tmpl)
983 {
984   tree spec;
985
986   if (local_specializations == NULL)
987     return NULL_TREE;
988
989   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
990                                      htab_hash_pointer (tmpl));
991   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
992 }
993
994 /* Returns nonzero iff DECL is a specialization of TMPL.  */
995
996 int
997 is_specialization_of (tree decl, tree tmpl)
998 {
999   tree t;
1000
1001   if (TREE_CODE (decl) == FUNCTION_DECL)
1002     {
1003       for (t = decl;
1004            t != NULL_TREE;
1005            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1006         if (t == tmpl)
1007           return 1;
1008     }
1009   else
1010     {
1011       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1012
1013       for (t = TREE_TYPE (decl);
1014            t != NULL_TREE;
1015            t = CLASSTYPE_USE_TEMPLATE (t)
1016              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1017         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1018           return 1;
1019     }
1020
1021   return 0;
1022 }
1023
1024 /* Returns nonzero iff DECL is a specialization of friend declaration
1025    FRIEND_DECL according to [temp.friend].  */
1026
1027 bool
1028 is_specialization_of_friend (tree decl, tree friend_decl)
1029 {
1030   bool need_template = true;
1031   int template_depth;
1032
1033   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1034               || TREE_CODE (decl) == TYPE_DECL);
1035
1036   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1037      of a template class, we want to check if DECL is a specialization
1038      if this.  */
1039   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1040       && DECL_TEMPLATE_INFO (friend_decl)
1041       && !DECL_USE_TEMPLATE (friend_decl))
1042     {
1043       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1044       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1045       need_template = false;
1046     }
1047   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1048            && !PRIMARY_TEMPLATE_P (friend_decl))
1049     need_template = false;
1050
1051   /* There is nothing to do if this is not a template friend.  */
1052   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1053     return false;
1054
1055   if (is_specialization_of (decl, friend_decl))
1056     return true;
1057
1058   /* [temp.friend/6]
1059      A member of a class template may be declared to be a friend of a
1060      non-template class.  In this case, the corresponding member of
1061      every specialization of the class template is a friend of the
1062      class granting friendship.
1063
1064      For example, given a template friend declaration
1065
1066        template <class T> friend void A<T>::f();
1067
1068      the member function below is considered a friend
1069
1070        template <> struct A<int> {
1071          void f();
1072        };
1073
1074      For this type of template friend, TEMPLATE_DEPTH below will be
1075      nonzero.  To determine if DECL is a friend of FRIEND, we first
1076      check if the enclosing class is a specialization of another.  */
1077
1078   template_depth = template_class_depth (DECL_CONTEXT (friend_decl));
1079   if (template_depth
1080       && DECL_CLASS_SCOPE_P (decl)
1081       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1082                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1083     {
1084       /* Next, we check the members themselves.  In order to handle
1085          a few tricky cases, such as when FRIEND_DECL's are
1086
1087            template <class T> friend void A<T>::g(T t);
1088            template <class T> template <T t> friend void A<T>::h();
1089
1090          and DECL's are
1091
1092            void A<int>::g(int);
1093            template <int> void A<int>::h();
1094
1095          we need to figure out ARGS, the template arguments from
1096          the context of DECL.  This is required for template substitution
1097          of `T' in the function parameter of `g' and template parameter
1098          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1099
1100       tree context = DECL_CONTEXT (decl);
1101       tree args = NULL_TREE;
1102       int current_depth = 0;
1103
1104       while (current_depth < template_depth)
1105         {
1106           if (CLASSTYPE_TEMPLATE_INFO (context))
1107             {
1108               if (current_depth == 0)
1109                 args = TYPE_TI_ARGS (context);
1110               else
1111                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1112               current_depth++;
1113             }
1114           context = TYPE_CONTEXT (context);
1115         }
1116
1117       if (TREE_CODE (decl) == FUNCTION_DECL)
1118         {
1119           bool is_template;
1120           tree friend_type;
1121           tree decl_type;
1122           tree friend_args_type;
1123           tree decl_args_type;
1124
1125           /* Make sure that both DECL and FRIEND_DECL are templates or
1126              non-templates.  */
1127           is_template = DECL_TEMPLATE_INFO (decl)
1128                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1129           if (need_template ^ is_template)
1130             return false;
1131           else if (is_template)
1132             {
1133               /* If both are templates, check template parameter list.  */
1134               tree friend_parms
1135                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1136                                          args, tf_none);
1137               if (!comp_template_parms
1138                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1139                       friend_parms))
1140                 return false;
1141
1142               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1143             }
1144           else
1145             decl_type = TREE_TYPE (decl);
1146
1147           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1148                                               tf_none, NULL_TREE);
1149           if (friend_type == error_mark_node)
1150             return false;
1151
1152           /* Check if return types match.  */
1153           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1154             return false;
1155
1156           /* Check if function parameter types match, ignoring the
1157              `this' parameter.  */
1158           friend_args_type = TYPE_ARG_TYPES (friend_type);
1159           decl_args_type = TYPE_ARG_TYPES (decl_type);
1160           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1161             friend_args_type = TREE_CHAIN (friend_args_type);
1162           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1163             decl_args_type = TREE_CHAIN (decl_args_type);
1164
1165           return compparms (decl_args_type, friend_args_type);
1166         }
1167       else
1168         {
1169           /* DECL is a TYPE_DECL */
1170           bool is_template;
1171           tree decl_type = TREE_TYPE (decl);
1172
1173           /* Make sure that both DECL and FRIEND_DECL are templates or
1174              non-templates.  */
1175           is_template
1176             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1177               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1178
1179           if (need_template ^ is_template)
1180             return false;
1181           else if (is_template)
1182             {
1183               tree friend_parms;
1184               /* If both are templates, check the name of the two
1185                  TEMPLATE_DECL's first because is_friend didn't.  */
1186               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1187                   != DECL_NAME (friend_decl))
1188                 return false;
1189
1190               /* Now check template parameter list.  */
1191               friend_parms
1192                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1193                                          args, tf_none);
1194               return comp_template_parms
1195                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1196                  friend_parms);
1197             }
1198           else
1199             return (DECL_NAME (decl)
1200                     == DECL_NAME (friend_decl));
1201         }
1202     }
1203   return false;
1204 }
1205
1206 /* Register the specialization SPEC as a specialization of TMPL with
1207    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1208    is actually just a friend declaration.  Returns SPEC, or an
1209    equivalent prior declaration, if available.  */
1210
1211 static tree
1212 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1213 {
1214   tree fn;
1215
1216   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1217
1218   if (TREE_CODE (spec) == FUNCTION_DECL
1219       && uses_template_parms (DECL_TI_ARGS (spec)))
1220     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1221        register it; we want the corresponding TEMPLATE_DECL instead.
1222        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1223        the more obvious `uses_template_parms (spec)' to avoid problems
1224        with default function arguments.  In particular, given
1225        something like this:
1226
1227           template <class T> void f(T t1, T t = T())
1228
1229        the default argument expression is not substituted for in an
1230        instantiation unless and until it is actually needed.  */
1231     return spec;
1232
1233   fn = retrieve_specialization (tmpl, args,
1234                                 /*class_specializations_p=*/false);
1235   /* We can sometimes try to re-register a specialization that we've
1236      already got.  In particular, regenerate_decl_from_template calls
1237      duplicate_decls which will update the specialization list.  But,
1238      we'll still get called again here anyhow.  It's more convenient
1239      to simply allow this than to try to prevent it.  */
1240   if (fn == spec)
1241     return spec;
1242   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1243     {
1244       if (DECL_TEMPLATE_INSTANTIATION (fn))
1245         {
1246           if (TREE_USED (fn)
1247               || DECL_EXPLICIT_INSTANTIATION (fn))
1248             {
1249               error ("specialization of %qD after instantiation",
1250                      fn);
1251               return error_mark_node;
1252             }
1253           else
1254             {
1255               tree clone;
1256               /* This situation should occur only if the first
1257                  specialization is an implicit instantiation, the
1258                  second is an explicit specialization, and the
1259                  implicit instantiation has not yet been used.  That
1260                  situation can occur if we have implicitly
1261                  instantiated a member function and then specialized
1262                  it later.
1263
1264                  We can also wind up here if a friend declaration that
1265                  looked like an instantiation turns out to be a
1266                  specialization:
1267
1268                    template <class T> void foo(T);
1269                    class S { friend void foo<>(int) };
1270                    template <> void foo(int);
1271
1272                  We transform the existing DECL in place so that any
1273                  pointers to it become pointers to the updated
1274                  declaration.
1275
1276                  If there was a definition for the template, but not
1277                  for the specialization, we want this to look as if
1278                  there were no definition, and vice versa.  */
1279               DECL_INITIAL (fn) = NULL_TREE;
1280               duplicate_decls (spec, fn, is_friend);
1281               /* The call to duplicate_decls will have applied
1282                  [temp.expl.spec]:
1283
1284                    An explicit specialization of a function template
1285                    is inline only if it is explicitly declared to be,
1286                    and independently of whether its function template
1287                    is.
1288
1289                 to the primary function; now copy the inline bits to
1290                 the various clones.  */
1291               FOR_EACH_CLONE (clone, fn)
1292                 DECL_DECLARED_INLINE_P (clone)
1293                   = DECL_DECLARED_INLINE_P (fn);
1294               check_specialization_namespace (fn);
1295
1296               return fn;
1297             }
1298         }
1299       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1300         {
1301           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1302             /* Dup decl failed, but this is a new definition. Set the
1303                line number so any errors match this new
1304                definition.  */
1305             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1306
1307           return fn;
1308         }
1309     }
1310
1311   /* A specialization must be declared in the same namespace as the
1312      template it is specializing.  */
1313   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1314       && !check_specialization_namespace (tmpl))
1315     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1316
1317   if (!optimize_specialization_lookup_p (tmpl))
1318     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1319       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1320
1321   return spec;
1322 }
1323
1324 /* Unregister the specialization SPEC as a specialization of TMPL.
1325    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1326    if the SPEC was listed as a specialization of TMPL.  */
1327
1328 bool
1329 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1330 {
1331   tree* s;
1332
1333   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1334        *s != NULL_TREE;
1335        s = &TREE_CHAIN (*s))
1336     if (TREE_VALUE (*s) == spec)
1337       {
1338         if (!new_spec)
1339           *s = TREE_CHAIN (*s);
1340         else
1341           TREE_VALUE (*s) = new_spec;
1342         return 1;
1343       }
1344
1345   return 0;
1346 }
1347
1348 /* Compare an entry in the local specializations hash table P1 (which
1349    is really a pointer to a TREE_LIST) with P2 (which is really a
1350    DECL).  */
1351
1352 static int
1353 eq_local_specializations (const void *p1, const void *p2)
1354 {
1355   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1356 }
1357
1358 /* Hash P1, an entry in the local specializations table.  */
1359
1360 static hashval_t
1361 hash_local_specialization (const void* p1)
1362 {
1363   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1364 }
1365
1366 /* Like register_specialization, but for local declarations.  We are
1367    registering SPEC, an instantiation of TMPL.  */
1368
1369 static void
1370 register_local_specialization (tree spec, tree tmpl)
1371 {
1372   void **slot;
1373
1374   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1375                                    htab_hash_pointer (tmpl), INSERT);
1376   *slot = build_tree_list (spec, tmpl);
1377 }
1378
1379 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1380    specialized class.  */
1381
1382 bool
1383 explicit_class_specialization_p (tree type)
1384 {
1385   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1386     return false;
1387   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1388 }
1389
1390 /* Print the list of candidate FNS in an error message.  */
1391
1392 void
1393 print_candidates (tree fns)
1394 {
1395   tree fn;
1396
1397   const char *str = "candidates are:";
1398
1399   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1400     {
1401       tree f;
1402
1403       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1404         error ("%s %+#D", str, OVL_CURRENT (f));
1405       str = "               ";
1406     }
1407 }
1408
1409 /* Returns the template (one of the functions given by TEMPLATE_ID)
1410    which can be specialized to match the indicated DECL with the
1411    explicit template args given in TEMPLATE_ID.  The DECL may be
1412    NULL_TREE if none is available.  In that case, the functions in
1413    TEMPLATE_ID are non-members.
1414
1415    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1416    specialization of a member template.
1417
1418    The TEMPLATE_COUNT is the number of references to qualifying
1419    template classes that appeared in the name of the function. See
1420    check_explicit_specialization for a more accurate description.
1421
1422    TSK indicates what kind of template declaration (if any) is being
1423    declared.  TSK_TEMPLATE indicates that the declaration given by
1424    DECL, though a FUNCTION_DECL, has template parameters, and is
1425    therefore a template function.
1426
1427    The template args (those explicitly specified and those deduced)
1428    are output in a newly created vector *TARGS_OUT.
1429
1430    If it is impossible to determine the result, an error message is
1431    issued.  The error_mark_node is returned to indicate failure.  */
1432
1433 static tree
1434 determine_specialization (tree template_id,
1435                           tree decl,
1436                           tree* targs_out,
1437                           int need_member_template,
1438                           int template_count,
1439                           tmpl_spec_kind tsk)
1440 {
1441   tree fns;
1442   tree targs;
1443   tree explicit_targs;
1444   tree candidates = NULL_TREE;
1445   /* A TREE_LIST of templates of which DECL may be a specialization.
1446      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1447      corresponding TREE_PURPOSE is the set of template arguments that,
1448      when used to instantiate the template, would produce a function
1449      with the signature of DECL.  */
1450   tree templates = NULL_TREE;
1451   int header_count;
1452   struct cp_binding_level *b;
1453
1454   *targs_out = NULL_TREE;
1455
1456   if (template_id == error_mark_node || decl == error_mark_node)
1457     return error_mark_node;
1458
1459   fns = TREE_OPERAND (template_id, 0);
1460   explicit_targs = TREE_OPERAND (template_id, 1);
1461
1462   if (fns == error_mark_node)
1463     return error_mark_node;
1464
1465   /* Check for baselinks.  */
1466   if (BASELINK_P (fns))
1467     fns = BASELINK_FUNCTIONS (fns);
1468
1469   if (!is_overloaded_fn (fns))
1470     {
1471       error ("%qD is not a function template", fns);
1472       return error_mark_node;
1473     }
1474
1475   /* Count the number of template headers specified for this
1476      specialization.  */
1477   header_count = 0;
1478   for (b = current_binding_level;
1479        b->kind == sk_template_parms;
1480        b = b->level_chain)
1481     ++header_count;
1482
1483   for (; fns; fns = OVL_NEXT (fns))
1484     {
1485       tree fn = OVL_CURRENT (fns);
1486
1487       if (TREE_CODE (fn) == TEMPLATE_DECL)
1488         {
1489           tree decl_arg_types;
1490           tree fn_arg_types;
1491
1492           /* In case of explicit specialization, we need to check if
1493              the number of template headers appearing in the specialization
1494              is correct. This is usually done in check_explicit_specialization,
1495              but the check done there cannot be exhaustive when specializing
1496              member functions. Consider the following code:
1497
1498              template <> void A<int>::f(int);
1499              template <> template <> void A<int>::f(int);
1500
1501              Assuming that A<int> is not itself an explicit specialization
1502              already, the first line specializes "f" which is a non-template
1503              member function, whilst the second line specializes "f" which
1504              is a template member function. So both lines are syntactically
1505              correct, and check_explicit_specialization does not reject
1506              them.
1507
1508              Here, we can do better, as we are matching the specialization
1509              against the declarations. We count the number of template
1510              headers, and we check if they match TEMPLATE_COUNT + 1
1511              (TEMPLATE_COUNT is the number of qualifying template classes,
1512              plus there must be another header for the member template
1513              itself).
1514
1515              Notice that if header_count is zero, this is not a
1516              specialization but rather a template instantiation, so there
1517              is no check we can perform here.  */
1518           if (header_count && header_count != template_count + 1)
1519             continue;
1520
1521           /* Check that the number of template arguments at the
1522              innermost level for DECL is the same as for FN.  */
1523           if (current_binding_level->kind == sk_template_parms
1524               && !current_binding_level->explicit_spec_p
1525               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1526                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1527                                       (current_template_parms))))
1528             continue;
1529
1530           /* DECL might be a specialization of FN.  */
1531           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1532           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1533
1534           /* For a non-static member function, we need to make sure
1535              that the const qualification is the same.  Since
1536              get_bindings does not try to merge the "this" parameter,
1537              we must do the comparison explicitly.  */
1538           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1539               && !same_type_p (TREE_VALUE (fn_arg_types),
1540                                TREE_VALUE (decl_arg_types)))
1541             continue;
1542
1543           /* Skip the "this" parameter and, for constructors of
1544              classes with virtual bases, the VTT parameter.  A
1545              full specialization of a constructor will have a VTT
1546              parameter, but a template never will.  */ 
1547           decl_arg_types 
1548             = skip_artificial_parms_for (decl, decl_arg_types);
1549           fn_arg_types 
1550             = skip_artificial_parms_for (fn, fn_arg_types);
1551
1552           /* Check that the number of function parameters matches.
1553              For example,
1554                template <class T> void f(int i = 0);
1555                template <> void f<int>();
1556              The specialization f<int> is invalid but is not caught
1557              by get_bindings below.  */
1558           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1559             continue;
1560
1561           /* Function templates cannot be specializations; there are
1562              no partial specializations of functions.  Therefore, if
1563              the type of DECL does not match FN, there is no
1564              match.  */
1565           if (tsk == tsk_template)
1566             {
1567               if (compparms (fn_arg_types, decl_arg_types))
1568                 candidates = tree_cons (NULL_TREE, fn, candidates);
1569               continue;
1570             }
1571
1572           /* See whether this function might be a specialization of this
1573              template.  */
1574           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1575
1576           if (!targs)
1577             /* We cannot deduce template arguments that when used to
1578                specialize TMPL will produce DECL.  */
1579             continue;
1580
1581           /* Save this template, and the arguments deduced.  */
1582           templates = tree_cons (targs, fn, templates);
1583         }
1584       else if (need_member_template)
1585         /* FN is an ordinary member function, and we need a
1586            specialization of a member template.  */
1587         ;
1588       else if (TREE_CODE (fn) != FUNCTION_DECL)
1589         /* We can get IDENTIFIER_NODEs here in certain erroneous
1590            cases.  */
1591         ;
1592       else if (!DECL_FUNCTION_MEMBER_P (fn))
1593         /* This is just an ordinary non-member function.  Nothing can
1594            be a specialization of that.  */
1595         ;
1596       else if (DECL_ARTIFICIAL (fn))
1597         /* Cannot specialize functions that are created implicitly.  */
1598         ;
1599       else
1600         {
1601           tree decl_arg_types;
1602
1603           /* This is an ordinary member function.  However, since
1604              we're here, we can assume it's enclosing class is a
1605              template class.  For example,
1606
1607                template <typename T> struct S { void f(); };
1608                template <> void S<int>::f() {}
1609
1610              Here, S<int>::f is a non-template, but S<int> is a
1611              template class.  If FN has the same type as DECL, we
1612              might be in business.  */
1613
1614           if (!DECL_TEMPLATE_INFO (fn))
1615             /* Its enclosing class is an explicit specialization
1616                of a template class.  This is not a candidate.  */
1617             continue;
1618
1619           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1620                             TREE_TYPE (TREE_TYPE (fn))))
1621             /* The return types differ.  */
1622             continue;
1623
1624           /* Adjust the type of DECL in case FN is a static member.  */
1625           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1626           if (DECL_STATIC_FUNCTION_P (fn)
1627               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1628             decl_arg_types = TREE_CHAIN (decl_arg_types);
1629
1630           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1631                          decl_arg_types))
1632             /* They match!  */
1633             candidates = tree_cons (NULL_TREE, fn, candidates);
1634         }
1635     }
1636
1637   if (templates && TREE_CHAIN (templates))
1638     {
1639       /* We have:
1640
1641            [temp.expl.spec]
1642
1643            It is possible for a specialization with a given function
1644            signature to be instantiated from more than one function
1645            template.  In such cases, explicit specification of the
1646            template arguments must be used to uniquely identify the
1647            function template specialization being specialized.
1648
1649          Note that here, there's no suggestion that we're supposed to
1650          determine which of the candidate templates is most
1651          specialized.  However, we, also have:
1652
1653            [temp.func.order]
1654
1655            Partial ordering of overloaded function template
1656            declarations is used in the following contexts to select
1657            the function template to which a function template
1658            specialization refers:
1659
1660            -- when an explicit specialization refers to a function
1661               template.
1662
1663          So, we do use the partial ordering rules, at least for now.
1664          This extension can only serve to make invalid programs valid,
1665          so it's safe.  And, there is strong anecdotal evidence that
1666          the committee intended the partial ordering rules to apply;
1667          the EDG front end has that behavior, and John Spicer claims
1668          that the committee simply forgot to delete the wording in
1669          [temp.expl.spec].  */
1670       tree tmpl = most_specialized_instantiation (templates);
1671       if (tmpl != error_mark_node)
1672         {
1673           templates = tmpl;
1674           TREE_CHAIN (templates) = NULL_TREE;
1675         }
1676     }
1677
1678   if (templates == NULL_TREE && candidates == NULL_TREE)
1679     {
1680       error ("template-id %qD for %q+D does not match any template "
1681              "declaration", template_id, decl);
1682       return error_mark_node;
1683     }
1684   else if ((templates && TREE_CHAIN (templates))
1685            || (candidates && TREE_CHAIN (candidates))
1686            || (templates && candidates))
1687     {
1688       error ("ambiguous template specialization %qD for %q+D",
1689              template_id, decl);
1690       chainon (candidates, templates);
1691       print_candidates (candidates);
1692       return error_mark_node;
1693     }
1694
1695   /* We have one, and exactly one, match.  */
1696   if (candidates)
1697     {
1698       tree fn = TREE_VALUE (candidates);
1699       /* DECL is a re-declaration of a template function.  */
1700       if (TREE_CODE (fn) == TEMPLATE_DECL)
1701         return fn;
1702       /* It was a specialization of an ordinary member function in a
1703          template class.  */
1704       *targs_out = copy_node (DECL_TI_ARGS (fn));
1705       return DECL_TI_TEMPLATE (fn);
1706     }
1707
1708   /* It was a specialization of a template.  */
1709   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1710   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1711     {
1712       *targs_out = copy_node (targs);
1713       SET_TMPL_ARGS_LEVEL (*targs_out,
1714                            TMPL_ARGS_DEPTH (*targs_out),
1715                            TREE_PURPOSE (templates));
1716     }
1717   else
1718     *targs_out = TREE_PURPOSE (templates);
1719   return TREE_VALUE (templates);
1720 }
1721
1722 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1723    but with the default argument values filled in from those in the
1724    TMPL_TYPES.  */
1725
1726 static tree
1727 copy_default_args_to_explicit_spec_1 (tree spec_types,
1728                                       tree tmpl_types)
1729 {
1730   tree new_spec_types;
1731
1732   if (!spec_types)
1733     return NULL_TREE;
1734
1735   if (spec_types == void_list_node)
1736     return void_list_node;
1737
1738   /* Substitute into the rest of the list.  */
1739   new_spec_types =
1740     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1741                                           TREE_CHAIN (tmpl_types));
1742
1743   /* Add the default argument for this parameter.  */
1744   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1745                          TREE_VALUE (spec_types),
1746                          new_spec_types);
1747 }
1748
1749 /* DECL is an explicit specialization.  Replicate default arguments
1750    from the template it specializes.  (That way, code like:
1751
1752      template <class T> void f(T = 3);
1753      template <> void f(double);
1754      void g () { f (); }
1755
1756    works, as required.)  An alternative approach would be to look up
1757    the correct default arguments at the call-site, but this approach
1758    is consistent with how implicit instantiations are handled.  */
1759
1760 static void
1761 copy_default_args_to_explicit_spec (tree decl)
1762 {
1763   tree tmpl;
1764   tree spec_types;
1765   tree tmpl_types;
1766   tree new_spec_types;
1767   tree old_type;
1768   tree new_type;
1769   tree t;
1770   tree object_type = NULL_TREE;
1771   tree in_charge = NULL_TREE;
1772   tree vtt = NULL_TREE;
1773
1774   /* See if there's anything we need to do.  */
1775   tmpl = DECL_TI_TEMPLATE (decl);
1776   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1777   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1778     if (TREE_PURPOSE (t))
1779       break;
1780   if (!t)
1781     return;
1782
1783   old_type = TREE_TYPE (decl);
1784   spec_types = TYPE_ARG_TYPES (old_type);
1785
1786   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1787     {
1788       /* Remove the this pointer, but remember the object's type for
1789          CV quals.  */
1790       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1791       spec_types = TREE_CHAIN (spec_types);
1792       tmpl_types = TREE_CHAIN (tmpl_types);
1793
1794       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1795         {
1796           /* DECL may contain more parameters than TMPL due to the extra
1797              in-charge parameter in constructors and destructors.  */
1798           in_charge = spec_types;
1799           spec_types = TREE_CHAIN (spec_types);
1800         }
1801       if (DECL_HAS_VTT_PARM_P (decl))
1802         {
1803           vtt = spec_types;
1804           spec_types = TREE_CHAIN (spec_types);
1805         }
1806     }
1807
1808   /* Compute the merged default arguments.  */
1809   new_spec_types =
1810     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1811
1812   /* Compute the new FUNCTION_TYPE.  */
1813   if (object_type)
1814     {
1815       if (vtt)
1816         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1817                                          TREE_VALUE (vtt),
1818                                          new_spec_types);
1819
1820       if (in_charge)
1821         /* Put the in-charge parameter back.  */
1822         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1823                                          TREE_VALUE (in_charge),
1824                                          new_spec_types);
1825
1826       new_type = build_method_type_directly (object_type,
1827                                              TREE_TYPE (old_type),
1828                                              new_spec_types);
1829     }
1830   else
1831     new_type = build_function_type (TREE_TYPE (old_type),
1832                                     new_spec_types);
1833   new_type = cp_build_type_attribute_variant (new_type,
1834                                               TYPE_ATTRIBUTES (old_type));
1835   new_type = build_exception_variant (new_type,
1836                                       TYPE_RAISES_EXCEPTIONS (old_type));
1837   TREE_TYPE (decl) = new_type;
1838 }
1839
1840 /* Check to see if the function just declared, as indicated in
1841    DECLARATOR, and in DECL, is a specialization of a function
1842    template.  We may also discover that the declaration is an explicit
1843    instantiation at this point.
1844
1845    Returns DECL, or an equivalent declaration that should be used
1846    instead if all goes well.  Issues an error message if something is
1847    amiss.  Returns error_mark_node if the error is not easily
1848    recoverable.
1849
1850    FLAGS is a bitmask consisting of the following flags:
1851
1852    2: The function has a definition.
1853    4: The function is a friend.
1854
1855    The TEMPLATE_COUNT is the number of references to qualifying
1856    template classes that appeared in the name of the function.  For
1857    example, in
1858
1859      template <class T> struct S { void f(); };
1860      void S<int>::f();
1861
1862    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1863    classes are not counted in the TEMPLATE_COUNT, so that in
1864
1865      template <class T> struct S {};
1866      template <> struct S<int> { void f(); }
1867      template <> void S<int>::f();
1868
1869    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1870    invalid; there should be no template <>.)
1871
1872    If the function is a specialization, it is marked as such via
1873    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1874    is set up correctly, and it is added to the list of specializations
1875    for that template.  */
1876
1877 tree
1878 check_explicit_specialization (tree declarator,
1879                                tree decl,
1880                                int template_count,
1881                                int flags)
1882 {
1883   int have_def = flags & 2;
1884   int is_friend = flags & 4;
1885   int specialization = 0;
1886   int explicit_instantiation = 0;
1887   int member_specialization = 0;
1888   tree ctype = DECL_CLASS_CONTEXT (decl);
1889   tree dname = DECL_NAME (decl);
1890   tmpl_spec_kind tsk;
1891
1892   if (is_friend)
1893     {
1894       if (!processing_specialization)
1895         tsk = tsk_none;
1896       else
1897         tsk = tsk_excessive_parms;
1898     }
1899   else
1900     tsk = current_tmpl_spec_kind (template_count);
1901
1902   switch (tsk)
1903     {
1904     case tsk_none:
1905       if (processing_specialization)
1906         {
1907           specialization = 1;
1908           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1909         }
1910       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1911         {
1912           if (is_friend)
1913             /* This could be something like:
1914
1915                template <class T> void f(T);
1916                class S { friend void f<>(int); }  */
1917             specialization = 1;
1918           else
1919             {
1920               /* This case handles bogus declarations like template <>
1921                  template <class T> void f<int>(); */
1922
1923               error ("template-id %qD in declaration of primary template",
1924                      declarator);
1925               return decl;
1926             }
1927         }
1928       break;
1929
1930     case tsk_invalid_member_spec:
1931       /* The error has already been reported in
1932          check_specialization_scope.  */
1933       return error_mark_node;
1934
1935     case tsk_invalid_expl_inst:
1936       error ("template parameter list used in explicit instantiation");
1937
1938       /* Fall through.  */
1939
1940     case tsk_expl_inst:
1941       if (have_def)
1942         error ("definition provided for explicit instantiation");
1943
1944       explicit_instantiation = 1;
1945       break;
1946
1947     case tsk_excessive_parms:
1948     case tsk_insufficient_parms:
1949       if (tsk == tsk_excessive_parms)
1950         error ("too many template parameter lists in declaration of %qD",
1951                decl);
1952       else if (template_header_count)
1953         error("too few template parameter lists in declaration of %qD", decl);
1954       else
1955         error("explicit specialization of %qD must be introduced by "
1956               "%<template <>%>", decl);
1957
1958       /* Fall through.  */
1959     case tsk_expl_spec:
1960       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1961       if (ctype)
1962         member_specialization = 1;
1963       else
1964         specialization = 1;
1965       break;
1966
1967     case tsk_template:
1968       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1969         {
1970           /* This case handles bogus declarations like template <>
1971              template <class T> void f<int>(); */
1972
1973           if (uses_template_parms (declarator))
1974             error ("function template partial specialization %qD "
1975                    "is not allowed", declarator);
1976           else
1977             error ("template-id %qD in declaration of primary template",
1978                    declarator);
1979           return decl;
1980         }
1981
1982       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1983         /* This is a specialization of a member template, without
1984            specialization the containing class.  Something like:
1985
1986              template <class T> struct S {
1987                template <class U> void f (U);
1988              };
1989              template <> template <class U> void S<int>::f(U) {}
1990
1991            That's a specialization -- but of the entire template.  */
1992         specialization = 1;
1993       break;
1994
1995     default:
1996       gcc_unreachable ();
1997     }
1998
1999   if (specialization || member_specialization)
2000     {
2001       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2002       for (; t; t = TREE_CHAIN (t))
2003         if (TREE_PURPOSE (t))
2004           {
2005             permerror (input_location, 
2006                        "default argument specified in explicit specialization");
2007             break;
2008           }
2009     }
2010
2011   if (specialization || member_specialization || explicit_instantiation)
2012     {
2013       tree tmpl = NULL_TREE;
2014       tree targs = NULL_TREE;
2015
2016       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2017       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2018         {
2019           tree fns;
2020
2021           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2022           if (ctype)
2023             fns = dname;
2024           else
2025             {
2026               /* If there is no class context, the explicit instantiation
2027                  must be at namespace scope.  */
2028               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2029
2030               /* Find the namespace binding, using the declaration
2031                  context.  */
2032               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2033                                            false, true);
2034               if (fns == error_mark_node || !is_overloaded_fn (fns))
2035                 {
2036                   error ("%qD is not a template function", dname);
2037                   fns = error_mark_node;
2038                 }
2039               else
2040                 {
2041                   tree fn = OVL_CURRENT (fns);
2042                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2043                                                 CP_DECL_CONTEXT (fn)))
2044                     error ("%qD is not declared in %qD",
2045                            decl, current_namespace);
2046                 }
2047             }
2048
2049           declarator = lookup_template_function (fns, NULL_TREE);
2050         }
2051
2052       if (declarator == error_mark_node)
2053         return error_mark_node;
2054
2055       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2056         {
2057           if (!explicit_instantiation)
2058             /* A specialization in class scope.  This is invalid,
2059                but the error will already have been flagged by
2060                check_specialization_scope.  */
2061             return error_mark_node;
2062           else
2063             {
2064               /* It's not valid to write an explicit instantiation in
2065                  class scope, e.g.:
2066
2067                    class C { template void f(); }
2068
2069                    This case is caught by the parser.  However, on
2070                    something like:
2071
2072                    template class C { void f(); };
2073
2074                    (which is invalid) we can get here.  The error will be
2075                    issued later.  */
2076               ;
2077             }
2078
2079           return decl;
2080         }
2081       else if (ctype != NULL_TREE
2082                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2083                    IDENTIFIER_NODE))
2084         {
2085           /* Find the list of functions in ctype that have the same
2086              name as the declared function.  */
2087           tree name = TREE_OPERAND (declarator, 0);
2088           tree fns = NULL_TREE;
2089           int idx;
2090
2091           if (constructor_name_p (name, ctype))
2092             {
2093               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2094
2095               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2096                   : !CLASSTYPE_DESTRUCTORS (ctype))
2097                 {
2098                   /* From [temp.expl.spec]:
2099
2100                      If such an explicit specialization for the member
2101                      of a class template names an implicitly-declared
2102                      special member function (clause _special_), the
2103                      program is ill-formed.
2104
2105                      Similar language is found in [temp.explicit].  */
2106                   error ("specialization of implicitly-declared special member function");
2107                   return error_mark_node;
2108                 }
2109
2110               name = is_constructor ? ctor_identifier : dtor_identifier;
2111             }
2112
2113           if (!DECL_CONV_FN_P (decl))
2114             {
2115               idx = lookup_fnfields_1 (ctype, name);
2116               if (idx >= 0)
2117                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2118             }
2119           else
2120             {
2121               VEC(tree,gc) *methods;
2122               tree ovl;
2123
2124               /* For a type-conversion operator, we cannot do a
2125                  name-based lookup.  We might be looking for `operator
2126                  int' which will be a specialization of `operator T'.
2127                  So, we find *all* the conversion operators, and then
2128                  select from them.  */
2129               fns = NULL_TREE;
2130
2131               methods = CLASSTYPE_METHOD_VEC (ctype);
2132               if (methods)
2133                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2134                      VEC_iterate (tree, methods, idx, ovl);
2135                      ++idx)
2136                   {
2137                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2138                       /* There are no more conversion functions.  */
2139                       break;
2140
2141                     /* Glue all these conversion functions together
2142                        with those we already have.  */
2143                     for (; ovl; ovl = OVL_NEXT (ovl))
2144                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2145                   }
2146             }
2147
2148           if (fns == NULL_TREE)
2149             {
2150               error ("no member function %qD declared in %qT", name, ctype);
2151               return error_mark_node;
2152             }
2153           else
2154             TREE_OPERAND (declarator, 0) = fns;
2155         }
2156
2157       /* Figure out what exactly is being specialized at this point.
2158          Note that for an explicit instantiation, even one for a
2159          member function, we cannot tell apriori whether the
2160          instantiation is for a member template, or just a member
2161          function of a template class.  Even if a member template is
2162          being instantiated, the member template arguments may be
2163          elided if they can be deduced from the rest of the
2164          declaration.  */
2165       tmpl = determine_specialization (declarator, decl,
2166                                        &targs,
2167                                        member_specialization,
2168                                        template_count,
2169                                        tsk);
2170
2171       if (!tmpl || tmpl == error_mark_node)
2172         /* We couldn't figure out what this declaration was
2173            specializing.  */
2174         return error_mark_node;
2175       else
2176         {
2177           tree gen_tmpl = most_general_template (tmpl);
2178
2179           if (explicit_instantiation)
2180             {
2181               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2182                  is done by do_decl_instantiation later.  */
2183
2184               int arg_depth = TMPL_ARGS_DEPTH (targs);
2185               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2186
2187               if (arg_depth > parm_depth)
2188                 {
2189                   /* If TMPL is not the most general template (for
2190                      example, if TMPL is a friend template that is
2191                      injected into namespace scope), then there will
2192                      be too many levels of TARGS.  Remove some of them
2193                      here.  */
2194                   int i;
2195                   tree new_targs;
2196
2197                   new_targs = make_tree_vec (parm_depth);
2198                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2199                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2200                       = TREE_VEC_ELT (targs, i);
2201                   targs = new_targs;
2202                 }
2203
2204               return instantiate_template (tmpl, targs, tf_error);
2205             }
2206
2207           /* If we thought that the DECL was a member function, but it
2208              turns out to be specializing a static member function,
2209              make DECL a static member function as well.  */
2210           if (DECL_STATIC_FUNCTION_P (tmpl)
2211               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2212             revert_static_member_fn (decl);
2213
2214           /* If this is a specialization of a member template of a
2215              template class, we want to return the TEMPLATE_DECL, not
2216              the specialization of it.  */
2217           if (tsk == tsk_template)
2218             {
2219               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2220               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2221               if (have_def)
2222                 {
2223                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2224                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2225                     = DECL_SOURCE_LOCATION (decl);
2226                   /* We want to use the argument list specified in the
2227                      definition, not in the original declaration.  */
2228                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2229                     = DECL_ARGUMENTS (decl);
2230                 }
2231               return tmpl;
2232             }
2233
2234           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2235           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2236
2237           /* Inherit default function arguments from the template
2238              DECL is specializing.  */
2239           copy_default_args_to_explicit_spec (decl);
2240
2241           /* This specialization has the same protection as the
2242              template it specializes.  */
2243           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2244           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2245
2246           /* 7.1.1-1 [dcl.stc]
2247
2248              A storage-class-specifier shall not be specified in an
2249              explicit specialization...
2250
2251              The parser rejects these, so unless action is taken here,
2252              explicit function specializations will always appear with
2253              global linkage.
2254
2255              The action recommended by the C++ CWG in response to C++
2256              defect report 605 is to make the storage class and linkage
2257              of the explicit specialization match the templated function:
2258
2259              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2260            */
2261           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2262             {
2263               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2264               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2265
2266               /* This specialization has the same linkage and visibility as
2267                  the function template it specializes.  */
2268               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2269               if (! TREE_PUBLIC (decl))
2270                 {
2271                   DECL_INTERFACE_KNOWN (decl) = 1;
2272                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2273                 }
2274               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2275               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2276                 {
2277                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2278                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2279                 }
2280             }
2281
2282           /* If DECL is a friend declaration, declared using an
2283              unqualified name, the namespace associated with DECL may
2284              have been set incorrectly.  For example, in:
2285
2286                template <typename T> void f(T);
2287                namespace N {
2288                  struct S { friend void f<int>(int); }
2289                }
2290
2291              we will have set the DECL_CONTEXT for the friend
2292              declaration to N, rather than to the global namespace.  */
2293           if (DECL_NAMESPACE_SCOPE_P (decl))
2294             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2295
2296           if (is_friend && !have_def)
2297             /* This is not really a declaration of a specialization.
2298                It's just the name of an instantiation.  But, it's not
2299                a request for an instantiation, either.  */
2300             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2301           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2302             /* This is indeed a specialization.  In case of constructors
2303                and destructors, we need in-charge and not-in-charge
2304                versions in V3 ABI.  */
2305             clone_function_decl (decl, /*update_method_vec_p=*/0);
2306
2307           /* Register this specialization so that we can find it
2308              again.  */
2309           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2310         }
2311     }
2312
2313   return decl;
2314 }
2315
2316 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2317    parameters.  These are represented in the same format used for
2318    DECL_TEMPLATE_PARMS.  */
2319
2320 int
2321 comp_template_parms (const_tree parms1, const_tree parms2)
2322 {
2323   const_tree p1;
2324   const_tree p2;
2325
2326   if (parms1 == parms2)
2327     return 1;
2328
2329   for (p1 = parms1, p2 = parms2;
2330        p1 != NULL_TREE && p2 != NULL_TREE;
2331        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2332     {
2333       tree t1 = TREE_VALUE (p1);
2334       tree t2 = TREE_VALUE (p2);
2335       int i;
2336
2337       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2338       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2339
2340       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2341         return 0;
2342
2343       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2344         {
2345           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2346           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2347
2348           /* If either of the template parameters are invalid, assume
2349              they match for the sake of error recovery. */
2350           if (parm1 == error_mark_node || parm2 == error_mark_node)
2351             return 1;
2352
2353           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2354             return 0;
2355
2356           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2357               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2358                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2359             continue;
2360           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2361             return 0;
2362         }
2363     }
2364
2365   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2366     /* One set of parameters has more parameters lists than the
2367        other.  */
2368     return 0;
2369
2370   return 1;
2371 }
2372
2373 /* Determine whether PARM is a parameter pack.  */
2374 bool 
2375 template_parameter_pack_p (const_tree parm)
2376 {
2377   /* Determine if we have a non-type template parameter pack.  */
2378   if (TREE_CODE (parm) == PARM_DECL)
2379     return (DECL_TEMPLATE_PARM_P (parm) 
2380             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2381
2382   /* If this is a list of template parameters, we could get a
2383      TYPE_DECL or a TEMPLATE_DECL.  */ 
2384   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2385     parm = TREE_TYPE (parm);
2386
2387   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2388            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2389           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2390 }
2391
2392 /* Determine whether ARGS describes a variadic template args list,
2393    i.e., one that is terminated by a template argument pack.  */
2394 static bool 
2395 template_args_variadic_p (tree args)
2396 {
2397   int nargs;
2398   tree last_parm;
2399
2400   if (args == NULL_TREE)
2401     return false;
2402
2403   args = INNERMOST_TEMPLATE_ARGS (args);
2404   nargs = TREE_VEC_LENGTH (args);
2405
2406   if (nargs == 0)
2407     return false;
2408
2409   last_parm = TREE_VEC_ELT (args, nargs - 1);
2410
2411   return ARGUMENT_PACK_P (last_parm);
2412 }
2413
2414 /* Generate a new name for the parameter pack name NAME (an
2415    IDENTIFIER_NODE) that incorporates its */
2416 static tree
2417 make_ith_pack_parameter_name (tree name, int i)
2418 {
2419   /* Munge the name to include the parameter index.  */
2420   char numbuf[128];
2421   char* newname;
2422   
2423   sprintf(numbuf, "%i", i);
2424   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2425   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2426   return get_identifier (newname);
2427 }
2428
2429 /* Structure used to track the progress of find_parameter_packs_r.  */
2430 struct find_parameter_pack_data 
2431 {
2432   /* TREE_LIST that will contain all of the parameter packs found by
2433      the traversal.  */
2434   tree* parameter_packs;
2435
2436   /* Set of AST nodes that have been visited by the traversal.  */
2437   struct pointer_set_t *visited;
2438 };
2439
2440 /* Identifies all of the argument packs that occur in a template
2441    argument and appends them to the TREE_LIST inside DATA, which is a
2442    find_parameter_pack_data structure. This is a subroutine of
2443    make_pack_expansion and uses_parameter_packs.  */
2444 static tree
2445 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2446 {
2447   tree t = *tp;
2448   struct find_parameter_pack_data* ppd = 
2449     (struct find_parameter_pack_data*)data;
2450   bool parameter_pack_p = false;
2451
2452   /* Identify whether this is a parameter pack or not.  */
2453   switch (TREE_CODE (t))
2454     {
2455     case TEMPLATE_PARM_INDEX:
2456       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2457         parameter_pack_p = true;
2458       break;
2459
2460     case TEMPLATE_TYPE_PARM:
2461     case TEMPLATE_TEMPLATE_PARM:
2462       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2463         parameter_pack_p = true;
2464       break;
2465
2466     case PARM_DECL:
2467       if (FUNCTION_PARAMETER_PACK_P (t))
2468         {
2469           /* We don't want to walk into the type of a PARM_DECL,
2470              because we don't want to see the type parameter pack.  */
2471           *walk_subtrees = 0;
2472           parameter_pack_p = true;
2473         }
2474       break;
2475
2476     default:
2477       /* Not a parameter pack.  */
2478       break;
2479     }
2480
2481   if (parameter_pack_p)
2482     {
2483       /* Add this parameter pack to the list.  */
2484       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2485     }
2486
2487   if (TYPE_P (t))
2488     cp_walk_tree (&TYPE_CONTEXT (t), 
2489                   &find_parameter_packs_r, ppd, ppd->visited);
2490
2491   /* This switch statement will return immediately if we don't find a
2492      parameter pack.  */
2493   switch (TREE_CODE (t)) 
2494     {
2495     case TEMPLATE_PARM_INDEX:
2496       return NULL_TREE;
2497
2498     case BOUND_TEMPLATE_TEMPLATE_PARM:
2499       /* Check the template itself.  */
2500       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2501                     &find_parameter_packs_r, ppd, ppd->visited);
2502       /* Check the template arguments.  */
2503       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2504                     ppd->visited);
2505       *walk_subtrees = 0;
2506       return NULL_TREE;
2507
2508     case TEMPLATE_TYPE_PARM:
2509     case TEMPLATE_TEMPLATE_PARM:
2510       return NULL_TREE;
2511
2512     case PARM_DECL:
2513       return NULL_TREE;
2514
2515     case RECORD_TYPE:
2516       if (TYPE_PTRMEMFUNC_P (t))
2517         return NULL_TREE;
2518       /* Fall through.  */
2519
2520     case UNION_TYPE:
2521     case ENUMERAL_TYPE:
2522       if (TYPE_TEMPLATE_INFO (t))
2523         cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)), 
2524                       &find_parameter_packs_r, ppd, ppd->visited);
2525
2526       *walk_subtrees = 0;
2527       return NULL_TREE;
2528
2529     case TEMPLATE_DECL:
2530       cp_walk_tree (&TREE_TYPE (t),
2531                     &find_parameter_packs_r, ppd, ppd->visited);
2532       return NULL_TREE;
2533  
2534     case TYPENAME_TYPE:
2535       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2536                    ppd, ppd->visited);
2537       *walk_subtrees = 0;
2538       return NULL_TREE;
2539       
2540     case TYPE_PACK_EXPANSION:
2541     case EXPR_PACK_EXPANSION:
2542       *walk_subtrees = 0;
2543       return NULL_TREE;
2544
2545     case INTEGER_TYPE:
2546       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2547                     ppd, ppd->visited);
2548       *walk_subtrees = 0;
2549       return NULL_TREE;
2550
2551     case IDENTIFIER_NODE:
2552       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
2553                     ppd->visited);
2554       *walk_subtrees = 0;
2555       return NULL_TREE;
2556
2557     default:
2558       return NULL_TREE;
2559     }
2560
2561   return NULL_TREE;
2562 }
2563
2564 /* Determines if the expression or type T uses any parameter packs.  */
2565 bool
2566 uses_parameter_packs (tree t)
2567 {
2568   tree parameter_packs = NULL_TREE;
2569   struct find_parameter_pack_data ppd;
2570   ppd.parameter_packs = &parameter_packs;
2571   ppd.visited = pointer_set_create ();
2572   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2573   pointer_set_destroy (ppd.visited);
2574   return parameter_packs != NULL_TREE;
2575 }
2576
2577 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2578    representation a base-class initializer into a parameter pack
2579    expansion. If all goes well, the resulting node will be an
2580    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2581    respectively.  */
2582 tree 
2583 make_pack_expansion (tree arg)
2584 {
2585   tree result;
2586   tree parameter_packs = NULL_TREE;
2587   bool for_types = false;
2588   struct find_parameter_pack_data ppd;
2589
2590   if (!arg || arg == error_mark_node)
2591     return arg;
2592
2593   if (TREE_CODE (arg) == TREE_LIST)
2594     {
2595       /* The only time we will see a TREE_LIST here is for a base
2596          class initializer.  In this case, the TREE_PURPOSE will be a
2597          _TYPE node (representing the base class expansion we're
2598          initializing) and the TREE_VALUE will be a TREE_LIST
2599          containing the initialization arguments. 
2600
2601          The resulting expansion looks somewhat different from most
2602          expansions. Rather than returning just one _EXPANSION, we
2603          return a TREE_LIST whose TREE_PURPOSE is a
2604          TYPE_PACK_EXPANSION containing the bases that will be
2605          initialized.  The TREE_VALUE will be identical to the
2606          original TREE_VALUE, which is a list of arguments that will
2607          be passed to each base.  We do not introduce any new pack
2608          expansion nodes into the TREE_VALUE (although it is possible
2609          that some already exist), because the TREE_PURPOSE and
2610          TREE_VALUE all need to be expanded together with the same
2611          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2612          resulting TREE_PURPOSE will mention the parameter packs in
2613          both the bases and the arguments to the bases.  */
2614       tree purpose;
2615       tree value;
2616       tree parameter_packs = NULL_TREE;
2617
2618       /* Determine which parameter packs will be used by the base
2619          class expansion.  */
2620       ppd.visited = pointer_set_create ();
2621       ppd.parameter_packs = &parameter_packs;
2622       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2623                     &ppd, ppd.visited);
2624
2625       if (parameter_packs == NULL_TREE)
2626         {
2627           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2628           pointer_set_destroy (ppd.visited);
2629           return error_mark_node;
2630         }
2631
2632       if (TREE_VALUE (arg) != void_type_node)
2633         {
2634           /* Collect the sets of parameter packs used in each of the
2635              initialization arguments.  */
2636           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2637             {
2638               /* Determine which parameter packs will be expanded in this
2639                  argument.  */
2640               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2641                             &ppd, ppd.visited);
2642             }
2643         }
2644
2645       pointer_set_destroy (ppd.visited);
2646
2647       /* Create the pack expansion type for the base type.  */
2648       purpose = make_node (TYPE_PACK_EXPANSION);
2649       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2650       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2651
2652       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2653          they will rarely be compared to anything.  */
2654       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2655
2656       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2657     }
2658
2659   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2660     for_types = true;
2661
2662   /* Build the PACK_EXPANSION_* node.  */
2663   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2664   SET_PACK_EXPANSION_PATTERN (result, arg);
2665   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2666     {
2667       /* Propagate type and const-expression information.  */
2668       TREE_TYPE (result) = TREE_TYPE (arg);
2669       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2670     }
2671   else
2672     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2673        they will rarely be compared to anything.  */
2674     SET_TYPE_STRUCTURAL_EQUALITY (result);
2675
2676   /* Determine which parameter packs will be expanded.  */
2677   ppd.parameter_packs = &parameter_packs;
2678   ppd.visited = pointer_set_create ();
2679   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2680   pointer_set_destroy (ppd.visited);
2681
2682   /* Make sure we found some parameter packs.  */
2683   if (parameter_packs == NULL_TREE)
2684     {
2685       if (TYPE_P (arg))
2686         error ("expansion pattern %<%T%> contains no argument packs", arg);
2687       else
2688         error ("expansion pattern %<%E%> contains no argument packs", arg);
2689       return error_mark_node;
2690     }
2691   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2692
2693   return result;
2694 }
2695
2696 /* Checks T for any "bare" parameter packs, which have not yet been
2697    expanded, and issues an error if any are found. This operation can
2698    only be done on full expressions or types (e.g., an expression
2699    statement, "if" condition, etc.), because we could have expressions like:
2700
2701      foo(f(g(h(args)))...)
2702
2703    where "args" is a parameter pack. check_for_bare_parameter_packs
2704    should not be called for the subexpressions args, h(args),
2705    g(h(args)), or f(g(h(args))), because we would produce erroneous
2706    error messages. 
2707
2708    Returns TRUE and emits an error if there were bare parameter packs,
2709    returns FALSE otherwise.  */
2710 bool 
2711 check_for_bare_parameter_packs (tree t)
2712 {
2713   tree parameter_packs = NULL_TREE;
2714   struct find_parameter_pack_data ppd;
2715
2716   if (!processing_template_decl || !t || t == error_mark_node)
2717     return false;
2718
2719   if (TREE_CODE (t) == TYPE_DECL)
2720     t = TREE_TYPE (t);
2721
2722   ppd.parameter_packs = &parameter_packs;
2723   ppd.visited = pointer_set_create ();
2724   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2725   pointer_set_destroy (ppd.visited);
2726
2727   if (parameter_packs) 
2728     {
2729       error ("parameter packs not expanded with %<...%>:");
2730       while (parameter_packs)
2731         {
2732           tree pack = TREE_VALUE (parameter_packs);
2733           tree name = NULL_TREE;
2734
2735           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2736               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2737             name = TYPE_NAME (pack);
2738           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2739             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2740           else
2741             name = DECL_NAME (pack);
2742
2743           if (name)
2744             inform (input_location, "        %qD", name);
2745           else
2746             inform (input_location, "        <anonymous>");
2747
2748           parameter_packs = TREE_CHAIN (parameter_packs);
2749         }
2750
2751       return true;
2752     }
2753
2754   return false;
2755 }
2756
2757 /* Expand any parameter packs that occur in the template arguments in
2758    ARGS.  */
2759 tree
2760 expand_template_argument_pack (tree args)
2761 {
2762   tree result_args = NULL_TREE;
2763   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2764   int num_result_args = -1;
2765
2766   /* First, determine if we need to expand anything, and the number of
2767      slots we'll need.  */
2768   for (in_arg = 0; in_arg < nargs; ++in_arg)
2769     {
2770       tree arg = TREE_VEC_ELT (args, in_arg);
2771       if (ARGUMENT_PACK_P (arg))
2772         {
2773           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2774           if (num_result_args < 0)
2775             num_result_args = in_arg + num_packed;
2776           else
2777             num_result_args += num_packed;
2778         }
2779       else
2780         {
2781           if (num_result_args >= 0)
2782             num_result_args++;
2783         }
2784     }
2785
2786   /* If no expansion is necessary, we're done.  */
2787   if (num_result_args < 0)
2788     return args;
2789
2790   /* Expand arguments.  */
2791   result_args = make_tree_vec (num_result_args);
2792   for (in_arg = 0; in_arg < nargs; ++in_arg)
2793     {
2794       tree arg = TREE_VEC_ELT (args, in_arg);
2795       if (ARGUMENT_PACK_P (arg))
2796         {
2797           tree packed = ARGUMENT_PACK_ARGS (arg);
2798           int i, num_packed = TREE_VEC_LENGTH (packed);
2799           for (i = 0; i < num_packed; ++i, ++out_arg)
2800             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2801         }
2802       else
2803         {
2804           TREE_VEC_ELT (result_args, out_arg) = arg;
2805           ++out_arg;
2806         }
2807     }
2808
2809   return result_args;
2810 }
2811
2812 /* Checks if DECL shadows a template parameter.
2813
2814    [temp.local]: A template-parameter shall not be redeclared within its
2815    scope (including nested scopes).
2816
2817    Emits an error and returns TRUE if the DECL shadows a parameter,
2818    returns FALSE otherwise.  */
2819
2820 bool
2821 check_template_shadow (tree decl)
2822 {
2823   tree olddecl;
2824
2825   /* If we're not in a template, we can't possibly shadow a template
2826      parameter.  */
2827   if (!current_template_parms)
2828     return true;
2829
2830   /* Figure out what we're shadowing.  */
2831   if (TREE_CODE (decl) == OVERLOAD)
2832     decl = OVL_CURRENT (decl);
2833   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2834
2835   /* If there's no previous binding for this name, we're not shadowing
2836      anything, let alone a template parameter.  */
2837   if (!olddecl)
2838     return true;
2839
2840   /* If we're not shadowing a template parameter, we're done.  Note
2841      that OLDDECL might be an OVERLOAD (or perhaps even an
2842      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2843      node.  */
2844   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2845     return true;
2846
2847   /* We check for decl != olddecl to avoid bogus errors for using a
2848      name inside a class.  We check TPFI to avoid duplicate errors for
2849      inline member templates.  */
2850   if (decl == olddecl
2851       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2852     return true;
2853
2854   error ("declaration of %q+#D", decl);
2855   error (" shadows template parm %q+#D", olddecl);
2856   return false;
2857 }
2858
2859 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2860    ORIG_LEVEL, DECL, and TYPE.  */
2861
2862 static tree
2863 build_template_parm_index (int index,
2864                            int level,
2865                            int orig_level,
2866                            tree decl,
2867                            tree type)
2868 {
2869   tree t = make_node (TEMPLATE_PARM_INDEX);
2870   TEMPLATE_PARM_IDX (t) = index;
2871   TEMPLATE_PARM_LEVEL (t) = level;
2872   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2873   TEMPLATE_PARM_DECL (t) = decl;
2874   TREE_TYPE (t) = type;
2875   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2876   TREE_READONLY (t) = TREE_READONLY (decl);
2877
2878   return t;
2879 }
2880
2881 /* Find the canonical type parameter for the given template type
2882    parameter.  Returns the canonical type parameter, which may be TYPE
2883    if no such parameter existed.  */
2884 static tree
2885 canonical_type_parameter (tree type)
2886 {
2887   tree list;
2888   int idx = TEMPLATE_TYPE_IDX (type);
2889   if (!canonical_template_parms)
2890     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2891
2892   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2893     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2894
2895   list = VEC_index (tree, canonical_template_parms, idx);
2896   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2897     list = TREE_CHAIN (list);
2898
2899   if (list)
2900     return TREE_VALUE (list);
2901   else
2902     {
2903       VEC_replace(tree, canonical_template_parms, idx,
2904                   tree_cons (NULL_TREE, type, 
2905                              VEC_index (tree, canonical_template_parms, idx)));
2906       return type;
2907     }
2908 }
2909
2910 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2911    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2912    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2913    new one is created.  */
2914
2915 static tree
2916 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2917                             tsubst_flags_t complain)
2918 {
2919   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2920       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2921           != TEMPLATE_PARM_LEVEL (index) - levels))
2922     {
2923       tree orig_decl = TEMPLATE_PARM_DECL (index);
2924       tree decl, t;
2925
2926       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2927       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2928       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2929       DECL_ARTIFICIAL (decl) = 1;
2930       SET_DECL_TEMPLATE_PARM_P (decl);
2931
2932       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2933                                      TEMPLATE_PARM_LEVEL (index) - levels,
2934                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2935                                      decl, type);
2936       TEMPLATE_PARM_DESCENDANTS (index) = t;
2937       TEMPLATE_PARM_PARAMETER_PACK (t) 
2938         = TEMPLATE_PARM_PARAMETER_PACK (index);
2939
2940         /* Template template parameters need this.  */
2941       if (TREE_CODE (decl) == TEMPLATE_DECL)
2942         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2943           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2944            args, complain);
2945     }
2946
2947   return TEMPLATE_PARM_DESCENDANTS (index);
2948 }
2949
2950 /* Process information from new template parameter PARM and append it to the
2951    LIST being built.  This new parameter is a non-type parameter iff
2952    IS_NON_TYPE is true. This new parameter is a parameter
2953    pack iff IS_PARAMETER_PACK is true.  */
2954
2955 tree
2956 process_template_parm (tree list, tree parm, bool is_non_type, 
2957                        bool is_parameter_pack)
2958 {
2959   tree decl = 0;
2960   tree defval;
2961   tree err_parm_list;
2962   int idx = 0;
2963
2964   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2965   defval = TREE_PURPOSE (parm);
2966
2967   if (list)
2968     {
2969       tree p = tree_last (list);
2970
2971       if (p && TREE_VALUE (p) != error_mark_node)
2972         {
2973           p = TREE_VALUE (p);
2974           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2975             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2976           else
2977             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2978         }
2979
2980       ++idx;
2981     }
2982   else
2983     idx = 0;
2984
2985   if (is_non_type)
2986     {
2987       parm = TREE_VALUE (parm);
2988
2989       SET_DECL_TEMPLATE_PARM_P (parm);
2990
2991       if (TREE_TYPE (parm) == error_mark_node)
2992         {
2993           err_parm_list = build_tree_list (defval, parm);
2994           TREE_VALUE (err_parm_list) = error_mark_node;
2995            return chainon (list, err_parm_list);
2996         }
2997       else
2998       {
2999         /* [temp.param]
3000
3001            The top-level cv-qualifiers on the template-parameter are
3002            ignored when determining its type.  */
3003         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3004         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3005           {
3006             err_parm_list = build_tree_list (defval, parm);
3007             TREE_VALUE (err_parm_list) = error_mark_node;
3008              return chainon (list, err_parm_list);
3009           }
3010
3011         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3012           {
3013             /* This template parameter is not a parameter pack, but it
3014                should be. Complain about "bare" parameter packs.  */
3015             check_for_bare_parameter_packs (TREE_TYPE (parm));
3016             
3017             /* Recover by calling this a parameter pack.  */
3018             is_parameter_pack = true;
3019           }
3020       }
3021
3022       /* A template parameter is not modifiable.  */
3023       TREE_CONSTANT (parm) = 1;
3024       TREE_READONLY (parm) = 1;
3025       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3026       TREE_CONSTANT (decl) = 1;
3027       TREE_READONLY (decl) = 1;
3028       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3029         = build_template_parm_index (idx, processing_template_decl,
3030                                      processing_template_decl,
3031                                      decl, TREE_TYPE (parm));
3032
3033       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3034         = is_parameter_pack;
3035     }
3036   else
3037     {
3038       tree t;
3039       parm = TREE_VALUE (TREE_VALUE (parm));
3040
3041       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3042         {
3043           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3044           /* This is for distinguishing between real templates and template
3045              template parameters */
3046           TREE_TYPE (parm) = t;
3047           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3048           decl = parm;
3049         }
3050       else
3051         {
3052           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3053           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3054           decl = build_decl (TYPE_DECL, parm, t);
3055         }
3056
3057       TYPE_NAME (t) = decl;
3058       TYPE_STUB_DECL (t) = decl;
3059       parm = decl;
3060       TEMPLATE_TYPE_PARM_INDEX (t)
3061         = build_template_parm_index (idx, processing_template_decl,
3062                                      processing_template_decl,
3063                                      decl, TREE_TYPE (parm));
3064       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3065       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3066     }
3067   DECL_ARTIFICIAL (decl) = 1;
3068   SET_DECL_TEMPLATE_PARM_P (decl);
3069   pushdecl (decl);
3070   parm = build_tree_list (defval, parm);
3071   return chainon (list, parm);
3072 }
3073
3074 /* The end of a template parameter list has been reached.  Process the
3075    tree list into a parameter vector, converting each parameter into a more
3076    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3077    as PARM_DECLs.  */
3078
3079 tree
3080 end_template_parm_list (tree parms)
3081 {
3082   int nparms;
3083   tree parm, next;
3084   tree saved_parmlist = make_tree_vec (list_length (parms));
3085
3086   current_template_parms
3087     = tree_cons (size_int (processing_template_decl),
3088                  saved_parmlist, current_template_parms);
3089
3090   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3091     {
3092       next = TREE_CHAIN (parm);
3093       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3094       TREE_CHAIN (parm) = NULL_TREE;
3095     }
3096
3097   --processing_template_parmlist;
3098
3099   return saved_parmlist;
3100 }
3101
3102 /* end_template_decl is called after a template declaration is seen.  */
3103
3104 void
3105 end_template_decl (void)
3106 {
3107   reset_specialization ();
3108
3109   if (! processing_template_decl)
3110     return;
3111
3112   /* This matches the pushlevel in begin_template_parm_list.  */
3113   finish_scope ();
3114
3115   --processing_template_decl;
3116   current_template_parms = TREE_CHAIN (current_template_parms);
3117 }
3118
3119 /* Within the declaration of a template, return all levels of template
3120    parameters that apply.  The template parameters are represented as
3121    a TREE_VEC, in the form documented in cp-tree.h for template
3122    arguments.  */
3123
3124 static tree
3125 current_template_args (void)
3126 {
3127   tree header;
3128   tree args = NULL_TREE;
3129   int length = TMPL_PARMS_DEPTH (current_template_parms);
3130   int l = length;
3131
3132   /* If there is only one level of template parameters, we do not
3133      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3134      TREE_VEC containing the arguments.  */
3135   if (length > 1)
3136     args = make_tree_vec (length);
3137
3138   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3139     {
3140       tree a = copy_node (TREE_VALUE (header));
3141       int i;
3142
3143       TREE_TYPE (a) = NULL_TREE;
3144       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3145         {
3146           tree t = TREE_VEC_ELT (a, i);
3147
3148           /* T will be a list if we are called from within a
3149              begin/end_template_parm_list pair, but a vector directly
3150              if within a begin/end_member_template_processing pair.  */
3151           if (TREE_CODE (t) == TREE_LIST)
3152             {
3153               t = TREE_VALUE (t);
3154
3155               if (!error_operand_p (t))
3156                 {
3157                   if (TREE_CODE (t) == TYPE_DECL
3158                       || TREE_CODE (t) == TEMPLATE_DECL)
3159                     {
3160                       t = TREE_TYPE (t);
3161                       
3162                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3163                         {
3164                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3165                              with a single element, which expands T.  */
3166                           tree vec = make_tree_vec (1);
3167                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3168                           
3169                           t = make_node (TYPE_ARGUMENT_PACK);
3170                           SET_ARGUMENT_PACK_ARGS (t, vec);
3171                         }
3172                     }
3173                   else
3174                     {
3175                       t = DECL_INITIAL (t);
3176                       
3177                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3178                         {
3179                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3180                              with a single element, which expands T.  */
3181                           tree vec = make_tree_vec (1);
3182                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3183                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3184                           
3185                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3186                           SET_ARGUMENT_PACK_ARGS (t, vec);
3187                           TREE_TYPE (t) = type;
3188                         }
3189                     }
3190                   TREE_VEC_ELT (a, i) = t;
3191                 }
3192             }
3193         }
3194
3195       if (length > 1)
3196         TREE_VEC_ELT (args, --l) = a;
3197       else
3198         args = a;
3199     }
3200
3201   return args;
3202 }
3203
3204 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3205    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3206    a member template.  Used by push_template_decl below.  */
3207
3208 static tree
3209 build_template_decl (tree decl, tree parms, bool member_template_p)
3210 {
3211   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3212   DECL_TEMPLATE_PARMS (tmpl) = parms;
3213   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3214   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3215   if (DECL_LANG_SPECIFIC (decl))
3216     {
3217       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3218       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3219       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3220       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3221       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3222       if (DECL_OVERLOADED_OPERATOR_P (decl))
3223         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3224                                       DECL_OVERLOADED_OPERATOR_P (decl));
3225     }
3226
3227   return tmpl;
3228 }
3229
3230 struct template_parm_data
3231 {
3232   /* The level of the template parameters we are currently
3233      processing.  */
3234   int level;
3235
3236   /* The index of the specialization argument we are currently
3237      processing.  */
3238   int current_arg;
3239
3240   /* An array whose size is the number of template parameters.  The
3241      elements are nonzero if the parameter has been used in any one
3242      of the arguments processed so far.  */
3243   int* parms;
3244
3245   /* An array whose size is the number of template arguments.  The
3246      elements are nonzero if the argument makes use of template
3247      parameters of this level.  */
3248   int* arg_uses_template_parms;
3249 };
3250
3251 /* Subroutine of push_template_decl used to see if each template
3252    parameter in a partial specialization is used in the explicit
3253    argument list.  If T is of the LEVEL given in DATA (which is
3254    treated as a template_parm_data*), then DATA->PARMS is marked
3255    appropriately.  */
3256
3257 static int
3258 mark_template_parm (tree t, void* data)
3259 {
3260   int level;
3261   int idx;
3262   struct template_parm_data* tpd = (struct template_parm_data*) data;
3263
3264   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3265     {
3266       level = TEMPLATE_PARM_LEVEL (t);
3267       idx = TEMPLATE_PARM_IDX (t);
3268     }
3269   else
3270     {
3271       level = TEMPLATE_TYPE_LEVEL (t);
3272       idx = TEMPLATE_TYPE_IDX (t);
3273     }
3274
3275   if (level == tpd->level)
3276     {
3277       tpd->parms[idx] = 1;
3278       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3279     }
3280
3281   /* Return zero so that for_each_template_parm will continue the
3282      traversal of the tree; we want to mark *every* template parm.  */
3283   return 0;
3284 }
3285
3286 /* Process the partial specialization DECL.  */
3287
3288 static tree
3289 process_partial_specialization (tree decl)
3290 {
3291   tree type = TREE_TYPE (decl);
3292   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3293   tree specargs = CLASSTYPE_TI_ARGS (type);
3294   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3295   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3296   tree inner_parms;
3297   int nargs = TREE_VEC_LENGTH (inner_args);
3298   int ntparms;
3299   int  i;
3300   int did_error_intro = 0;
3301   struct template_parm_data tpd;
3302   struct template_parm_data tpd2;
3303
3304   gcc_assert (current_template_parms);
3305
3306   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3307   ntparms = TREE_VEC_LENGTH (inner_parms);
3308
3309   /* We check that each of the template parameters given in the
3310      partial specialization is used in the argument list to the
3311      specialization.  For example:
3312
3313        template <class T> struct S;
3314        template <class T> struct S<T*>;
3315
3316      The second declaration is OK because `T*' uses the template
3317      parameter T, whereas
3318
3319        template <class T> struct S<int>;
3320
3321      is no good.  Even trickier is:
3322
3323        template <class T>
3324        struct S1
3325        {
3326           template <class U>
3327           struct S2;
3328           template <class U>
3329           struct S2<T>;
3330        };
3331
3332      The S2<T> declaration is actually invalid; it is a
3333      full-specialization.  Of course,
3334
3335           template <class U>
3336           struct S2<T (*)(U)>;
3337
3338      or some such would have been OK.  */
3339   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3340   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3341   memset (tpd.parms, 0, sizeof (int) * ntparms);
3342
3343   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3344   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3345   for (i = 0; i < nargs; ++i)
3346     {
3347       tpd.current_arg = i;
3348       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3349                               &mark_template_parm,
3350                               &tpd,
3351                               NULL,
3352                               /*include_nondeduced_p=*/false);
3353     }
3354   for (i = 0; i < ntparms; ++i)
3355     if (tpd.parms[i] == 0)
3356       {
3357         /* One of the template parms was not used in the
3358            specialization.  */
3359         if (!did_error_intro)
3360           {
3361             error ("template parameters not used in partial specialization:");
3362             did_error_intro = 1;
3363           }
3364
3365         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3366       }
3367
3368   /* [temp.class.spec]
3369
3370      The argument list of the specialization shall not be identical to
3371      the implicit argument list of the primary template.  */
3372   if (comp_template_args
3373       (inner_args,
3374        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3375                                                    (maintmpl)))))
3376     error ("partial specialization %qT does not specialize any template arguments", type);
3377
3378   /* [temp.class.spec]
3379
3380      A partially specialized non-type argument expression shall not
3381      involve template parameters of the partial specialization except
3382      when the argument expression is a simple identifier.
3383
3384      The type of a template parameter corresponding to a specialized
3385      non-type argument shall not be dependent on a parameter of the
3386      specialization. 
3387
3388      Also, we verify that pack expansions only occur at the
3389      end of the argument list.  */
3390   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3391   tpd2.parms = 0;
3392   for (i = 0; i < nargs; ++i)
3393     {
3394       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3395       tree arg = TREE_VEC_ELT (inner_args, i);
3396       tree packed_args = NULL_TREE;
3397       int j, len = 1;
3398
3399       if (ARGUMENT_PACK_P (arg))
3400         {
3401           /* Extract the arguments from the argument pack. We'll be
3402              iterating over these in the following loop.  */
3403           packed_args = ARGUMENT_PACK_ARGS (arg);
3404           len = TREE_VEC_LENGTH (packed_args);
3405         }
3406
3407       for (j = 0; j < len; j++)
3408         {
3409           if (packed_args)
3410             /* Get the Jth argument in the parameter pack.  */
3411             arg = TREE_VEC_ELT (packed_args, j);
3412
3413           if (PACK_EXPANSION_P (arg))
3414             {
3415               /* Pack expansions must come at the end of the
3416                  argument list.  */
3417               if ((packed_args && j < len - 1)
3418                   || (!packed_args && i < nargs - 1))
3419                 {
3420                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3421                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3422                   else
3423                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3424
3425                   if (packed_args)
3426                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3427                 }
3428             }
3429
3430           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3431             /* We only care about the pattern.  */
3432             arg = PACK_EXPANSION_PATTERN (arg);
3433
3434           if (/* These first two lines are the `non-type' bit.  */
3435               !TYPE_P (arg)
3436               && TREE_CODE (arg) != TEMPLATE_DECL
3437               /* This next line is the `argument expression is not just a
3438                  simple identifier' condition and also the `specialized
3439                  non-type argument' bit.  */
3440               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3441             {
3442               if ((!packed_args && tpd.arg_uses_template_parms[i])
3443                   || (packed_args && uses_template_parms (arg)))
3444                 error ("template argument %qE involves template parameter(s)",
3445                        arg);
3446               else 
3447                 {
3448                   /* Look at the corresponding template parameter,
3449                      marking which template parameters its type depends
3450                      upon.  */
3451                   tree type = TREE_TYPE (parm);
3452
3453                   if (!tpd2.parms)
3454                     {
3455                       /* We haven't yet initialized TPD2.  Do so now.  */
3456                       tpd2.arg_uses_template_parms 
3457                         = (int *) alloca (sizeof (int) * nargs);
3458                       /* The number of parameters here is the number in the
3459                          main template, which, as checked in the assertion
3460                          above, is NARGS.  */
3461                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3462                       tpd2.level = 
3463                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3464                     }
3465
3466                   /* Mark the template parameters.  But this time, we're
3467                      looking for the template parameters of the main
3468                      template, not in the specialization.  */
3469                   tpd2.current_arg = i;
3470                   tpd2.arg_uses_template_parms[i] = 0;
3471                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3472                   for_each_template_parm (type,
3473                                           &mark_template_parm,
3474                                           &tpd2,
3475                                           NULL,
3476                                           /*include_nondeduced_p=*/false);
3477
3478                   if (tpd2.arg_uses_template_parms [i])
3479                     {
3480                       /* The type depended on some template parameters.
3481                          If they are fully specialized in the
3482                          specialization, that's OK.  */
3483                       int j;
3484                       for (j = 0; j < nargs; ++j)
3485                         if (tpd2.parms[j] != 0
3486                             && tpd.arg_uses_template_parms [j])
3487                           {
3488                             error ("type %qT of template argument %qE depends "
3489                                    "on template parameter(s)", 
3490                                    type,
3491                                    arg);
3492                             break;
3493                           }
3494                     }
3495                 }
3496             }
3497         }
3498     }
3499
3500   if (retrieve_specialization (maintmpl, specargs,
3501                                /*class_specializations_p=*/true))
3502     /* We've already got this specialization.  */
3503     return decl;
3504
3505   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3506     = tree_cons (specargs, inner_parms,
3507                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3508   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3509   return decl;
3510 }
3511
3512 /* Check that a template declaration's use of default arguments and
3513    parameter packs is not invalid.  Here, PARMS are the template
3514    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
3515    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
3516    specialization.
3517    
3518
3519    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3520    declaration (but not a definition); 1 indicates a declaration, 2
3521    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3522    emitted for extraneous default arguments.
3523
3524    Returns TRUE if there were no errors found, FALSE otherwise. */
3525
3526 bool
3527 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3528                          int is_partial, int is_friend_decl)
3529 {
3530   const char *msg;
3531   int last_level_to_check;
3532   tree parm_level;
3533   bool no_errors = true;
3534
3535   /* [temp.param]
3536
3537      A default template-argument shall not be specified in a
3538      function template declaration or a function template definition, nor
3539      in the template-parameter-list of the definition of a member of a
3540      class template.  */
3541
3542   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3543     /* You can't have a function template declaration in a local
3544        scope, nor you can you define a member of a class template in a
3545        local scope.  */
3546     return true;
3547
3548   if (current_class_type
3549       && !TYPE_BEING_DEFINED (current_class_type)
3550       && DECL_LANG_SPECIFIC (decl)
3551       /* If this is either a friend defined in the scope of the class
3552          or a member function.  */
3553       && (DECL_FUNCTION_MEMBER_P (decl)
3554           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3555           : DECL_FRIEND_CONTEXT (decl)
3556           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3557           : false)
3558       /* And, if it was a member function, it really was defined in
3559          the scope of the class.  */
3560       && (!DECL_FUNCTION_MEMBER_P (decl)
3561           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3562     /* We already checked these parameters when the template was
3563        declared, so there's no need to do it again now.  This function
3564        was defined in class scope, but we're processing it's body now
3565        that the class is complete.  */
3566     return true;
3567
3568   /* Core issue 226 (C++0x only): the following only applies to class
3569      templates.  */
3570   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3571     {
3572       /* [temp.param]
3573
3574          If a template-parameter has a default template-argument, all
3575          subsequent template-parameters shall have a default
3576          template-argument supplied.  */
3577       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3578         {
3579           tree inner_parms = TREE_VALUE (parm_level);
3580           int ntparms = TREE_VEC_LENGTH (inner_parms);
3581           int seen_def_arg_p = 0;
3582           int i;
3583
3584           for (i = 0; i < ntparms; ++i)
3585             {
3586               tree parm = TREE_VEC_ELT (inner_parms, i);
3587
3588               if (parm == error_mark_node)
3589                 continue;
3590
3591               if (TREE_PURPOSE (parm))
3592                 seen_def_arg_p = 1;
3593               else if (seen_def_arg_p
3594                        && !template_parameter_pack_p (TREE_VALUE (parm)))
3595                 {
3596                   error ("no default argument for %qD", TREE_VALUE (parm));
3597                   /* For better subsequent error-recovery, we indicate that
3598                      there should have been a default argument.  */
3599                   TREE_PURPOSE (parm) = error_mark_node;
3600                   no_errors = false;
3601                 }
3602               else if (is_primary
3603                        && !is_partial
3604                        && !is_friend_decl
3605                        /* Don't complain about an enclosing partial
3606                           specialization.  */
3607                        && parm_level == parms
3608                        && TREE_CODE (decl) == TYPE_DECL
3609                        && i < ntparms - 1
3610                        && template_parameter_pack_p (TREE_VALUE (parm)))
3611                 {
3612                   /* A primary class template can only have one
3613                      parameter pack, at the end of the template
3614                      parameter list.  */
3615
3616                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3617                     error ("parameter pack %qE must be at the end of the"
3618                            " template parameter list", TREE_VALUE (parm));
3619                   else
3620                     error ("parameter pack %qT must be at the end of the"
3621                            " template parameter list", 
3622                            TREE_TYPE (TREE_VALUE (parm)));
3623
3624                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
3625                     = error_mark_node;
3626                   no_errors = false;
3627                 }
3628             }
3629         }
3630     }
3631
3632   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3633       || is_partial 
3634       || !is_primary
3635       || is_friend_decl)
3636     /* For an ordinary class template, default template arguments are
3637        allowed at the innermost level, e.g.:
3638          template <class T = int>
3639          struct S {};
3640        but, in a partial specialization, they're not allowed even
3641        there, as we have in [temp.class.spec]:
3642
3643          The template parameter list of a specialization shall not
3644          contain default template argument values.
3645
3646        So, for a partial specialization, or for a function template
3647        (in C++98/C++03), we look at all of them.  */
3648     ;
3649   else
3650     /* But, for a primary class template that is not a partial
3651        specialization we look at all template parameters except the
3652        innermost ones.  */
3653     parms = TREE_CHAIN (parms);
3654
3655   /* Figure out what error message to issue.  */
3656   if (is_friend_decl == 2)
3657     msg = "default template arguments may not be used in function template friend re-declaration";
3658   else if (is_friend_decl)
3659     msg = "default template arguments may not be used in function template friend declarations";
3660   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3661     msg = "default template arguments may not be used in function templates";
3662   else if (is_partial)
3663     msg = "default template arguments may not be used in partial specializations";
3664   else
3665     msg = "default argument for template parameter for class enclosing %qD";
3666
3667   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3668     /* If we're inside a class definition, there's no need to
3669        examine the parameters to the class itself.  On the one
3670        hand, they will be checked when the class is defined, and,
3671        on the other, default arguments are valid in things like:
3672          template <class T = double>
3673          struct S { template <class U> void f(U); };
3674        Here the default argument for `S' has no bearing on the
3675        declaration of `f'.  */
3676     last_level_to_check = template_class_depth (current_class_type) + 1;
3677   else
3678     /* Check everything.  */
3679     last_level_to_check = 0;
3680
3681   for (parm_level = parms;
3682        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3683        parm_level = TREE_CHAIN (parm_level))
3684     {
3685       tree inner_parms = TREE_VALUE (parm_level);
3686       int i;
3687       int ntparms;
3688
3689       ntparms = TREE_VEC_LENGTH (inner_parms);
3690       for (i = 0; i < ntparms; ++i)
3691         {
3692           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3693             continue;
3694
3695           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3696             {
3697               if (msg)
3698                 {
3699                   no_errors = false;
3700                   if (is_friend_decl == 2)
3701                     return no_errors;
3702
3703                   error (msg, decl);
3704                   msg = 0;
3705                 }
3706
3707               /* Clear out the default argument so that we are not
3708                  confused later.  */
3709               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3710             }
3711         }
3712
3713       /* At this point, if we're still interested in issuing messages,
3714          they must apply to classes surrounding the object declared.  */
3715       if (msg)
3716         msg = "default argument for template parameter for class enclosing %qD";
3717     }
3718
3719   return no_errors;
3720 }
3721
3722 /* Worker for push_template_decl_real, called via
3723    for_each_template_parm.  DATA is really an int, indicating the
3724    level of the parameters we are interested in.  If T is a template
3725    parameter of that level, return nonzero.  */
3726
3727 static int
3728 template_parm_this_level_p (tree t, void* data)
3729 {
3730   int this_level = *(int *)data;
3731   int level;
3732
3733   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3734     level = TEMPLATE_PARM_LEVEL (t);
3735   else
3736     level = TEMPLATE_TYPE_LEVEL (t);
3737   return level == this_level;
3738 }
3739
3740 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3741    parameters given by current_template_args, or reuses a
3742    previously existing one, if appropriate.  Returns the DECL, or an
3743    equivalent one, if it is replaced via a call to duplicate_decls.
3744
3745    If IS_FRIEND is true, DECL is a friend declaration.  */
3746
3747 tree
3748 push_template_decl_real (tree decl, bool is_friend)
3749 {
3750   tree tmpl;
3751   tree args;
3752   tree info;
3753   tree ctx;
3754   int primary;
3755   int is_partial;
3756   int new_template_p = 0;
3757   /* True if the template is a member template, in the sense of
3758      [temp.mem].  */
3759   bool member_template_p = false;
3760
3761   if (decl == error_mark_node || !current_template_parms)
3762     return error_mark_node;
3763
3764   /* See if this is a partial specialization.  */
3765   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3766                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3767                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3768
3769   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3770     is_friend = true;
3771
3772   if (is_friend)
3773     /* For a friend, we want the context of the friend function, not
3774        the type of which it is a friend.  */
3775     ctx = DECL_CONTEXT (decl);
3776   else if (CP_DECL_CONTEXT (decl)
3777            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3778     /* In the case of a virtual function, we want the class in which
3779        it is defined.  */
3780     ctx = CP_DECL_CONTEXT (decl);
3781   else
3782     /* Otherwise, if we're currently defining some class, the DECL
3783        is assumed to be a member of the class.  */
3784     ctx = current_scope ();
3785
3786   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3787     ctx = NULL_TREE;
3788
3789   if (!DECL_CONTEXT (decl))
3790     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3791
3792   /* See if this is a primary template.  */
3793   if (is_friend && ctx)
3794     /* A friend template that specifies a class context, i.e.
3795          template <typename T> friend void A<T>::f();
3796        is not primary.  */
3797     primary = 0;
3798   else
3799     primary = template_parm_scope_p ();
3800
3801   if (primary)
3802     {
3803       if (DECL_CLASS_SCOPE_P (decl))
3804         member_template_p = true;
3805       if (TREE_CODE (decl) == TYPE_DECL
3806           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3807         {
3808           error ("template class without a name");
3809           return error_mark_node;
3810         }
3811       else if (TREE_CODE (decl) == FUNCTION_DECL)
3812         {
3813           if (DECL_DESTRUCTOR_P (decl))
3814             {
3815               /* [temp.mem]
3816
3817                  A destructor shall not be a member template.  */
3818               error ("destructor %qD declared as member template", decl);
3819               return error_mark_node;
3820             }
3821           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3822               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3823                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3824                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3825                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3826                       == void_list_node)))
3827             {
3828               /* [basic.stc.dynamic.allocation]
3829
3830                  An allocation function can be a function
3831                  template. ... Template allocation functions shall
3832                  have two or more parameters.  */
3833               error ("invalid template declaration of %qD", decl);
3834               return error_mark_node;
3835             }
3836         }
3837       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3838                && CLASS_TYPE_P (TREE_TYPE (decl)))
3839         /* OK */;
3840       else
3841         {
3842           error ("template declaration of %q#D", decl);
3843           return error_mark_node;
3844         }
3845     }
3846
3847   /* Check to see that the rules regarding the use of default
3848      arguments are not being violated.  */
3849   check_default_tmpl_args (decl, current_template_parms,
3850                            primary, is_partial, /*is_friend_decl=*/0);
3851
3852   /* Ensure that there are no parameter packs in the type of this
3853      declaration that have not been expanded.  */
3854   if (TREE_CODE (decl) == FUNCTION_DECL)
3855     {
3856       /* Check each of the arguments individually to see if there are
3857          any bare parameter packs.  */
3858       tree type = TREE_TYPE (decl);
3859       tree arg = DECL_ARGUMENTS (decl);
3860       tree argtype = TYPE_ARG_TYPES (type);
3861
3862       while (arg && argtype)
3863         {
3864           if (!FUNCTION_PARAMETER_PACK_P (arg)
3865               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
3866             {
3867             /* This is a PARM_DECL that contains unexpanded parameter
3868                packs. We have already complained about this in the
3869                check_for_bare_parameter_packs call, so just replace
3870                these types with ERROR_MARK_NODE.  */
3871               TREE_TYPE (arg) = error_mark_node;
3872               TREE_VALUE (argtype) = error_mark_node;
3873             }
3874
3875           arg = TREE_CHAIN (arg);
3876           argtype = TREE_CHAIN (argtype);
3877         }
3878
3879       /* Check for bare parameter packs in the return type and the
3880          exception specifiers.  */
3881       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
3882         /* Errors were already issued, set return type to int
3883            as the frontend doesn't expect error_mark_node as
3884            the return type.  */
3885         TREE_TYPE (type) = integer_type_node;
3886       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
3887         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
3888     }
3889   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
3890     {
3891       TREE_TYPE (decl) = error_mark_node;
3892       return error_mark_node;
3893     }
3894
3895   if (is_partial)
3896     return process_partial_specialization (decl);
3897
3898   args = current_template_args ();
3899
3900   if (!ctx
3901       || TREE_CODE (ctx) == FUNCTION_DECL
3902       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3903       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3904     {
3905       if (DECL_LANG_SPECIFIC (decl)
3906           && DECL_TEMPLATE_INFO (decl)
3907           && DECL_TI_TEMPLATE (decl))
3908         tmpl = DECL_TI_TEMPLATE (decl);
3909       /* If DECL is a TYPE_DECL for a class-template, then there won't
3910          be DECL_LANG_SPECIFIC.  The information equivalent to
3911          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3912       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3913                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3914                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3915         {
3916           /* Since a template declaration already existed for this
3917              class-type, we must be redeclaring it here.  Make sure
3918              that the redeclaration is valid.  */
3919           redeclare_class_template (TREE_TYPE (decl),
3920                                     current_template_parms);
3921           /* We don't need to create a new TEMPLATE_DECL; just use the
3922              one we already had.  */
3923           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3924         }
3925       else
3926         {
3927           tmpl = build_template_decl (decl, current_template_parms,
3928                                       member_template_p);
3929           new_template_p = 1;
3930
3931           if (DECL_LANG_SPECIFIC (decl)
3932               && DECL_TEMPLATE_SPECIALIZATION (decl))
3933             {
3934               /* A specialization of a member template of a template
3935                  class.  */
3936               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3937               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3938               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3939             }
3940         }
3941     }
3942   else
3943     {
3944       tree a, t, current, parms;
3945       int i;
3946       tree tinfo = get_template_info (decl);
3947
3948       if (!tinfo)
3949         {
3950           error ("template definition of non-template %q#D", decl);
3951           return error_mark_node;
3952         }
3953
3954       tmpl = TI_TEMPLATE (tinfo);
3955
3956       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3957           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3958           && DECL_TEMPLATE_SPECIALIZATION (decl)
3959           && DECL_MEMBER_TEMPLATE_P (tmpl))
3960         {
3961           tree new_tmpl;
3962
3963           /* The declaration is a specialization of a member
3964              template, declared outside the class.  Therefore, the
3965              innermost template arguments will be NULL, so we
3966              replace them with the arguments determined by the
3967              earlier call to check_explicit_specialization.  */
3968           args = DECL_TI_ARGS (decl);
3969
3970           new_tmpl
3971             = build_template_decl (decl, current_template_parms,
3972                                    member_template_p);
3973           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3974           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3975           DECL_TI_TEMPLATE (decl) = new_tmpl;
3976           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3977           DECL_TEMPLATE_INFO (new_tmpl)
3978             = tree_cons (tmpl, args, NULL_TREE);
3979
3980           register_specialization (new_tmpl,
3981                                    most_general_template (tmpl),
3982                                    args,
3983                                    is_friend);
3984           return decl;
3985         }
3986
3987       /* Make sure the template headers we got make sense.  */
3988
3989       parms = DECL_TEMPLATE_PARMS (tmpl);
3990       i = TMPL_PARMS_DEPTH (parms);
3991       if (TMPL_ARGS_DEPTH (args) != i)
3992         {
3993           error ("expected %d levels of template parms for %q#D, got %d",
3994                  i, decl, TMPL_ARGS_DEPTH (args));
3995         }
3996       else
3997         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3998           {
3999             a = TMPL_ARGS_LEVEL (args, i);
4000             t = INNERMOST_TEMPLATE_PARMS (parms);
4001
4002             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4003               {
4004                 if (current == decl)
4005                   error ("got %d template parameters for %q#D",
4006                          TREE_VEC_LENGTH (a), decl);
4007                 else
4008                   error ("got %d template parameters for %q#T",
4009                          TREE_VEC_LENGTH (a), current);
4010                 error ("  but %d required", TREE_VEC_LENGTH (t));
4011                 return error_mark_node;
4012               }
4013
4014             if (current == decl)
4015               current = ctx;
4016             else
4017               current = (TYPE_P (current)
4018                          ? TYPE_CONTEXT (current)
4019                          : DECL_CONTEXT (current));
4020           }
4021
4022       /* Check that the parms are used in the appropriate qualifying scopes
4023          in the declarator.  */
4024       if (!comp_template_args
4025           (TI_ARGS (tinfo),
4026            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4027         {
4028           error ("\
4029 template arguments to %qD do not match original template %qD",
4030                  decl, DECL_TEMPLATE_RESULT (tmpl));
4031           if (!uses_template_parms (TI_ARGS (tinfo)))
4032             inform (input_location, "use template<> for an explicit specialization");
4033           /* Avoid crash in import_export_decl.  */
4034           DECL_INTERFACE_KNOWN (decl) = 1;
4035           return error_mark_node;
4036         }
4037     }
4038
4039   DECL_TEMPLATE_RESULT (tmpl) = decl;
4040   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4041
4042   /* Push template declarations for global functions and types.  Note
4043      that we do not try to push a global template friend declared in a
4044      template class; such a thing may well depend on the template
4045      parameters of the class.  */
4046   if (new_template_p && !ctx
4047       && !(is_friend && template_class_depth (current_class_type) > 0))
4048     {
4049       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4050       if (tmpl == error_mark_node)
4051         return error_mark_node;
4052
4053       /* Hide template friend classes that haven't been declared yet.  */
4054       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4055         {
4056           DECL_ANTICIPATED (tmpl) = 1;
4057           DECL_FRIEND_P (tmpl) = 1;
4058         }
4059     }
4060
4061   if (primary)
4062     {
4063       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4064       int i;
4065
4066       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4067       if (DECL_CONV_FN_P (tmpl))
4068         {
4069           int depth = TMPL_PARMS_DEPTH (parms);
4070
4071           /* It is a conversion operator. See if the type converted to
4072              depends on innermost template operands.  */
4073
4074           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4075                                          depth))
4076             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4077         }
4078
4079       /* Give template template parms a DECL_CONTEXT of the template
4080          for which they are a parameter.  */
4081       parms = INNERMOST_TEMPLATE_PARMS (parms);
4082       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4083         {
4084           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4085           if (TREE_CODE (parm) == TEMPLATE_DECL)
4086             DECL_CONTEXT (parm) = tmpl;
4087         }
4088     }
4089
4090   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4091      back to its most general template.  If TMPL is a specialization,
4092      ARGS may only have the innermost set of arguments.  Add the missing
4093      argument levels if necessary.  */
4094   if (DECL_TEMPLATE_INFO (tmpl))
4095     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4096
4097   info = tree_cons (tmpl, args, NULL_TREE);
4098
4099   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4100     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4101   else if (DECL_LANG_SPECIFIC (decl))
4102     DECL_TEMPLATE_INFO (decl) = info;
4103
4104   return DECL_TEMPLATE_RESULT (tmpl);
4105 }
4106
4107 tree
4108 push_template_decl (tree decl)
4109 {
4110   return push_template_decl_real (decl, false);
4111 }
4112
4113 /* Called when a class template TYPE is redeclared with the indicated
4114    template PARMS, e.g.:
4115
4116      template <class T> struct S;
4117      template <class T> struct S {};  */
4118
4119 bool
4120 redeclare_class_template (tree type, tree parms)
4121 {
4122   tree tmpl;
4123   tree tmpl_parms;
4124   int i;
4125
4126   if (!TYPE_TEMPLATE_INFO (type))
4127     {
4128       error ("%qT is not a template type", type);
4129       return false;
4130     }
4131
4132   tmpl = TYPE_TI_TEMPLATE (type);
4133   if (!PRIMARY_TEMPLATE_P (tmpl))
4134     /* The type is nested in some template class.  Nothing to worry
4135        about here; there are no new template parameters for the nested
4136        type.  */
4137     return true;
4138
4139   if (!parms)
4140     {
4141       error ("template specifiers not specified in declaration of %qD",
4142              tmpl);
4143       return false;
4144     }
4145
4146   parms = INNERMOST_TEMPLATE_PARMS (parms);
4147   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4148
4149   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4150     {
4151       error ("redeclared with %d template parameter(s)", 
4152              TREE_VEC_LENGTH (parms));
4153       inform (input_location, "previous declaration %q+D used %d template parameter(s)", 
4154              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4155       return false;
4156     }
4157
4158   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4159     {
4160       tree tmpl_parm;
4161       tree parm;
4162       tree tmpl_default;
4163       tree parm_default;
4164
4165       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4166           || TREE_VEC_ELT (parms, i) == error_mark_node)
4167         continue;
4168
4169       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4170       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4171       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4172       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4173
4174       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4175          TEMPLATE_DECL.  */
4176       if (tmpl_parm != error_mark_node
4177           && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4178               || (TREE_CODE (tmpl_parm) != TYPE_DECL
4179                   && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4180               || (TREE_CODE (tmpl_parm) != PARM_DECL
4181                   && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4182                       != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4183               || (TREE_CODE (tmpl_parm) == PARM_DECL
4184                   && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4185                       != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4186         {
4187           error ("template parameter %q+#D", tmpl_parm);
4188           error ("redeclared here as %q#D", parm);
4189           return false;
4190         }
4191
4192       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4193         {
4194           /* We have in [temp.param]:
4195
4196              A template-parameter may not be given default arguments
4197              by two different declarations in the same scope.  */
4198           error ("redefinition of default argument for %q#D", parm);
4199           inform (input_location, "%Joriginal definition appeared here", tmpl_parm);
4200           return false;
4201         }
4202
4203       if (parm_default != NULL_TREE)
4204         /* Update the previous template parameters (which are the ones
4205            that will really count) with the new default value.  */
4206         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4207       else if (tmpl_default != NULL_TREE)
4208         /* Update the new parameters, too; they'll be used as the
4209            parameters for any members.  */
4210         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4211     }
4212
4213     return true;
4214 }
4215
4216 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4217    (possibly simplified) expression.  */
4218
4219 tree
4220 fold_non_dependent_expr (tree expr)
4221 {
4222   if (expr == NULL_TREE)
4223     return NULL_TREE;
4224
4225   /* If we're in a template, but EXPR isn't value dependent, simplify
4226      it.  We're supposed to treat:
4227
4228        template <typename T> void f(T[1 + 1]);
4229        template <typename T> void f(T[2]);
4230
4231      as two declarations of the same function, for example.  */
4232   if (processing_template_decl
4233       && !type_dependent_expression_p (expr)
4234       && !value_dependent_expression_p (expr))
4235     {
4236       HOST_WIDE_INT saved_processing_template_decl;
4237
4238       saved_processing_template_decl = processing_template_decl;
4239       processing_template_decl = 0;
4240       expr = tsubst_copy_and_build (expr,
4241                                     /*args=*/NULL_TREE,
4242                                     tf_error,
4243                                     /*in_decl=*/NULL_TREE,
4244                                     /*function_p=*/false,
4245                                     /*integral_constant_expression_p=*/true);
4246       processing_template_decl = saved_processing_template_decl;
4247     }
4248   return expr;
4249 }
4250
4251 /* EXPR is an expression which is used in a constant-expression context.
4252    For instance, it could be a VAR_DECL with a constant initializer.
4253    Extract the innermost constant expression.
4254
4255    This is basically a more powerful version of
4256    integral_constant_value, which can be used also in templates where
4257    initializers can maintain a syntactic rather than semantic form
4258    (even if they are non-dependent, for access-checking purposes).  */
4259
4260 static tree
4261 fold_decl_constant_value (tree expr)
4262 {
4263   tree const_expr = expr;
4264   do
4265     {
4266       expr = fold_non_dependent_expr (const_expr);
4267       const_expr = integral_constant_value (expr);
4268     }
4269   while (expr != const_expr);
4270
4271   return expr;
4272 }
4273
4274 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4275    must be a function or a pointer-to-function type, as specified
4276    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4277    and check that the resulting function has external linkage.  */
4278
4279 static tree
4280 convert_nontype_argument_function (tree type, tree expr)
4281 {
4282   tree fns = expr;
4283   tree fn, fn_no_ptr;
4284
4285   fn = instantiate_type (type, fns, tf_none);
4286   if (fn == error_mark_node)
4287     return error_mark_node;
4288
4289   fn_no_ptr = fn;
4290   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4291     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4292   if (TREE_CODE (fn_no_ptr) == BASELINK)
4293     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4294  
4295   /* [temp.arg.nontype]/1
4296
4297      A template-argument for a non-type, non-template template-parameter
4298      shall be one of:
4299      [...]
4300      -- the address of an object or function with external linkage.  */
4301   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4302     {
4303       error ("%qE is not a valid template argument for type %qT "
4304              "because function %qD has not external linkage",
4305              expr, type, fn_no_ptr);
4306       return NULL_TREE;
4307     }
4308
4309   return fn;
4310 }
4311
4312 /* Attempt to convert the non-type template parameter EXPR to the
4313    indicated TYPE.  If the conversion is successful, return the
4314    converted value.  If the conversion is unsuccessful, return
4315    NULL_TREE if we issued an error message, or error_mark_node if we
4316    did not.  We issue error messages for out-and-out bad template
4317    parameters, but not simply because the conversion failed, since we
4318    might be just trying to do argument deduction.  Both TYPE and EXPR
4319    must be non-dependent.
4320
4321    The conversion follows the special rules described in
4322    [temp.arg.nontype], and it is much more strict than an implicit
4323    conversion.
4324
4325    This function is called twice for each template argument (see
4326    lookup_template_class for a more accurate description of this
4327    problem). This means that we need to handle expressions which
4328    are not valid in a C++ source, but can be created from the
4329    first call (for instance, casts to perform conversions). These
4330    hacks can go away after we fix the double coercion problem.  */
4331
4332 static tree
4333 convert_nontype_argument (tree type, tree expr)
4334 {
4335   tree expr_type;
4336
4337   /* Detect immediately string literals as invalid non-type argument.
4338      This special-case is not needed for correctness (we would easily
4339      catch this later), but only to provide better diagnostic for this
4340      common user mistake. As suggested by DR 100, we do not mention
4341      linkage issues in the diagnostic as this is not the point.  */
4342   if (TREE_CODE (expr) == STRING_CST)
4343     {
4344       error ("%qE is not a valid template argument for type %qT "
4345              "because string literals can never be used in this context",
4346              expr, type);
4347       return NULL_TREE;
4348     }
4349
4350   /* If we are in a template, EXPR may be non-dependent, but still
4351      have a syntactic, rather than semantic, form.  For example, EXPR
4352      might be a SCOPE_REF, rather than the VAR_DECL to which the
4353      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4354      so that access checking can be performed when the template is
4355      instantiated -- but here we need the resolved form so that we can
4356      convert the argument.  */
4357   expr = fold_non_dependent_expr (expr);
4358   if (error_operand_p (expr))
4359     return error_mark_node;
4360   expr_type = TREE_TYPE (expr);
4361
4362   /* HACK: Due to double coercion, we can get a
4363      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4364      which is the tree that we built on the first call (see
4365      below when coercing to reference to object or to reference to
4366      function). We just strip everything and get to the arg.
4367      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4368      for examples.  */
4369   if (TREE_CODE (expr) == NOP_EXPR)
4370     {
4371       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4372         {
4373           /* ??? Maybe we could use convert_from_reference here, but we
4374              would need to relax its constraints because the NOP_EXPR
4375              could actually change the type to something more cv-qualified,
4376              and this is not folded by convert_from_reference.  */
4377           tree addr = TREE_OPERAND (expr, 0);
4378           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4379           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4380           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4381           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4382                       (TREE_TYPE (expr_type),
4383                        TREE_TYPE (TREE_TYPE (addr))));
4384
4385           expr = TREE_OPERAND (addr, 0);
4386           expr_type = TREE_TYPE (expr);
4387         }
4388
4389       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4390          parameter is a pointer to object, through decay and
4391          qualification conversion. Let's strip everything.  */
4392       else if (TYPE_PTROBV_P (type))
4393         {
4394           STRIP_NOPS (expr);
4395           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4396           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4397           /* Skip the ADDR_EXPR only if it is part of the decay for
4398              an array. Otherwise, it is part of the original argument
4399              in the source code.  */
4400           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4401             expr = TREE_OPERAND (expr, 0);
4402           expr_type = TREE_TYPE (expr);
4403         }
4404     }
4405
4406   /* [temp.arg.nontype]/5, bullet 1
4407
4408      For a non-type template-parameter of integral or enumeration type,
4409      integral promotions (_conv.prom_) and integral conversions
4410      (_conv.integral_) are applied.  */
4411   if (INTEGRAL_TYPE_P (type))
4412     {
4413       if (!INTEGRAL_TYPE_P (expr_type))
4414         return error_mark_node;
4415
4416       expr = fold_decl_constant_value (expr);
4417       /* Notice that there are constant expressions like '4 % 0' which
4418          do not fold into integer constants.  */
4419       if (TREE_CODE (expr) != INTEGER_CST)
4420         {
4421           error ("%qE is not a valid template argument for type %qT "
4422                  "because it is a non-constant expression", expr, type);
4423           return NULL_TREE;
4424         }
4425
4426       /* At this point, an implicit conversion does what we want,
4427          because we already know that the expression is of integral
4428          type.  */
4429       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4430       if (expr == error_mark_node)
4431         return error_mark_node;
4432
4433       /* Conversion was allowed: fold it to a bare integer constant.  */
4434       expr = fold (expr);
4435     }
4436   /* [temp.arg.nontype]/5, bullet 2
4437
4438      For a non-type template-parameter of type pointer to object,
4439      qualification conversions (_conv.qual_) and the array-to-pointer
4440      conversion (_conv.array_) are applied.  */
4441   else if (TYPE_PTROBV_P (type))
4442     {
4443       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4444
4445          A template-argument for a non-type, non-template template-parameter
4446          shall be one of: [...]
4447
4448          -- the name of a non-type template-parameter;
4449          -- the address of an object or function with external linkage, [...]
4450             expressed as "& id-expression" where the & is optional if the name
4451             refers to a function or array, or if the corresponding
4452             template-parameter is a reference.
4453
4454         Here, we do not care about functions, as they are invalid anyway
4455         for a parameter of type pointer-to-object.  */
4456
4457       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4458         /* Non-type template parameters are OK.  */
4459         ;
4460       else if (TREE_CODE (expr) != ADDR_EXPR
4461                && TREE_CODE (expr_type) != ARRAY_TYPE)
4462         {
4463           if (TREE_CODE (expr) == VAR_DECL)
4464             {
4465               error ("%qD is not a valid template argument "
4466                      "because %qD is a variable, not the address of "
4467                      "a variable",
4468                      expr, expr);
4469               return NULL_TREE;
4470             }
4471           /* Other values, like integer constants, might be valid
4472              non-type arguments of some other type.  */
4473           return error_mark_node;
4474         }
4475       else
4476         {
4477           tree decl;
4478
4479           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4480                   ? TREE_OPERAND (expr, 0) : expr);
4481           if (TREE_CODE (decl) != VAR_DECL)
4482             {
4483               error ("%qE is not a valid template argument of type %qT "
4484                      "because %qE is not a variable",
4485                      expr, type, decl);
4486               return NULL_TREE;
4487             }
4488           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4489             {
4490               error ("%qE is not a valid template argument of type %qT "
4491                      "because %qD does not have external linkage",
4492                      expr, type, decl);
4493               return NULL_TREE;
4494             }
4495         }
4496
4497       expr = decay_conversion (expr);
4498       if (expr == error_mark_node)
4499         return error_mark_node;
4500
4501       expr = perform_qualification_conversions (type, expr);
4502       if (expr == error_mark_node)
4503         return error_mark_node;
4504     }
4505   /* [temp.arg.nontype]/5, bullet 3
4506
4507      For a non-type template-parameter of type reference to object, no
4508      conversions apply. The type referred to by the reference may be more
4509      cv-qualified than the (otherwise identical) type of the
4510      template-argument. The template-parameter is bound directly to the
4511      template-argument, which must be an lvalue.  */
4512   else if (TYPE_REF_OBJ_P (type))
4513     {
4514       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4515                                                       expr_type))
4516         return error_mark_node;
4517
4518       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4519         {
4520           error ("%qE is not a valid template argument for type %qT "
4521                  "because of conflicts in cv-qualification", expr, type);
4522           return NULL_TREE;
4523         }
4524
4525       if (!real_lvalue_p (expr))
4526         {
4527           error ("%qE is not a valid template argument for type %qT "
4528                  "because it is not an lvalue", expr, type);
4529           return NULL_TREE;
4530         }
4531
4532       /* [temp.arg.nontype]/1
4533
4534          A template-argument for a non-type, non-template template-parameter
4535          shall be one of: [...]
4536
4537          -- the address of an object or function with external linkage.  */
4538       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4539         {
4540           error ("%qE is not a valid template argument for type %qT "
4541                  "because object %qD has not external linkage",
4542                  expr, type, expr);
4543           return NULL_TREE;
4544         }
4545
4546       expr = build_nop (type, build_address (expr));
4547     }
4548   /* [temp.arg.nontype]/5, bullet 4
4549
4550      For a non-type template-parameter of type pointer to function, only
4551      the function-to-pointer conversion (_conv.func_) is applied. If the
4552      template-argument represents a set of overloaded functions (or a
4553      pointer to such), the matching function is selected from the set
4554      (_over.over_).  */
4555   else if (TYPE_PTRFN_P (type))
4556     {
4557       /* If the argument is a template-id, we might not have enough
4558          context information to decay the pointer.  */
4559       if (!type_unknown_p (expr_type))
4560         {
4561           expr = decay_conversion (expr);
4562           if (expr == error_mark_node)
4563             return error_mark_node;
4564         }
4565
4566       expr = convert_nontype_argument_function (type, expr);
4567       if (!expr || expr == error_mark_node)
4568         return expr;
4569     }
4570   /* [temp.arg.nontype]/5, bullet 5
4571
4572      For a non-type template-parameter of type reference to function, no
4573      conversions apply. If the template-argument represents a set of
4574      overloaded functions, the matching function is selected from the set
4575      (_over.over_).  */
4576   else if (TYPE_REFFN_P (type))
4577     {
4578       if (TREE_CODE (expr) == ADDR_EXPR)
4579         {
4580           error ("%qE is not a valid template argument for type %qT "
4581                  "because it is a pointer", expr, type);
4582           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
4583           return NULL_TREE;
4584         }
4585
4586       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4587       if (!expr || expr == error_mark_node)
4588         return expr;
4589
4590       expr = build_nop (type, build_address (expr));
4591     }
4592   /* [temp.arg.nontype]/5, bullet 6
4593
4594      For a non-type template-parameter of type pointer to member function,
4595      no conversions apply. If the template-argument represents a set of
4596      overloaded member functions, the matching member function is selected
4597      from the set (_over.over_).  */
4598   else if (TYPE_PTRMEMFUNC_P (type))
4599     {
4600       expr = instantiate_type (type, expr, tf_none);
4601       if (expr == error_mark_node)
4602         return error_mark_node;
4603
4604       /* There is no way to disable standard conversions in
4605          resolve_address_of_overloaded_function (called by
4606          instantiate_type). It is possible that the call succeeded by
4607          converting &B::I to &D::I (where B is a base of D), so we need
4608          to reject this conversion here.
4609
4610          Actually, even if there was a way to disable standard conversions,
4611          it would still be better to reject them here so that we can
4612          provide a superior diagnostic.  */
4613       if (!same_type_p (TREE_TYPE (expr), type))
4614         {
4615           /* Make sure we are just one standard conversion off.  */
4616           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4617           error ("%qE is not a valid template argument for type %qT "
4618                  "because it is of type %qT", expr, type,
4619                  TREE_TYPE (expr));
4620           inform (input_location, "standard conversions are not allowed in this context");
4621           return NULL_TREE;
4622         }
4623     }
4624   /* [temp.arg.nontype]/5, bullet 7
4625
4626      For a non-type template-parameter of type pointer to data member,
4627      qualification conversions (_conv.qual_) are applied.  */
4628   else if (TYPE_PTRMEM_P (type))
4629     {
4630       expr = perform_qualification_conversions (type, expr);
4631       if (expr == error_mark_node)
4632         return expr;
4633     }
4634   /* A template non-type parameter must be one of the above.  */
4635   else
4636     gcc_unreachable ();
4637
4638   /* Sanity check: did we actually convert the argument to the
4639      right type?  */
4640   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4641   return expr;
4642 }
4643
4644 /* Subroutine of coerce_template_template_parms, which returns 1 if
4645    PARM_PARM and ARG_PARM match using the rule for the template
4646    parameters of template template parameters. Both PARM and ARG are
4647    template parameters; the rest of the arguments are the same as for
4648    coerce_template_template_parms.
4649  */
4650 static int
4651 coerce_template_template_parm (tree parm,
4652                               tree arg,
4653                               tsubst_flags_t complain,
4654                               tree in_decl,
4655                               tree outer_args)
4656 {
4657   if (arg == NULL_TREE || arg == error_mark_node
4658       || parm == NULL_TREE || parm == error_mark_node)
4659     return 0;
4660   
4661   if (TREE_CODE (arg) != TREE_CODE (parm))
4662     return 0;
4663   
4664   switch (TREE_CODE (parm))
4665     {
4666     case TEMPLATE_DECL:
4667       /* We encounter instantiations of templates like
4668          template <template <template <class> class> class TT>
4669          class C;  */
4670       {
4671         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4672         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4673         
4674         if (!coerce_template_template_parms
4675             (parmparm, argparm, complain, in_decl, outer_args))
4676           return 0;
4677       }
4678       /* Fall through.  */
4679       
4680     case TYPE_DECL:
4681       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
4682           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4683         /* Argument is a parameter pack but parameter is not.  */
4684         return 0;
4685       break;
4686       
4687     case PARM_DECL:
4688       /* The tsubst call is used to handle cases such as
4689          
4690            template <int> class C {};
4691            template <class T, template <T> class TT> class D {};
4692            D<int, C> d;
4693
4694          i.e. the parameter list of TT depends on earlier parameters.  */
4695       if (!uses_template_parms (TREE_TYPE (arg))
4696           && !same_type_p
4697                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4698                  TREE_TYPE (arg)))
4699         return 0;
4700       
4701       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
4702           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4703         /* Argument is a parameter pack but parameter is not.  */
4704         return 0;
4705       
4706       break;
4707
4708     default:
4709       gcc_unreachable ();
4710     }
4711
4712   return 1;
4713 }
4714
4715
4716 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4717    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4718    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4719    or PARM_DECL.
4720
4721    Consider the example:
4722      template <class T> class A;
4723      template<template <class U> class TT> class B;
4724
4725    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4726    the parameters to A, and OUTER_ARGS contains A.  */
4727
4728 static int
4729 coerce_template_template_parms (tree parm_parms,
4730                                 tree arg_parms,
4731                                 tsubst_flags_t complain,
4732                                 tree in_decl,
4733                                 tree outer_args)
4734 {
4735   int nparms, nargs, i;
4736   tree parm, arg;
4737   int variadic_p = 0;
4738
4739   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4740   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4741
4742   nparms = TREE_VEC_LENGTH (parm_parms);
4743   nargs = TREE_VEC_LENGTH (arg_parms);
4744
4745   /* Determine whether we have a parameter pack at the end of the
4746      template template parameter's template parameter list.  */
4747   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
4748     {
4749       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
4750       
4751       switch (TREE_CODE (parm))
4752         {
4753         case TEMPLATE_DECL:
4754         case TYPE_DECL:
4755           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4756             variadic_p = 1;
4757           break;
4758           
4759         case PARM_DECL:
4760           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4761             variadic_p = 1;
4762           break;
4763           
4764         default:
4765           gcc_unreachable ();
4766         }
4767     }
4768  
4769   if (nargs != nparms
4770       && !(variadic_p && nargs >= nparms - 1))
4771     return 0;
4772
4773   /* Check all of the template parameters except the parameter pack at
4774      the end (if any).  */
4775   for (i = 0; i < nparms - variadic_p; ++i)
4776     {
4777       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4778           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4779         continue;
4780
4781       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4782       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4783
4784       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4785                                           outer_args))
4786         return 0;
4787
4788     }
4789
4790   if (variadic_p)
4791     {
4792       /* Check each of the template parameters in the template
4793          argument against the template parameter pack at the end of
4794          the template template parameter.  */
4795       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
4796         return 0;
4797
4798       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4799
4800       for (; i < nargs; ++i)
4801         {
4802           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4803             continue;
4804  
4805           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4806  
4807           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4808                                               outer_args))
4809             return 0;
4810         }
4811     }
4812
4813   return 1;
4814 }
4815
4816 /* Verifies that the deduced template arguments (in TARGS) for the
4817    template template parameters (in TPARMS) represent valid bindings,
4818    by comparing the template parameter list of each template argument
4819    to the template parameter list of its corresponding template
4820    template parameter, in accordance with DR150. This
4821    routine can only be called after all template arguments have been
4822    deduced. It will return TRUE if all of the template template
4823    parameter bindings are okay, FALSE otherwise.  */
4824 bool 
4825 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4826 {
4827   int i, ntparms = TREE_VEC_LENGTH (tparms);
4828   bool ret = true;
4829
4830   /* We're dealing with template parms in this process.  */
4831   ++processing_template_decl;
4832
4833   targs = INNERMOST_TEMPLATE_ARGS (targs);
4834
4835   for (i = 0; i < ntparms; ++i)
4836     {
4837       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4838       tree targ = TREE_VEC_ELT (targs, i);
4839
4840       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4841         {
4842           tree packed_args = NULL_TREE;
4843           int idx, len = 1;
4844
4845           if (ARGUMENT_PACK_P (targ))
4846             {
4847               /* Look inside the argument pack.  */
4848               packed_args = ARGUMENT_PACK_ARGS (targ);
4849               len = TREE_VEC_LENGTH (packed_args);
4850             }
4851
4852           for (idx = 0; idx < len; ++idx)
4853             {
4854               tree targ_parms = NULL_TREE;
4855
4856               if (packed_args)
4857                 /* Extract the next argument from the argument
4858                    pack.  */
4859                 targ = TREE_VEC_ELT (packed_args, idx);
4860
4861               if (PACK_EXPANSION_P (targ))
4862                 /* Look at the pattern of the pack expansion.  */
4863                 targ = PACK_EXPANSION_PATTERN (targ);
4864
4865               /* Extract the template parameters from the template
4866                  argument.  */
4867               if (TREE_CODE (targ) == TEMPLATE_DECL)
4868                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4869               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4870                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4871
4872               /* Verify that we can coerce the template template
4873                  parameters from the template argument to the template
4874                  parameter.  This requires an exact match.  */
4875               if (targ_parms
4876                   && !coerce_template_template_parms
4877                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4878                         targ_parms,
4879                         tf_none,
4880                         tparm,
4881                         targs))
4882                 {
4883                   ret = false;
4884                   goto out;
4885                 }
4886             }
4887         }
4888     }
4889
4890  out:
4891
4892   --processing_template_decl;
4893   return ret;
4894 }
4895
4896 /* Convert the indicated template ARG as necessary to match the
4897    indicated template PARM.  Returns the converted ARG, or
4898    error_mark_node if the conversion was unsuccessful.  Error and
4899    warning messages are issued under control of COMPLAIN.  This
4900    conversion is for the Ith parameter in the parameter list.  ARGS is
4901    the full set of template arguments deduced so far.  */
4902
4903 static tree
4904 convert_template_argument (tree parm,
4905                            tree arg,
4906                            tree args,
4907                            tsubst_flags_t complain,
4908                            int i,
4909                            tree in_decl)
4910 {
4911   tree orig_arg;
4912   tree val;
4913   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4914
4915   if (TREE_CODE (arg) == TREE_LIST
4916       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4917     {
4918       /* The template argument was the name of some
4919          member function.  That's usually
4920          invalid, but static members are OK.  In any
4921          case, grab the underlying fields/functions
4922          and issue an error later if required.  */
4923       orig_arg = TREE_VALUE (arg);
4924       TREE_TYPE (arg) = unknown_type_node;
4925     }
4926
4927   orig_arg = arg;
4928
4929   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4930   requires_type = (TREE_CODE (parm) == TYPE_DECL
4931                    || requires_tmpl_type);
4932
4933   /* When determining whether an argument pack expansion is a template,
4934      look at the pattern.  */
4935   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4936     arg = PACK_EXPANSION_PATTERN (arg);
4937
4938   is_tmpl_type = 
4939     ((TREE_CODE (arg) == TEMPLATE_DECL
4940       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4941      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4942      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4943
4944   if (is_tmpl_type
4945       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4946           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4947     arg = TYPE_STUB_DECL (arg);
4948
4949   is_type = TYPE_P (arg) || is_tmpl_type;
4950
4951   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4952       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4953     {
4954       permerror (input_location, "to refer to a type member of a template parameter, "
4955                  "use %<typename %E%>", orig_arg);
4956
4957       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4958                                      TREE_OPERAND (arg, 1),
4959                                      typename_type,
4960                                      complain & tf_error);
4961       arg = orig_arg;
4962       is_type = 1;
4963     }
4964   if (is_type != requires_type)
4965     {
4966       if (in_decl)
4967         {
4968           if (complain & tf_error)
4969             {
4970               error ("type/value mismatch at argument %d in template "
4971                      "parameter list for %qD",
4972                      i + 1, in_decl);
4973               if (is_type)
4974                 error ("  expected a constant of type %qT, got %qT",
4975                        TREE_TYPE (parm),
4976                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4977               else if (requires_tmpl_type)
4978                 error ("  expected a class template, got %qE", orig_arg);
4979               else
4980                 error ("  expected a type, got %qE", orig_arg);
4981             }
4982         }
4983       return error_mark_node;
4984     }
4985   if (is_tmpl_type ^ requires_tmpl_type)
4986     {
4987       if (in_decl && (complain & tf_error))
4988         {
4989           error ("type/value mismatch at argument %d in template "
4990                  "parameter list for %qD",
4991                  i + 1, in_decl);
4992           if (is_tmpl_type)
4993             error ("  expected a type, got %qT", DECL_NAME (arg));
4994           else
4995             error ("  expected a class template, got %qT", orig_arg);
4996         }
4997       return error_mark_node;
4998     }
4999
5000   if (is_type)
5001     {
5002       if (requires_tmpl_type)
5003         {
5004           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
5005             /* The number of argument required is not known yet.
5006                Just accept it for now.  */
5007             val = TREE_TYPE (arg);
5008           else
5009             {
5010               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5011               tree argparm;
5012
5013               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5014
5015               if (coerce_template_template_parms (parmparm, argparm,
5016                                                   complain, in_decl,
5017                                                   args))
5018                 {
5019                   val = orig_arg;
5020
5021                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5022                      TEMPLATE_DECL.  */
5023                   if (val != error_mark_node)
5024                     {
5025                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5026                         val = TREE_TYPE (val);
5027                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
5028                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
5029                         {
5030                           val = TREE_TYPE (arg);
5031                           val = make_pack_expansion (val);
5032                         }
5033                     }
5034                 }
5035               else
5036                 {
5037                   if (in_decl && (complain & tf_error))
5038                     {
5039                       error ("type/value mismatch at argument %d in "
5040                              "template parameter list for %qD",
5041                              i + 1, in_decl);
5042                       error ("  expected a template of type %qD, got %qD",
5043                              parm, orig_arg);
5044                     }
5045
5046                   val = error_mark_node;
5047                 }
5048             }
5049         }
5050       else
5051         val = orig_arg;
5052       /* We only form one instance of each template specialization.
5053          Therefore, if we use a non-canonical variant (i.e., a
5054          typedef), any future messages referring to the type will use
5055          the typedef, which is confusing if those future uses do not
5056          themselves also use the typedef.  */
5057       if (TYPE_P (val))
5058         val = canonical_type_variant (val);
5059     }
5060   else
5061     {
5062       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5063
5064       if (invalid_nontype_parm_type_p (t, complain))
5065         return error_mark_node;
5066
5067       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
5068         {
5069           if (same_type_p (t, TREE_TYPE (orig_arg)))
5070             val = orig_arg;
5071           else
5072             {
5073               /* Not sure if this is reachable, but it doesn't hurt
5074                  to be robust.  */
5075               error ("type mismatch in nontype parameter pack");
5076               val = error_mark_node;
5077             }
5078         }
5079       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5080         /* We used to call digest_init here.  However, digest_init
5081            will report errors, which we don't want when complain
5082            is zero.  More importantly, digest_init will try too
5083            hard to convert things: for example, `0' should not be
5084            converted to pointer type at this point according to
5085            the standard.  Accepting this is not merely an
5086            extension, since deciding whether or not these
5087            conversions can occur is part of determining which
5088            function template to call, or whether a given explicit
5089            argument specification is valid.  */
5090         val = convert_nontype_argument (t, orig_arg);
5091       else
5092         val = orig_arg;
5093
5094       if (val == NULL_TREE)
5095         val = error_mark_node;
5096       else if (val == error_mark_node && (complain & tf_error))
5097         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5098     }
5099
5100   return val;
5101 }
5102
5103 /* Coerces the remaining template arguments in INNER_ARGS (from
5104    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5105    Returns the coerced argument pack. PARM_IDX is the position of this
5106    parameter in the template parameter list. ARGS is the original
5107    template argument list.  */
5108 static tree
5109 coerce_template_parameter_pack (tree parms,
5110                                 int parm_idx,
5111                                 tree args,
5112                                 tree inner_args,
5113                                 int arg_idx,
5114                                 tree new_args,
5115                                 int* lost,
5116                                 tree in_decl,
5117                                 tsubst_flags_t complain)
5118 {
5119   tree parm = TREE_VEC_ELT (parms, parm_idx);
5120   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5121   tree packed_args;
5122   tree argument_pack;
5123   tree packed_types = NULL_TREE;
5124
5125   if (arg_idx > nargs)
5126     arg_idx = nargs;
5127
5128   packed_args = make_tree_vec (nargs - arg_idx);
5129
5130   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5131       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5132     {
5133       /* When the template parameter is a non-type template
5134          parameter pack whose type uses parameter packs, we need
5135          to look at each of the template arguments
5136          separately. Build a vector of the types for these
5137          non-type template parameters in PACKED_TYPES.  */
5138       tree expansion 
5139         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5140       packed_types = tsubst_pack_expansion (expansion, args,
5141                                             complain, in_decl);
5142
5143       if (packed_types == error_mark_node)
5144         return error_mark_node;
5145
5146       /* Check that we have the right number of arguments.  */
5147       if (arg_idx < nargs
5148           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5149           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5150         {
5151           int needed_parms 
5152             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5153           error ("wrong number of template arguments (%d, should be %d)",
5154                  nargs, needed_parms);
5155           return error_mark_node;
5156         }
5157
5158       /* If we aren't able to check the actual arguments now
5159          (because they haven't been expanded yet), we can at least
5160          verify that all of the types used for the non-type
5161          template parameter pack are, in fact, valid for non-type
5162          template parameters.  */
5163       if (arg_idx < nargs 
5164           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5165         {
5166           int j, len = TREE_VEC_LENGTH (packed_types);
5167           for (j = 0; j < len; ++j)
5168             {
5169               tree t = TREE_VEC_ELT (packed_types, j);
5170               if (invalid_nontype_parm_type_p (t, complain))
5171                 return error_mark_node;
5172             }
5173         }
5174     }
5175
5176   /* Convert the remaining arguments, which will be a part of the
5177      parameter pack "parm".  */
5178   for (; arg_idx < nargs; ++arg_idx)
5179     {
5180       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5181       tree actual_parm = TREE_VALUE (parm);
5182
5183       if (packed_types && !PACK_EXPANSION_P (arg))
5184         {
5185           /* When we have a vector of types (corresponding to the
5186              non-type template parameter pack that uses parameter
5187              packs in its type, as mention above), and the
5188              argument is not an expansion (which expands to a
5189              currently unknown number of arguments), clone the
5190              parm and give it the next type in PACKED_TYPES.  */
5191           actual_parm = copy_node (actual_parm);
5192           TREE_TYPE (actual_parm) = 
5193             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5194         }
5195
5196       if (arg != error_mark_node)
5197         arg = convert_template_argument (actual_parm, 
5198                                          arg, new_args, complain, parm_idx,
5199                                          in_decl);
5200       if (arg == error_mark_node)
5201         (*lost)++;
5202       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5203     }
5204
5205   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5206       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5207     argument_pack = make_node (TYPE_ARGUMENT_PACK);
5208   else
5209     {
5210       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5211       TREE_TYPE (argument_pack) 
5212         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5213       TREE_CONSTANT (argument_pack) = 1;
5214     }
5215
5216   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5217   return argument_pack;
5218 }
5219
5220 /* Convert all template arguments to their appropriate types, and
5221    return a vector containing the innermost resulting template
5222    arguments.  If any error occurs, return error_mark_node. Error and
5223    warning messages are issued under control of COMPLAIN.
5224
5225    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5226    for arguments not specified in ARGS.  Otherwise, if
5227    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5228    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5229    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5230    ARGS.  */
5231
5232 static tree
5233 coerce_template_parms (tree parms,
5234                        tree args,
5235                        tree in_decl,
5236                        tsubst_flags_t complain,
5237                        bool require_all_args,
5238                        bool use_default_args)
5239 {
5240   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5241   tree inner_args;
5242   tree new_args;
5243   tree new_inner_args;
5244   bool saved_skip_evaluation;
5245
5246   /* When used as a boolean value, indicates whether this is a
5247      variadic template parameter list. Since it's an int, we can also
5248      subtract it from nparms to get the number of non-variadic
5249      parameters.  */
5250   int variadic_p = 0;
5251
5252   nparms = TREE_VEC_LENGTH (parms);
5253
5254   /* Determine if there are any parameter packs.  */
5255   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5256     {
5257       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5258       if (template_parameter_pack_p (tparm))
5259         ++variadic_p;
5260     }
5261
5262   inner_args = INNERMOST_TEMPLATE_ARGS (args);
5263   /* If there are 0 or 1 parameter packs, we need to expand any argument
5264      packs so that we can deduce a parameter pack from some non-packed args
5265      followed by an argument pack, as in variadic85.C.  If there are more
5266      than that, we need to leave argument packs intact so the arguments are
5267      assigned to the right parameter packs.  This should only happen when
5268      dealing with a nested class inside a partial specialization of a class
5269      template, as in variadic92.C.  */
5270   if (variadic_p <= 1)
5271     inner_args = expand_template_argument_pack (inner_args);
5272
5273   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5274   if ((nargs > nparms && !variadic_p)
5275       || (nargs < nparms - variadic_p
5276           && require_all_args
5277           && (!use_default_args
5278               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5279                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5280     {
5281       if (complain & tf_error)
5282         {
5283           const char *or_more = "";
5284           if (variadic_p)
5285             {
5286               or_more = " or more";
5287               --nparms;
5288             }
5289
5290           error ("wrong number of template arguments (%d, should be %d%s)",
5291                  nargs, nparms, or_more);
5292
5293           if (in_decl)
5294             error ("provided for %q+D", in_decl);
5295         }
5296
5297       return error_mark_node;
5298     }
5299
5300   /* We need to evaluate the template arguments, even though this
5301      template-id may be nested within a "sizeof".  */
5302   saved_skip_evaluation = skip_evaluation;
5303   skip_evaluation = false;
5304   new_inner_args = make_tree_vec (nparms);
5305   new_args = add_outermost_template_args (args, new_inner_args);
5306   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5307     {
5308       tree arg;
5309       tree parm;
5310
5311       /* Get the Ith template parameter.  */
5312       parm = TREE_VEC_ELT (parms, parm_idx);
5313  
5314       if (parm == error_mark_node)
5315       {
5316         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5317         continue;
5318       }
5319
5320       /* Calculate the next argument.  */
5321       if (arg_idx < nargs)
5322         arg = TREE_VEC_ELT (inner_args, arg_idx);
5323       else
5324         arg = NULL_TREE;
5325
5326       if (template_parameter_pack_p (TREE_VALUE (parm))
5327           && !(arg && ARGUMENT_PACK_P (arg)))
5328         {
5329           /* All remaining arguments will be placed in the
5330              template parameter pack PARM.  */
5331           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5332                                                 inner_args, arg_idx,
5333                                                 new_args, &lost,
5334                                                 in_decl, complain);
5335
5336           /* Store this argument.  */
5337           if (arg == error_mark_node)
5338             lost++;
5339           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5340
5341           /* We are done with all of the arguments.  */
5342           arg_idx = nargs;
5343           
5344           continue;
5345         }
5346       else if (arg)
5347         {
5348           if (PACK_EXPANSION_P (arg))
5349             {
5350               if (complain & tf_error)
5351                 {
5352                   /* FIXME this restriction was removed by N2555; see
5353                      bug 35722.  */
5354                   /* If ARG is a pack expansion, but PARM is not a
5355                      template parameter pack (if it were, we would have
5356                      handled it above), we're trying to expand into a
5357                      fixed-length argument list.  */
5358                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5359                     sorry ("cannot expand %<%E%> into a fixed-length "
5360                            "argument list", arg);
5361                   else
5362                     sorry ("cannot expand %<%T%> into a fixed-length "
5363                            "argument list", arg);
5364                 }
5365               return error_mark_node;
5366             }
5367         }
5368       else if (require_all_args)
5369         /* There must be a default arg in this case.  */
5370         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5371                                    complain, in_decl);
5372       else
5373         break;
5374
5375       if (arg == error_mark_node)
5376         {
5377           if (complain & tf_error)
5378             error ("template argument %d is invalid", arg_idx + 1);
5379         }
5380       else if (!arg)
5381         /* This only occurs if there was an error in the template
5382            parameter list itself (which we would already have
5383            reported) that we are trying to recover from, e.g., a class
5384            template with a parameter list such as
5385            template<typename..., typename>.  */
5386         return error_mark_node;
5387       else
5388         arg = convert_template_argument (TREE_VALUE (parm),
5389                                          arg, new_args, complain, 
5390                                          parm_idx, in_decl);
5391
5392       if (arg == error_mark_node)
5393         lost++;
5394       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5395     }
5396   skip_evaluation = saved_skip_evaluation;
5397
5398   if (lost)
5399     return error_mark_node;
5400
5401   return new_inner_args;
5402 }
5403
5404 /* Returns 1 if template args OT and NT are equivalent.  */
5405
5406 static int
5407 template_args_equal (tree ot, tree nt)
5408 {
5409   if (nt == ot)
5410     return 1;
5411
5412   if (TREE_CODE (nt) == TREE_VEC)
5413     /* For member templates */
5414     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5415   else if (PACK_EXPANSION_P (ot))
5416     return PACK_EXPANSION_P (nt) 
5417       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5418                               PACK_EXPANSION_PATTERN (nt));
5419   else if (ARGUMENT_PACK_P (ot))
5420     {
5421       int i, len;
5422       tree opack, npack;
5423
5424       if (!ARGUMENT_PACK_P (nt))
5425         return 0;
5426
5427       opack = ARGUMENT_PACK_ARGS (ot);
5428       npack = ARGUMENT_PACK_ARGS (nt);
5429       len = TREE_VEC_LENGTH (opack);
5430       if (TREE_VEC_LENGTH (npack) != len)
5431         return 0;
5432       for (i = 0; i < len; ++i)
5433         if (!template_args_equal (TREE_VEC_ELT (opack, i),
5434                                   TREE_VEC_ELT (npack, i)))
5435           return 0;
5436       return 1;
5437     }
5438   else if (TYPE_P (nt))
5439     return TYPE_P (ot) && same_type_p (ot, nt);
5440   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5441     return 0;
5442   else
5443     return cp_tree_equal (ot, nt);
5444 }
5445
5446 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5447    of template arguments.  Returns 0 otherwise.  */
5448
5449 int
5450 comp_template_args (tree oldargs, tree newargs)
5451 {
5452   int i;
5453
5454   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5455     return 0;
5456
5457   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5458     {
5459       tree nt = TREE_VEC_ELT (newargs, i);
5460       tree ot = TREE_VEC_ELT (oldargs, i);
5461
5462       if (! template_args_equal (ot, nt))
5463         return 0;
5464     }
5465   return 1;
5466 }
5467
5468 static void
5469 add_pending_template (tree d)
5470 {
5471   tree ti = (TYPE_P (d)
5472              ? CLASSTYPE_TEMPLATE_INFO (d)
5473              : DECL_TEMPLATE_INFO (d));
5474   struct pending_template *pt;
5475   int level;
5476
5477   if (TI_PENDING_TEMPLATE_FLAG (ti))
5478     return;
5479
5480   /* We are called both from instantiate_decl, where we've already had a
5481      tinst_level pushed, and instantiate_template, where we haven't.
5482      Compensate.  */
5483   level = !current_tinst_level || current_tinst_level->decl != d;
5484
5485   if (level)
5486     push_tinst_level (d);
5487
5488   pt = GGC_NEW (struct pending_template);
5489   pt->next = NULL;
5490   pt->tinst = current_tinst_level;
5491   if (last_pending_template)
5492     last_pending_template->next = pt;
5493   else
5494     pending_templates = pt;
5495
5496   last_pending_template = pt;
5497
5498   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5499
5500   if (level)
5501     pop_tinst_level ();
5502 }
5503
5504
5505 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5506    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5507    documentation for TEMPLATE_ID_EXPR.  */
5508
5509 tree
5510 lookup_template_function (tree fns, tree arglist)
5511 {
5512   tree type;
5513
5514   if (fns == error_mark_node || arglist == error_mark_node)
5515     return error_mark_node;
5516
5517   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5518   gcc_assert (fns && (is_overloaded_fn (fns)
5519                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5520
5521   if (BASELINK_P (fns))
5522     {
5523       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5524                                          unknown_type_node,
5525                                          BASELINK_FUNCTIONS (fns),
5526                                          arglist);
5527       return fns;
5528     }
5529
5530   type = TREE_TYPE (fns);
5531   if (TREE_CODE (fns) == OVERLOAD || !type)
5532     type = unknown_type_node;
5533
5534   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5535 }
5536
5537 /* Within the scope of a template class S<T>, the name S gets bound
5538    (in build_self_reference) to a TYPE_DECL for the class, not a
5539    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5540    or one of its enclosing classes, and that type is a template,
5541    return the associated TEMPLATE_DECL.  Otherwise, the original
5542    DECL is returned.  */
5543
5544 tree
5545 maybe_get_template_decl_from_type_decl (tree decl)
5546 {
5547   return (decl != NULL_TREE
5548           && TREE_CODE (decl) == TYPE_DECL
5549           && DECL_ARTIFICIAL (decl)
5550           && CLASS_TYPE_P (TREE_TYPE (decl))
5551           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5552     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5553 }
5554
5555 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5556    parameters, find the desired type.
5557
5558    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5559
5560    IN_DECL, if non-NULL, is the template declaration we are trying to
5561    instantiate.
5562
5563    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5564    the class we are looking up.
5565
5566    Issue error and warning messages under control of COMPLAIN.
5567
5568    If the template class is really a local class in a template
5569    function, then the FUNCTION_CONTEXT is the function in which it is
5570    being instantiated.
5571
5572    ??? Note that this function is currently called *twice* for each
5573    template-id: the first time from the parser, while creating the
5574    incomplete type (finish_template_type), and the second type during the
5575    real instantiation (instantiate_template_class). This is surely something
5576    that we want to avoid. It also causes some problems with argument
5577    coercion (see convert_nontype_argument for more information on this).  */
5578
5579 tree
5580 lookup_template_class (tree d1,
5581                        tree arglist,
5582                        tree in_decl,
5583                        tree context,
5584                        int entering_scope,
5585                        tsubst_flags_t complain)
5586 {
5587   tree templ = NULL_TREE, parmlist;
5588   tree t;
5589
5590   timevar_push (TV_NAME_LOOKUP);
5591
5592   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5593     {
5594       tree value = innermost_non_namespace_value (d1);
5595       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5596         templ = value;
5597       else
5598         {
5599           if (context)
5600             push_decl_namespace (context);
5601           templ = lookup_name (d1);
5602           templ = maybe_get_template_decl_from_type_decl (templ);
5603           if (context)
5604             pop_decl_namespace ();
5605         }
5606       if (templ)
5607         context = DECL_CONTEXT (templ);
5608     }
5609   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
5610     {
5611       tree type = TREE_TYPE (d1);
5612
5613       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5614          an implicit typename for the second A.  Deal with it.  */
5615       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5616         type = TREE_TYPE (type);
5617
5618       if (CLASSTYPE_TEMPLATE_INFO (type))
5619         {
5620           templ = CLASSTYPE_TI_TEMPLATE (type);
5621           d1 = DECL_NAME (templ);
5622         }
5623     }
5624   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5625            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
5626     {
5627       templ = TYPE_TI_TEMPLATE (d1);
5628       d1 = DECL_NAME (templ);
5629     }
5630   else if (TREE_CODE (d1) == TEMPLATE_DECL
5631            && DECL_TEMPLATE_RESULT (d1)
5632            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5633     {
5634       templ = d1;
5635       d1 = DECL_NAME (templ);
5636       context = DECL_CONTEXT (templ);
5637     }
5638
5639   /* Issue an error message if we didn't find a template.  */
5640   if (! templ)
5641     {
5642       if (complain & tf_error)
5643         error ("%qT is not a template", d1);
5644       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5645     }
5646
5647   if (TREE_CODE (templ) != TEMPLATE_DECL
5648          /* Make sure it's a user visible template, if it was named by
5649             the user.  */
5650       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
5651           && !PRIMARY_TEMPLATE_P (templ)))
5652     {
5653       if (complain & tf_error)
5654         {
5655           error ("non-template type %qT used as a template", d1);
5656           if (in_decl)
5657             error ("for template declaration %q+D", in_decl);
5658         }
5659       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5660     }
5661
5662   complain &= ~tf_user;
5663
5664   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
5665     {
5666       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5667          template arguments */
5668
5669       tree parm;
5670       tree arglist2;
5671       tree outer;
5672
5673       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
5674
5675       /* Consider an example where a template template parameter declared as
5676
5677            template <class T, class U = std::allocator<T> > class TT
5678
5679          The template parameter level of T and U are one level larger than
5680          of TT.  To proper process the default argument of U, say when an
5681          instantiation `TT<int>' is seen, we need to build the full
5682          arguments containing {int} as the innermost level.  Outer levels,
5683          available when not appearing as default template argument, can be
5684          obtained from the arguments of the enclosing template.
5685
5686          Suppose that TT is later substituted with std::vector.  The above
5687          instantiation is `TT<int, std::allocator<T> >' with TT at
5688          level 1, and T at level 2, while the template arguments at level 1
5689          becomes {std::vector} and the inner level 2 is {int}.  */
5690
5691       outer = DECL_CONTEXT (templ);
5692       if (outer)
5693         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5694       else if (current_template_parms)
5695         /* This is an argument of the current template, so we haven't set
5696            DECL_CONTEXT yet.  */
5697         outer = current_template_args ();
5698
5699       if (outer)
5700         arglist = add_to_template_args (outer, arglist);
5701
5702       arglist2 = coerce_template_parms (parmlist, arglist, templ,
5703                                         complain,
5704                                         /*require_all_args=*/true,
5705                                         /*use_default_args=*/true);
5706       if (arglist2 == error_mark_node
5707           || (!uses_template_parms (arglist2)
5708               && check_instantiated_args (templ, arglist2, complain)))
5709         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5710
5711       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
5712       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5713     }
5714   else
5715     {
5716       tree template_type = TREE_TYPE (templ);
5717       tree gen_tmpl;
5718       tree type_decl;
5719       tree found = NULL_TREE;
5720       int arg_depth;
5721       int parm_depth;
5722       int is_partial_instantiation;
5723
5724       gen_tmpl = most_general_template (templ);
5725       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5726       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5727       arg_depth = TMPL_ARGS_DEPTH (arglist);
5728
5729       if (arg_depth == 1 && parm_depth > 1)
5730         {
5731           /* We've been given an incomplete set of template arguments.
5732              For example, given:
5733
5734                template <class T> struct S1 {
5735                  template <class U> struct S2 {};
5736                  template <class U> struct S2<U*> {};
5737                 };
5738
5739              we will be called with an ARGLIST of `U*', but the
5740              TEMPLATE will be `template <class T> template
5741              <class U> struct S1<T>::S2'.  We must fill in the missing
5742              arguments.  */
5743           arglist
5744             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
5745                                            arglist);
5746           arg_depth = TMPL_ARGS_DEPTH (arglist);
5747         }
5748
5749       /* Now we should have enough arguments.  */
5750       gcc_assert (parm_depth == arg_depth);
5751
5752       /* From here on, we're only interested in the most general
5753          template.  */
5754       templ = gen_tmpl;
5755
5756       /* Calculate the BOUND_ARGS.  These will be the args that are
5757          actually tsubst'd into the definition to create the
5758          instantiation.  */
5759       if (parm_depth > 1)
5760         {
5761           /* We have multiple levels of arguments to coerce, at once.  */
5762           int i;
5763           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5764
5765           tree bound_args = make_tree_vec (parm_depth);
5766
5767           for (i = saved_depth,
5768                  t = DECL_TEMPLATE_PARMS (templ);
5769                i > 0 && t != NULL_TREE;
5770                --i, t = TREE_CHAIN (t))
5771             {
5772               tree a = coerce_template_parms (TREE_VALUE (t),
5773                                               arglist, templ,
5774                                               complain,
5775                                               /*require_all_args=*/true,
5776                                               /*use_default_args=*/true);
5777
5778               /* Don't process further if one of the levels fails.  */
5779               if (a == error_mark_node)
5780                 {
5781                   /* Restore the ARGLIST to its full size.  */
5782                   TREE_VEC_LENGTH (arglist) = saved_depth;
5783                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5784                 }
5785
5786               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5787
5788               /* We temporarily reduce the length of the ARGLIST so
5789                  that coerce_template_parms will see only the arguments
5790                  corresponding to the template parameters it is
5791                  examining.  */
5792               TREE_VEC_LENGTH (arglist)--;
5793             }
5794
5795           /* Restore the ARGLIST to its full size.  */
5796           TREE_VEC_LENGTH (arglist) = saved_depth;
5797
5798           arglist = bound_args;
5799         }
5800       else
5801         arglist
5802           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5803                                    INNERMOST_TEMPLATE_ARGS (arglist),
5804                                    templ,
5805                                    complain,
5806                                    /*require_all_args=*/true,
5807                                    /*use_default_args=*/true);
5808
5809       if (arglist == error_mark_node)
5810         /* We were unable to bind the arguments.  */
5811         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5812
5813       /* In the scope of a template class, explicit references to the
5814          template class refer to the type of the template, not any
5815          instantiation of it.  For example, in:
5816
5817            template <class T> class C { void f(C<T>); }
5818
5819          the `C<T>' is just the same as `C'.  Outside of the
5820          class, however, such a reference is an instantiation.  */
5821       if (comp_template_args (TYPE_TI_ARGS (template_type),
5822                               arglist))
5823         {
5824           found = template_type;
5825
5826           if (!entering_scope && PRIMARY_TEMPLATE_P (templ))
5827             {
5828               tree ctx;
5829
5830               for (ctx = current_class_type;
5831                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5832                    ctx = (TYPE_P (ctx)
5833                           ? TYPE_CONTEXT (ctx)
5834                           : DECL_CONTEXT (ctx)))
5835                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5836                   goto found_ctx;
5837
5838               /* We're not in the scope of the class, so the
5839                  TEMPLATE_TYPE is not the type we want after all.  */
5840               found = NULL_TREE;
5841             found_ctx:;
5842             }
5843         }
5844       if (found)
5845         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5846
5847       /* If we already have this specialization, return it.  */
5848       found = retrieve_specialization (templ, arglist,
5849                                        /*class_specializations_p=*/false);
5850       if (found)
5851         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5852
5853       /* This type is a "partial instantiation" if any of the template
5854          arguments still involve template parameters.  Note that we set
5855          IS_PARTIAL_INSTANTIATION for partial specializations as
5856          well.  */
5857       is_partial_instantiation = uses_template_parms (arglist);
5858
5859       /* If the deduced arguments are invalid, then the binding
5860          failed.  */
5861       if (!is_partial_instantiation
5862           && check_instantiated_args (templ,
5863                                       INNERMOST_TEMPLATE_ARGS (arglist),
5864                                       complain))
5865         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5866
5867       if (!is_partial_instantiation
5868           && !PRIMARY_TEMPLATE_P (templ)
5869           && TREE_CODE (CP_DECL_CONTEXT (templ)) == NAMESPACE_DECL)
5870         {
5871           found = xref_tag_from_type (TREE_TYPE (templ),
5872                                       DECL_NAME (templ),
5873                                       /*tag_scope=*/ts_global);
5874           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5875         }
5876
5877       context = tsubst (DECL_CONTEXT (templ), arglist,
5878                         complain, in_decl);
5879       if (!context)
5880         context = global_namespace;
5881
5882       /* Create the type.  */
5883       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5884         {
5885           if (!is_partial_instantiation)
5886             {
5887               set_current_access_from_decl (TYPE_NAME (template_type));
5888               t = start_enum (TYPE_IDENTIFIER (template_type),
5889                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
5890                                       arglist, complain, in_decl),
5891                               SCOPED_ENUM_P (template_type));
5892             }
5893           else
5894             {
5895               /* We don't want to call start_enum for this type, since
5896                  the values for the enumeration constants may involve
5897                  template parameters.  And, no one should be interested
5898                  in the enumeration constants for such a type.  */
5899               t = make_node (ENUMERAL_TYPE);
5900               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
5901             }
5902         }
5903       else
5904         {
5905           t = make_class_type (TREE_CODE (template_type));
5906           CLASSTYPE_DECLARED_CLASS (t)
5907             = CLASSTYPE_DECLARED_CLASS (template_type);
5908           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5909           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5910
5911           /* A local class.  Make sure the decl gets registered properly.  */
5912           if (context == current_function_decl)
5913             pushtag (DECL_NAME (templ), t, /*tag_scope=*/ts_current);
5914
5915           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5916             /* This instantiation is another name for the primary
5917                template type. Set the TYPE_CANONICAL field
5918                appropriately. */
5919             TYPE_CANONICAL (t) = template_type;
5920           else if (any_template_arguments_need_structural_equality_p (arglist))
5921             /* Some of the template arguments require structural
5922                equality testing, so this template class requires
5923                structural equality testing. */
5924             SET_TYPE_STRUCTURAL_EQUALITY (t);
5925         }
5926
5927       /* If we called start_enum or pushtag above, this information
5928          will already be set up.  */
5929       if (!TYPE_NAME (t))
5930         {
5931           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5932
5933           type_decl = create_implicit_typedef (DECL_NAME (templ), t);
5934           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5935           TYPE_STUB_DECL (t) = type_decl;
5936           DECL_SOURCE_LOCATION (type_decl)
5937             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5938         }
5939       else
5940         type_decl = TYPE_NAME (t);
5941
5942       TREE_PRIVATE (type_decl)
5943         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5944       TREE_PROTECTED (type_decl)
5945         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5946       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5947         {
5948           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5949           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5950         }
5951
5952       /* Set up the template information.  We have to figure out which
5953          template is the immediate parent if this is a full
5954          instantiation.  */
5955       if (parm_depth == 1 || is_partial_instantiation
5956           || !PRIMARY_TEMPLATE_P (templ))
5957         /* This case is easy; there are no member templates involved.  */
5958         found = templ;
5959       else
5960         {
5961           /* This is a full instantiation of a member template.  Look
5962              for a partial instantiation of which this is an instance.  */
5963
5964           for (found = DECL_TEMPLATE_INSTANTIATIONS (templ);
5965                found; found = TREE_CHAIN (found))
5966             {
5967               int success;
5968               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5969
5970               /* We only want partial instantiations, here, not
5971                  specializations or full instantiations.  */
5972               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5973                   || !uses_template_parms (TREE_VALUE (found)))
5974                 continue;
5975
5976               /* Temporarily reduce by one the number of levels in the
5977                  ARGLIST and in FOUND so as to avoid comparing the
5978                  last set of arguments.  */
5979               TREE_VEC_LENGTH (arglist)--;
5980               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5981
5982               /* See if the arguments match.  If they do, then TMPL is
5983                  the partial instantiation we want.  */
5984               success = comp_template_args (TREE_PURPOSE (found), arglist);
5985
5986               /* Restore the argument vectors to their full size.  */
5987               TREE_VEC_LENGTH (arglist)++;
5988               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5989
5990               if (success)
5991                 {
5992                   found = tmpl;
5993                   break;
5994                 }
5995             }
5996
5997           if (!found)
5998             {
5999               /* There was no partial instantiation. This happens
6000                  where C<T> is a member template of A<T> and it's used
6001                  in something like
6002
6003                   template <typename T> struct B { A<T>::C<int> m; };
6004                   B<float>;
6005
6006                  Create the partial instantiation.
6007                */
6008               TREE_VEC_LENGTH (arglist)--;
6009               found = tsubst (templ, arglist, complain, NULL_TREE);
6010               TREE_VEC_LENGTH (arglist)++;
6011             }
6012         }
6013
6014       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
6015       DECL_TEMPLATE_INSTANTIATIONS (templ)
6016         = tree_cons (arglist, t,
6017                      DECL_TEMPLATE_INSTANTIATIONS (templ));
6018
6019       if (TREE_CODE (t) == ENUMERAL_TYPE
6020           && !is_partial_instantiation)
6021         /* Now that the type has been registered on the instantiations
6022            list, we set up the enumerators.  Because the enumeration
6023            constants may involve the enumeration type itself, we make
6024            sure to register the type first, and then create the
6025            constants.  That way, doing tsubst_expr for the enumeration
6026            constants won't result in recursive calls here; we'll find
6027            the instantiation and exit above.  */
6028         tsubst_enum (template_type, t, arglist);
6029
6030       if (is_partial_instantiation)
6031         /* If the type makes use of template parameters, the
6032            code that generates debugging information will crash.  */
6033         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
6034
6035       /* Possibly limit visibility based on template args.  */
6036       TREE_PUBLIC (type_decl) = 1;
6037       determine_visibility (type_decl);
6038
6039       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
6040     }
6041   timevar_pop (TV_NAME_LOOKUP);
6042 }
6043 \f
6044 struct pair_fn_data
6045 {
6046   tree_fn_t fn;
6047   void *data;
6048   /* True when we should also visit template parameters that occur in
6049      non-deduced contexts.  */
6050   bool include_nondeduced_p;
6051   struct pointer_set_t *visited;
6052 };
6053
6054 /* Called from for_each_template_parm via walk_tree.  */
6055
6056 static tree
6057 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6058 {
6059   tree t = *tp;
6060   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6061   tree_fn_t fn = pfd->fn;
6062   void *data = pfd->data;
6063
6064   if (TYPE_P (t)
6065       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6066       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6067                                  pfd->include_nondeduced_p))
6068     return error_mark_node;
6069
6070   switch (TREE_CODE (t))
6071     {
6072     case RECORD_TYPE:
6073       if (TYPE_PTRMEMFUNC_P (t))
6074         break;
6075       /* Fall through.  */
6076
6077     case UNION_TYPE:
6078     case ENUMERAL_TYPE:
6079       if (!TYPE_TEMPLATE_INFO (t))
6080         *walk_subtrees = 0;
6081       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
6082                                        fn, data, pfd->visited, 
6083                                        pfd->include_nondeduced_p))
6084         return error_mark_node;
6085       break;
6086
6087     case INTEGER_TYPE:
6088       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6089                                   fn, data, pfd->visited, 
6090                                   pfd->include_nondeduced_p)
6091           || for_each_template_parm (TYPE_MAX_VALUE (t),
6092                                      fn, data, pfd->visited,
6093                                      pfd->include_nondeduced_p))
6094         return error_mark_node;
6095       break;
6096
6097     case METHOD_TYPE:
6098       /* Since we're not going to walk subtrees, we have to do this
6099          explicitly here.  */
6100       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6101                                   pfd->visited, pfd->include_nondeduced_p))
6102         return error_mark_node;
6103       /* Fall through.  */
6104
6105     case FUNCTION_TYPE:
6106       /* Check the return type.  */
6107       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6108                                   pfd->include_nondeduced_p))
6109         return error_mark_node;
6110
6111       /* Check the parameter types.  Since default arguments are not
6112          instantiated until they are needed, the TYPE_ARG_TYPES may
6113          contain expressions that involve template parameters.  But,
6114          no-one should be looking at them yet.  And, once they're
6115          instantiated, they don't contain template parameters, so
6116          there's no point in looking at them then, either.  */
6117       {
6118         tree parm;
6119
6120         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6121           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6122                                       pfd->visited, pfd->include_nondeduced_p))
6123             return error_mark_node;
6124
6125         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6126            want walk_tree walking into them itself.  */
6127         *walk_subtrees = 0;
6128       }
6129       break;
6130
6131     case TYPEOF_TYPE:
6132       if (pfd->include_nondeduced_p
6133           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6134                                      pfd->visited, 
6135                                      pfd->include_nondeduced_p))
6136         return error_mark_node;
6137       break;
6138
6139     case FUNCTION_DECL:
6140     case VAR_DECL:
6141       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6142           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6143                                      pfd->visited, pfd->include_nondeduced_p))
6144         return error_mark_node;
6145       /* Fall through.  */
6146
6147     case PARM_DECL:
6148     case CONST_DECL:
6149       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6150           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6151                                      pfd->visited, pfd->include_nondeduced_p))
6152         return error_mark_node;
6153       if (DECL_CONTEXT (t)
6154           && pfd->include_nondeduced_p
6155           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6156                                      pfd->visited, pfd->include_nondeduced_p))
6157         return error_mark_node;
6158       break;
6159
6160     case BOUND_TEMPLATE_TEMPLATE_PARM:
6161       /* Record template parameters such as `T' inside `TT<T>'.  */
6162       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6163                                   pfd->include_nondeduced_p))
6164         return error_mark_node;
6165       /* Fall through.  */
6166
6167     case TEMPLATE_TEMPLATE_PARM:
6168     case TEMPLATE_TYPE_PARM:
6169     case TEMPLATE_PARM_INDEX:
6170       if (fn && (*fn)(t, data))
6171         return error_mark_node;
6172       else if (!fn)
6173         return error_mark_node;
6174       break;
6175
6176     case TEMPLATE_DECL:
6177       /* A template template parameter is encountered.  */
6178       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6179           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6180                                      pfd->include_nondeduced_p))
6181         return error_mark_node;
6182
6183       /* Already substituted template template parameter */
6184       *walk_subtrees = 0;
6185       break;
6186
6187     case TYPENAME_TYPE:
6188       if (!fn
6189           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6190                                      data, pfd->visited, 
6191                                      pfd->include_nondeduced_p))
6192         return error_mark_node;
6193       break;
6194
6195     case CONSTRUCTOR:
6196       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6197           && pfd->include_nondeduced_p
6198           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6199                                      (TREE_TYPE (t)), fn, data,
6200                                      pfd->visited, pfd->include_nondeduced_p))
6201         return error_mark_node;
6202       break;
6203
6204     case INDIRECT_REF:
6205     case COMPONENT_REF:
6206       /* If there's no type, then this thing must be some expression
6207          involving template parameters.  */
6208       if (!fn && !TREE_TYPE (t))
6209         return error_mark_node;
6210       break;
6211
6212     case MODOP_EXPR:
6213     case CAST_EXPR:
6214     case REINTERPRET_CAST_EXPR:
6215     case CONST_CAST_EXPR:
6216     case STATIC_CAST_EXPR:
6217     case DYNAMIC_CAST_EXPR:
6218     case ARROW_EXPR:
6219     case DOTSTAR_EXPR:
6220     case TYPEID_EXPR:
6221     case PSEUDO_DTOR_EXPR:
6222       if (!fn)
6223         return error_mark_node;
6224       break;
6225
6226     default:
6227       break;
6228     }
6229
6230   /* We didn't find any template parameters we liked.  */
6231   return NULL_TREE;
6232 }
6233
6234 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6235    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6236    call FN with the parameter and the DATA.
6237    If FN returns nonzero, the iteration is terminated, and
6238    for_each_template_parm returns 1.  Otherwise, the iteration
6239    continues.  If FN never returns a nonzero value, the value
6240    returned by for_each_template_parm is 0.  If FN is NULL, it is
6241    considered to be the function which always returns 1.
6242
6243    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6244    parameters that occur in non-deduced contexts.  When false, only
6245    visits those template parameters that can be deduced.  */
6246
6247 static int
6248 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6249                         struct pointer_set_t *visited,
6250                         bool include_nondeduced_p)
6251 {
6252   struct pair_fn_data pfd;
6253   int result;
6254
6255   /* Set up.  */
6256   pfd.fn = fn;
6257   pfd.data = data;
6258   pfd.include_nondeduced_p = include_nondeduced_p;
6259
6260   /* Walk the tree.  (Conceptually, we would like to walk without
6261      duplicates, but for_each_template_parm_r recursively calls
6262      for_each_template_parm, so we would need to reorganize a fair
6263      bit to use walk_tree_without_duplicates, so we keep our own
6264      visited list.)  */
6265   if (visited)
6266     pfd.visited = visited;
6267   else
6268     pfd.visited = pointer_set_create ();
6269   result = cp_walk_tree (&t,
6270                          for_each_template_parm_r,
6271                          &pfd,
6272                          pfd.visited) != NULL_TREE;
6273
6274   /* Clean up.  */
6275   if (!visited)
6276     {
6277       pointer_set_destroy (pfd.visited);
6278       pfd.visited = 0;
6279     }
6280
6281   return result;
6282 }
6283
6284 /* Returns true if T depends on any template parameter.  */
6285
6286 int
6287 uses_template_parms (tree t)
6288 {
6289   bool dependent_p;
6290   int saved_processing_template_decl;
6291
6292   saved_processing_template_decl = processing_template_decl;
6293   if (!saved_processing_template_decl)
6294     processing_template_decl = 1;
6295   if (TYPE_P (t))
6296     dependent_p = dependent_type_p (t);
6297   else if (TREE_CODE (t) == TREE_VEC)
6298     dependent_p = any_dependent_template_arguments_p (t);
6299   else if (TREE_CODE (t) == TREE_LIST)
6300     dependent_p = (uses_template_parms (TREE_VALUE (t))
6301                    || uses_template_parms (TREE_CHAIN (t)));
6302   else if (TREE_CODE (t) == TYPE_DECL)
6303     dependent_p = dependent_type_p (TREE_TYPE (t));
6304   else if (DECL_P (t)
6305            || EXPR_P (t)
6306            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6307            || TREE_CODE (t) == OVERLOAD
6308            || TREE_CODE (t) == BASELINK
6309            || TREE_CODE (t) == IDENTIFIER_NODE
6310            || TREE_CODE (t) == TRAIT_EXPR
6311            || CONSTANT_CLASS_P (t))
6312     dependent_p = (type_dependent_expression_p (t)
6313                    || value_dependent_expression_p (t));
6314   else
6315     {
6316       gcc_assert (t == error_mark_node);
6317       dependent_p = false;
6318     }
6319
6320   processing_template_decl = saved_processing_template_decl;
6321
6322   return dependent_p;
6323 }
6324
6325 /* Returns true if T depends on any template parameter with level LEVEL.  */
6326
6327 int
6328 uses_template_parms_level (tree t, int level)
6329 {
6330   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6331                                  /*include_nondeduced_p=*/true);
6332 }
6333
6334 static int tinst_depth;
6335 extern int max_tinst_depth;
6336 #ifdef GATHER_STATISTICS
6337 int depth_reached;
6338 #endif
6339 static int tinst_level_tick;
6340 static int last_template_error_tick;
6341
6342 /* We're starting to instantiate D; record the template instantiation context
6343    for diagnostics and to restore it later.  */
6344
6345 static int
6346 push_tinst_level (tree d)
6347 {
6348   struct tinst_level *new_level;
6349
6350   if (tinst_depth >= max_tinst_depth)
6351     {
6352       /* If the instantiation in question still has unbound template parms,
6353          we don't really care if we can't instantiate it, so just return.
6354          This happens with base instantiation for implicit `typename'.  */
6355       if (uses_template_parms (d))
6356         return 0;
6357
6358       last_template_error_tick = tinst_level_tick;
6359       error ("template instantiation depth exceeds maximum of %d (use "
6360              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6361              max_tinst_depth, d);
6362
6363       print_instantiation_context ();
6364
6365       return 0;
6366     }
6367
6368   new_level = GGC_NEW (struct tinst_level);
6369   new_level->decl = d;
6370   new_level->locus = input_location;
6371   new_level->in_system_header_p = in_system_header;
6372   new_level->next = current_tinst_level;
6373   current_tinst_level = new_level;
6374
6375   ++tinst_depth;
6376 #ifdef GATHER_STATISTICS
6377   if (tinst_depth > depth_reached)
6378     depth_reached = tinst_depth;
6379 #endif
6380
6381   ++tinst_level_tick;
6382   return 1;
6383 }
6384
6385 /* We're done instantiating this template; return to the instantiation
6386    context.  */
6387
6388 static void
6389 pop_tinst_level (void)
6390 {
6391   /* Restore the filename and line number stashed away when we started
6392      this instantiation.  */
6393   input_location = current_tinst_level->locus;
6394   current_tinst_level = current_tinst_level->next;
6395   --tinst_depth;
6396   ++tinst_level_tick;
6397 }
6398
6399 /* We're instantiating a deferred template; restore the template
6400    instantiation context in which the instantiation was requested, which
6401    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6402
6403 static tree
6404 reopen_tinst_level (struct tinst_level *level)
6405 {
6406   struct tinst_level *t;
6407
6408   tinst_depth = 0;
6409   for (t = level; t; t = t->next)
6410     ++tinst_depth;
6411
6412   current_tinst_level = level;
6413   pop_tinst_level ();
6414   return level->decl;
6415 }
6416
6417 /* Returns the TINST_LEVEL which gives the original instantiation
6418    context.  */
6419
6420 struct tinst_level *
6421 outermost_tinst_level (void)
6422 {
6423   struct tinst_level *level = current_tinst_level;
6424   if (level)
6425     while (level->next)
6426       level = level->next;
6427   return level;
6428 }
6429
6430 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
6431
6432 bool
6433 parameter_of_template_p (tree parm, tree templ)
6434 {
6435   tree parms;
6436   int i;
6437
6438   if (!parm || !templ)
6439     return false;
6440
6441   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
6442   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
6443
6444   parms = DECL_TEMPLATE_PARMS (templ);
6445   parms = INNERMOST_TEMPLATE_PARMS (parms);
6446
6447   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
6448     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
6449       return true;
6450
6451   return false;
6452 }
6453
6454 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6455    vector of template arguments, as for tsubst.
6456
6457    Returns an appropriate tsubst'd friend declaration.  */
6458
6459 static tree
6460 tsubst_friend_function (tree decl, tree args)
6461 {
6462   tree new_friend;
6463
6464   if (TREE_CODE (decl) == FUNCTION_DECL
6465       && DECL_TEMPLATE_INSTANTIATION (decl)
6466       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6467     /* This was a friend declared with an explicit template
6468        argument list, e.g.:
6469
6470        friend void f<>(T);
6471
6472        to indicate that f was a template instantiation, not a new
6473        function declaration.  Now, we have to figure out what
6474        instantiation of what template.  */
6475     {
6476       tree template_id, arglist, fns;
6477       tree new_args;
6478       tree tmpl;
6479       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6480
6481       /* Friend functions are looked up in the containing namespace scope.
6482          We must enter that scope, to avoid finding member functions of the
6483          current class with same name.  */
6484       push_nested_namespace (ns);
6485       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6486                          tf_warning_or_error, NULL_TREE,
6487                          /*integral_constant_expression_p=*/false);
6488       pop_nested_namespace (ns);
6489       arglist = tsubst (DECL_TI_ARGS (decl), args,
6490                         tf_warning_or_error, NULL_TREE);
6491       template_id = lookup_template_function (fns, arglist);
6492
6493       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6494       tmpl = determine_specialization (template_id, new_friend,
6495                                        &new_args,
6496                                        /*need_member_template=*/0,
6497                                        TREE_VEC_LENGTH (args),
6498                                        tsk_none);
6499       return instantiate_template (tmpl, new_args, tf_error);
6500     }
6501
6502   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6503
6504   /* The NEW_FRIEND will look like an instantiation, to the
6505      compiler, but is not an instantiation from the point of view of
6506      the language.  For example, we might have had:
6507
6508      template <class T> struct S {
6509        template <class U> friend void f(T, U);
6510      };
6511
6512      Then, in S<int>, template <class U> void f(int, U) is not an
6513      instantiation of anything.  */
6514   if (new_friend == error_mark_node)
6515     return error_mark_node;
6516
6517   DECL_USE_TEMPLATE (new_friend) = 0;
6518   if (TREE_CODE (decl) == TEMPLATE_DECL)
6519     {
6520       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6521       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6522         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6523     }
6524
6525   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6526      is not a template instantiation and should not be mangled like
6527      one.  Therefore, we forget the mangling here; we'll recompute it
6528      later if we need it.  */
6529   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6530     {
6531       SET_DECL_RTL (new_friend, NULL_RTX);
6532       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6533     }
6534
6535   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6536     {
6537       tree old_decl;
6538       tree new_friend_template_info;
6539       tree new_friend_result_template_info;
6540       tree ns;
6541       int  new_friend_is_defn;
6542
6543       /* We must save some information from NEW_FRIEND before calling
6544          duplicate decls since that function will free NEW_FRIEND if
6545          possible.  */
6546       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6547       new_friend_is_defn =
6548             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6549                            (template_for_substitution (new_friend)))
6550              != NULL_TREE);
6551       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6552         {
6553           /* This declaration is a `primary' template.  */
6554           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6555
6556           new_friend_result_template_info
6557             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6558         }
6559       else
6560         new_friend_result_template_info = NULL_TREE;
6561
6562       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6563       if (new_friend_is_defn)
6564         DECL_INITIAL (new_friend) = error_mark_node;
6565
6566       /* Inside pushdecl_namespace_level, we will push into the
6567          current namespace. However, the friend function should go
6568          into the namespace of the template.  */
6569       ns = decl_namespace_context (new_friend);
6570       push_nested_namespace (ns);
6571       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6572       pop_nested_namespace (ns);
6573
6574       if (old_decl == error_mark_node)
6575         return error_mark_node;
6576
6577       if (old_decl != new_friend)
6578         {
6579           /* This new friend declaration matched an existing
6580              declaration.  For example, given:
6581
6582                template <class T> void f(T);
6583                template <class U> class C {
6584                  template <class T> friend void f(T) {}
6585                };
6586
6587              the friend declaration actually provides the definition
6588              of `f', once C has been instantiated for some type.  So,
6589              old_decl will be the out-of-class template declaration,
6590              while new_friend is the in-class definition.
6591
6592              But, if `f' was called before this point, the
6593              instantiation of `f' will have DECL_TI_ARGS corresponding
6594              to `T' but not to `U', references to which might appear
6595              in the definition of `f'.  Previously, the most general
6596              template for an instantiation of `f' was the out-of-class
6597              version; now it is the in-class version.  Therefore, we
6598              run through all specialization of `f', adding to their
6599              DECL_TI_ARGS appropriately.  In particular, they need a
6600              new set of outer arguments, corresponding to the
6601              arguments for this class instantiation.
6602
6603              The same situation can arise with something like this:
6604
6605                friend void f(int);
6606                template <class T> class C {
6607                  friend void f(T) {}
6608                };
6609
6610              when `C<int>' is instantiated.  Now, `f(int)' is defined
6611              in the class.  */
6612
6613           if (!new_friend_is_defn)
6614             /* On the other hand, if the in-class declaration does
6615                *not* provide a definition, then we don't want to alter
6616                existing definitions.  We can just leave everything
6617                alone.  */
6618             ;
6619           else
6620             {
6621               /* Overwrite whatever template info was there before, if
6622                  any, with the new template information pertaining to
6623                  the declaration.  */
6624               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6625
6626               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6627                 reregister_specialization (new_friend,
6628                                            most_general_template (old_decl),
6629                                            old_decl);
6630               else
6631                 {
6632                   tree t;
6633                   tree new_friend_args;
6634
6635                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6636                     = new_friend_result_template_info;
6637
6638                   new_friend_args = TI_ARGS (new_friend_template_info);
6639                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6640                        t != NULL_TREE;
6641                        t = TREE_CHAIN (t))
6642                     {
6643                       tree spec = TREE_VALUE (t);
6644
6645                       DECL_TI_ARGS (spec)
6646                         = add_outermost_template_args (new_friend_args,
6647                                                        DECL_TI_ARGS (spec));
6648                     }
6649
6650                   /* Now, since specializations are always supposed to
6651                      hang off of the most general template, we must move
6652                      them.  */
6653                   t = most_general_template (old_decl);
6654                   if (t != old_decl)
6655                     {
6656                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6657                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6658                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6659                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6660                     }
6661                 }
6662             }
6663
6664           /* The information from NEW_FRIEND has been merged into OLD_DECL
6665              by duplicate_decls.  */
6666           new_friend = old_decl;
6667         }
6668     }
6669   else
6670     {
6671       tree context = DECL_CONTEXT (new_friend);
6672       bool dependent_p;
6673
6674       /* In the code
6675            template <class T> class C {
6676              template <class U> friend void C1<U>::f (); // case 1
6677              friend void C2<T>::f ();                    // case 2
6678            };
6679          we only need to make sure CONTEXT is a complete type for
6680          case 2.  To distinguish between the two cases, we note that
6681          CONTEXT of case 1 remains dependent type after tsubst while
6682          this isn't true for case 2.  */
6683       ++processing_template_decl;
6684       dependent_p = dependent_type_p (context);
6685       --processing_template_decl;
6686
6687       if (!dependent_p
6688           && !complete_type_or_else (context, NULL_TREE))
6689         return error_mark_node;
6690
6691       if (COMPLETE_TYPE_P (context))
6692         {
6693           /* Check to see that the declaration is really present, and,
6694              possibly obtain an improved declaration.  */
6695           tree fn = check_classfn (context,
6696                                    new_friend, NULL_TREE);
6697
6698           if (fn)
6699             new_friend = fn;
6700         }
6701     }
6702
6703   return new_friend;
6704 }
6705
6706 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6707    template arguments, as for tsubst.
6708
6709    Returns an appropriate tsubst'd friend type or error_mark_node on
6710    failure.  */
6711
6712 static tree
6713 tsubst_friend_class (tree friend_tmpl, tree args)
6714 {
6715   tree friend_type;
6716   tree tmpl;
6717   tree context;
6718
6719   context = DECL_CONTEXT (friend_tmpl);
6720
6721   if (context)
6722     {
6723       if (TREE_CODE (context) == NAMESPACE_DECL)
6724         push_nested_namespace (context);
6725       else
6726         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6727     }
6728
6729   /* Look for a class template declaration.  We look for hidden names
6730      because two friend declarations of the same template are the
6731      same.  For example, in:
6732
6733        struct A { 
6734          template <typename> friend class F;
6735        };
6736        template <typename> struct B { 
6737          template <typename> friend class F;
6738        };
6739
6740      both F templates are the same.  */
6741   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6742                            /*block_p=*/true, 0, 
6743                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6744
6745   /* But, if we don't find one, it might be because we're in a
6746      situation like this:
6747
6748        template <class T>
6749        struct S {
6750          template <class U>
6751          friend struct S;
6752        };
6753
6754      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6755      for `S<int>', not the TEMPLATE_DECL.  */
6756   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6757     {
6758       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6759       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6760     }
6761
6762   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6763     {
6764       /* The friend template has already been declared.  Just
6765          check to see that the declarations match, and install any new
6766          default parameters.  We must tsubst the default parameters,
6767          of course.  We only need the innermost template parameters
6768          because that is all that redeclare_class_template will look
6769          at.  */
6770       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6771           > TMPL_ARGS_DEPTH (args))
6772         {
6773           tree parms;
6774           location_t saved_input_location;
6775           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6776                                          args, tf_warning_or_error);
6777
6778           saved_input_location = input_location;
6779           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6780           redeclare_class_template (TREE_TYPE (tmpl), parms);
6781           input_location = saved_input_location;
6782           
6783         }
6784
6785       friend_type = TREE_TYPE (tmpl);
6786     }
6787   else
6788     {
6789       /* The friend template has not already been declared.  In this
6790          case, the instantiation of the template class will cause the
6791          injection of this template into the global scope.  */
6792       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6793       if (tmpl == error_mark_node)
6794         return error_mark_node;
6795
6796       /* The new TMPL is not an instantiation of anything, so we
6797          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6798          the new type because that is supposed to be the corresponding
6799          template decl, i.e., TMPL.  */
6800       DECL_USE_TEMPLATE (tmpl) = 0;
6801       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6802       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6803       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6804         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6805
6806       /* Inject this template into the global scope.  */
6807       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6808     }
6809
6810   if (context)
6811     {
6812       if (TREE_CODE (context) == NAMESPACE_DECL)
6813         pop_nested_namespace (context);
6814       else
6815         pop_nested_class ();
6816     }
6817
6818   return friend_type;
6819 }
6820
6821 /* Returns zero if TYPE cannot be completed later due to circularity.
6822    Otherwise returns one.  */
6823
6824 static int
6825 can_complete_type_without_circularity (tree type)
6826 {
6827   if (type == NULL_TREE || type == error_mark_node)
6828     return 0;
6829   else if (COMPLETE_TYPE_P (type))
6830     return 1;
6831   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6832     return can_complete_type_without_circularity (TREE_TYPE (type));
6833   else if (CLASS_TYPE_P (type)
6834            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6835     return 0;
6836   else
6837     return 1;
6838 }
6839
6840 /* Apply any attributes which had to be deferred until instantiation
6841    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6842    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6843
6844 static void
6845 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6846                                 tree args, tsubst_flags_t complain, tree in_decl)
6847 {
6848   tree last_dep = NULL_TREE;
6849   tree t;
6850   tree *p;
6851
6852   for (t = attributes; t; t = TREE_CHAIN (t))
6853     if (ATTR_IS_DEPENDENT (t))
6854       {
6855         last_dep = t;
6856         attributes = copy_list (attributes);
6857         break;
6858       }
6859
6860   if (DECL_P (*decl_p))
6861     {
6862       if (TREE_TYPE (*decl_p) == error_mark_node)
6863         return;
6864       p = &DECL_ATTRIBUTES (*decl_p);
6865     }
6866   else
6867     p = &TYPE_ATTRIBUTES (*decl_p);
6868
6869   if (last_dep)
6870     {
6871       tree late_attrs = NULL_TREE;
6872       tree *q = &late_attrs;
6873
6874       for (*p = attributes; *p; )
6875         {
6876           t = *p;
6877           if (ATTR_IS_DEPENDENT (t))
6878             {
6879               *p = TREE_CHAIN (t);
6880               TREE_CHAIN (t) = NULL_TREE;
6881               /* If the first attribute argument is an identifier, don't
6882                  pass it through tsubst.  Attributes like mode, format,
6883                  cleanup and several target specific attributes expect it
6884                  unmodified.  */
6885               if (TREE_VALUE (t)
6886                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
6887                   && TREE_VALUE (TREE_VALUE (t))
6888                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
6889                       == IDENTIFIER_NODE))
6890                 {
6891                   tree chain
6892                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
6893                                    in_decl,
6894                                    /*integral_constant_expression_p=*/false);
6895                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
6896                     TREE_VALUE (t)
6897                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
6898                                    chain);
6899                 }
6900               else
6901                 TREE_VALUE (t)
6902                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6903                                  /*integral_constant_expression_p=*/false);
6904               *q = t;
6905               q = &TREE_CHAIN (t);
6906             }
6907           else
6908             p = &TREE_CHAIN (t);
6909         }
6910
6911       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6912     }
6913 }
6914
6915 tree
6916 instantiate_class_template (tree type)
6917 {
6918   tree templ, args, pattern, t, member;
6919   tree typedecl;
6920   tree pbinfo;
6921   tree base_list;
6922
6923   if (type == error_mark_node)
6924     return error_mark_node;
6925
6926   if (TYPE_BEING_DEFINED (type)
6927       || COMPLETE_TYPE_P (type)
6928       || dependent_type_p (type))
6929     return type;
6930
6931   /* Figure out which template is being instantiated.  */
6932   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6933   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
6934
6935   /* Determine what specialization of the original template to
6936      instantiate.  */
6937   t = most_specialized_class (type, templ);
6938   if (t == error_mark_node)
6939     {
6940       TYPE_BEING_DEFINED (type) = 1;
6941       return error_mark_node;
6942     }
6943   else if (t)
6944     {
6945       /* This TYPE is actually an instantiation of a partial
6946          specialization.  We replace the innermost set of ARGS with
6947          the arguments appropriate for substitution.  For example,
6948          given:
6949
6950            template <class T> struct S {};
6951            template <class T> struct S<T*> {};
6952
6953          and supposing that we are instantiating S<int*>, ARGS will
6954          presently be {int*} -- but we need {int}.  */
6955       pattern = TREE_TYPE (t);
6956       args = TREE_PURPOSE (t);
6957     }
6958   else
6959     {
6960       pattern = TREE_TYPE (templ);
6961       args = CLASSTYPE_TI_ARGS (type);
6962     }
6963
6964   /* If the template we're instantiating is incomplete, then clearly
6965      there's nothing we can do.  */
6966   if (!COMPLETE_TYPE_P (pattern))
6967     return type;
6968
6969   /* If we've recursively instantiated too many templates, stop.  */
6970   if (! push_tinst_level (type))
6971     return type;
6972
6973   /* Now we're really doing the instantiation.  Mark the type as in
6974      the process of being defined.  */
6975   TYPE_BEING_DEFINED (type) = 1;
6976
6977   /* We may be in the middle of deferred access check.  Disable
6978      it now.  */
6979   push_deferring_access_checks (dk_no_deferred);
6980
6981   push_to_top_level ();
6982
6983   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6984
6985   /* Set the input location to the template definition. This is needed
6986      if tsubsting causes an error.  */
6987   typedecl = TYPE_MAIN_DECL (type);
6988   input_location = DECL_SOURCE_LOCATION (typedecl);
6989
6990   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
6991   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6992   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6993   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6994   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6995   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6996   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6997   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6998   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6999   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
7000   TYPE_PACKED (type) = TYPE_PACKED (pattern);
7001   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
7002   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
7003   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
7004   if (ANON_AGGR_TYPE_P (pattern))
7005     SET_ANON_AGGR_TYPE_P (type);
7006   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
7007     {
7008       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
7009       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
7010     }
7011
7012   pbinfo = TYPE_BINFO (pattern);
7013
7014   /* We should never instantiate a nested class before its enclosing
7015      class; we need to look up the nested class by name before we can
7016      instantiate it, and that lookup should instantiate the enclosing
7017      class.  */
7018   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
7019               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
7020               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
7021
7022   base_list = NULL_TREE;
7023   if (BINFO_N_BASE_BINFOS (pbinfo))
7024     {
7025       tree pbase_binfo;
7026       tree context = TYPE_CONTEXT (type);
7027       tree pushed_scope;
7028       int i;
7029
7030       /* We must enter the scope containing the type, as that is where
7031          the accessibility of types named in dependent bases are
7032          looked up from.  */
7033       pushed_scope = push_scope (context ? context : global_namespace);
7034
7035       /* Substitute into each of the bases to determine the actual
7036          basetypes.  */
7037       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
7038         {
7039           tree base;
7040           tree access = BINFO_BASE_ACCESS (pbinfo, i);
7041           tree expanded_bases = NULL_TREE;
7042           int idx, len = 1;
7043
7044           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
7045             {
7046               expanded_bases = 
7047                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
7048                                        args, tf_error, NULL_TREE);
7049               if (expanded_bases == error_mark_node)
7050                 continue;
7051
7052               len = TREE_VEC_LENGTH (expanded_bases);
7053             }
7054
7055           for (idx = 0; idx < len; idx++)
7056             {
7057               if (expanded_bases)
7058                 /* Extract the already-expanded base class.  */
7059                 base = TREE_VEC_ELT (expanded_bases, idx);
7060               else
7061                 /* Substitute to figure out the base class.  */
7062                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
7063                                NULL_TREE);
7064
7065               if (base == error_mark_node)
7066                 continue;
7067
7068               base_list = tree_cons (access, base, base_list);
7069               if (BINFO_VIRTUAL_P (pbase_binfo))
7070                 TREE_TYPE (base_list) = integer_type_node;
7071             }
7072         }
7073
7074       /* The list is now in reverse order; correct that.  */
7075       base_list = nreverse (base_list);
7076
7077       if (pushed_scope)
7078         pop_scope (pushed_scope);
7079     }
7080   /* Now call xref_basetypes to set up all the base-class
7081      information.  */
7082   xref_basetypes (type, base_list);
7083
7084   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7085                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7086                                   args, tf_error, NULL_TREE);
7087
7088   /* Now that our base classes are set up, enter the scope of the
7089      class, so that name lookups into base classes, etc. will work
7090      correctly.  This is precisely analogous to what we do in
7091      begin_class_definition when defining an ordinary non-template
7092      class, except we also need to push the enclosing classes.  */
7093   push_nested_class (type);
7094
7095   /* Now members are processed in the order of declaration.  */
7096   for (member = CLASSTYPE_DECL_LIST (pattern);
7097        member; member = TREE_CHAIN (member))
7098     {
7099       tree t = TREE_VALUE (member);
7100
7101       if (TREE_PURPOSE (member))
7102         {
7103           if (TYPE_P (t))
7104             {
7105               /* Build new CLASSTYPE_NESTED_UTDS.  */
7106
7107               tree newtag;
7108               bool class_template_p;
7109
7110               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7111                                   && TYPE_LANG_SPECIFIC (t)
7112                                   && CLASSTYPE_IS_TEMPLATE (t));
7113               /* If the member is a class template, then -- even after
7114                  substitution -- there may be dependent types in the
7115                  template argument list for the class.  We increment
7116                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7117                  that function will assume that no types are dependent
7118                  when outside of a template.  */
7119               if (class_template_p)
7120                 ++processing_template_decl;
7121               newtag = tsubst (t, args, tf_error, NULL_TREE);
7122               if (class_template_p)
7123                 --processing_template_decl;
7124               if (newtag == error_mark_node)
7125                 continue;
7126
7127               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7128                 {
7129                   tree name = TYPE_IDENTIFIER (t);
7130
7131                   if (class_template_p)
7132                     /* Unfortunately, lookup_template_class sets
7133                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7134                        instantiation (i.e., for the type of a member
7135                        template class nested within a template class.)
7136                        This behavior is required for
7137                        maybe_process_partial_specialization to work
7138                        correctly, but is not accurate in this case;
7139                        the TAG is not an instantiation of anything.
7140                        (The corresponding TEMPLATE_DECL is an
7141                        instantiation, but the TYPE is not.) */
7142                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7143
7144                   /* Now, we call pushtag to put this NEWTAG into the scope of
7145                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7146                      pushtag calling push_template_decl.  We don't have to do
7147                      this for enums because it will already have been done in
7148                      tsubst_enum.  */
7149                   if (name)
7150                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7151                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7152                 }
7153             }
7154           else if (TREE_CODE (t) == FUNCTION_DECL
7155                    || DECL_FUNCTION_TEMPLATE_P (t))
7156             {
7157               /* Build new TYPE_METHODS.  */
7158               tree r;
7159
7160               if (TREE_CODE (t) == TEMPLATE_DECL)
7161                 ++processing_template_decl;
7162               r = tsubst (t, args, tf_error, NULL_TREE);
7163               if (TREE_CODE (t) == TEMPLATE_DECL)
7164                 --processing_template_decl;
7165               set_current_access_from_decl (r);
7166               finish_member_declaration (r);
7167             }
7168           else
7169             {
7170               /* Build new TYPE_FIELDS.  */
7171               if (TREE_CODE (t) == STATIC_ASSERT)
7172                 {
7173                   tree condition = 
7174                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7175                                  tf_warning_or_error, NULL_TREE,
7176                                  /*integral_constant_expression_p=*/true);
7177                   finish_static_assert (condition,
7178                                         STATIC_ASSERT_MESSAGE (t), 
7179                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7180                                         /*member_p=*/true);
7181                 }
7182               else if (TREE_CODE (t) != CONST_DECL)
7183                 {
7184                   tree r;
7185
7186                   /* The file and line for this declaration, to
7187                      assist in error message reporting.  Since we
7188                      called push_tinst_level above, we don't need to
7189                      restore these.  */
7190                   input_location = DECL_SOURCE_LOCATION (t);
7191
7192                   if (TREE_CODE (t) == TEMPLATE_DECL)
7193                     ++processing_template_decl;
7194                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7195                   if (TREE_CODE (t) == TEMPLATE_DECL)
7196                     --processing_template_decl;
7197                   if (TREE_CODE (r) == VAR_DECL)
7198                     {
7199                       /* In [temp.inst]:
7200
7201                            [t]he initialization (and any associated
7202                            side-effects) of a static data member does
7203                            not occur unless the static data member is
7204                            itself used in a way that requires the
7205                            definition of the static data member to
7206                            exist.
7207
7208                          Therefore, we do not substitute into the
7209                          initialized for the static data member here.  */
7210                       finish_static_data_member_decl
7211                         (r,
7212                          /*init=*/NULL_TREE,
7213                          /*init_const_expr_p=*/false,
7214                          /*asmspec_tree=*/NULL_TREE,
7215                          /*flags=*/0);
7216                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7217                         check_static_variable_definition (r, TREE_TYPE (r));
7218                     }
7219                   else if (TREE_CODE (r) == FIELD_DECL)
7220                     {
7221                       /* Determine whether R has a valid type and can be
7222                          completed later.  If R is invalid, then it is
7223                          replaced by error_mark_node so that it will not be
7224                          added to TYPE_FIELDS.  */
7225                       tree rtype = TREE_TYPE (r);
7226                       if (can_complete_type_without_circularity (rtype))
7227                         complete_type (rtype);
7228
7229                       if (!COMPLETE_TYPE_P (rtype))
7230                         {
7231                           cxx_incomplete_type_error (r, rtype);
7232                           r = error_mark_node;
7233                         }
7234                     }
7235
7236                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7237                      such a thing will already have been added to the field
7238                      list by tsubst_enum in finish_member_declaration in the
7239                      CLASSTYPE_NESTED_UTDS case above.  */
7240                   if (!(TREE_CODE (r) == TYPE_DECL
7241                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7242                         && DECL_ARTIFICIAL (r)))
7243                     {
7244                       set_current_access_from_decl (r);
7245                       finish_member_declaration (r);
7246                     }
7247                 }
7248             }
7249         }
7250       else
7251         {
7252           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7253             {
7254               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7255
7256               tree friend_type = t;
7257               bool adjust_processing_template_decl = false;
7258
7259               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7260                 {
7261                   /* template <class T> friend class C;  */
7262                   friend_type = tsubst_friend_class (friend_type, args);
7263                   adjust_processing_template_decl = true;
7264                 }
7265               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7266                 {
7267                   /* template <class T> friend class C::D;  */
7268                   friend_type = tsubst (friend_type, args,
7269                                         tf_warning_or_error, NULL_TREE);
7270                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7271                     friend_type = TREE_TYPE (friend_type);
7272                   adjust_processing_template_decl = true;
7273                 }
7274               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7275                 {
7276                   /* This could be either
7277
7278                        friend class T::C;
7279
7280                      when dependent_type_p is false or
7281
7282                        template <class U> friend class T::C;
7283
7284                      otherwise.  */
7285                   friend_type = tsubst (friend_type, args,
7286                                         tf_warning_or_error, NULL_TREE);
7287                   /* Bump processing_template_decl for correct
7288                      dependent_type_p calculation.  */
7289                   ++processing_template_decl;
7290                   if (dependent_type_p (friend_type))
7291                     adjust_processing_template_decl = true;
7292                   --processing_template_decl;
7293                 }
7294               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7295                        && hidden_name_p (TYPE_NAME (friend_type)))
7296                 {
7297                   /* friend class C;
7298
7299                      where C hasn't been declared yet.  Let's lookup name
7300                      from namespace scope directly, bypassing any name that
7301                      come from dependent base class.  */
7302                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7303
7304                   /* The call to xref_tag_from_type does injection for friend
7305                      classes.  */
7306                   push_nested_namespace (ns);
7307                   friend_type =
7308                     xref_tag_from_type (friend_type, NULL_TREE,
7309                                         /*tag_scope=*/ts_current);
7310                   pop_nested_namespace (ns);
7311                 }
7312               else if (uses_template_parms (friend_type))
7313                 /* friend class C<T>;  */
7314                 friend_type = tsubst (friend_type, args,
7315                                       tf_warning_or_error, NULL_TREE);
7316               /* Otherwise it's
7317
7318                    friend class C;
7319
7320                  where C is already declared or
7321
7322                    friend class C<int>;
7323
7324                  We don't have to do anything in these cases.  */
7325
7326               if (adjust_processing_template_decl)
7327                 /* Trick make_friend_class into realizing that the friend
7328                    we're adding is a template, not an ordinary class.  It's
7329                    important that we use make_friend_class since it will
7330                    perform some error-checking and output cross-reference
7331                    information.  */
7332                 ++processing_template_decl;
7333
7334               if (friend_type != error_mark_node)
7335                 make_friend_class (type, friend_type, /*complain=*/false);
7336
7337               if (adjust_processing_template_decl)
7338                 --processing_template_decl;
7339             }
7340           else
7341             {
7342               /* Build new DECL_FRIENDLIST.  */
7343               tree r;
7344
7345               /* The file and line for this declaration, to
7346                  assist in error message reporting.  Since we
7347                  called push_tinst_level above, we don't need to
7348                  restore these.  */
7349               input_location = DECL_SOURCE_LOCATION (t);
7350
7351               if (TREE_CODE (t) == TEMPLATE_DECL)
7352                 {
7353                   ++processing_template_decl;
7354                   push_deferring_access_checks (dk_no_check);
7355                 }
7356
7357               r = tsubst_friend_function (t, args);
7358               add_friend (type, r, /*complain=*/false);
7359               if (TREE_CODE (t) == TEMPLATE_DECL)
7360                 {
7361                   pop_deferring_access_checks ();
7362                   --processing_template_decl;
7363                 }
7364             }
7365         }
7366     }
7367
7368   /* Set the file and line number information to whatever is given for
7369      the class itself.  This puts error messages involving generated
7370      implicit functions at a predictable point, and the same point
7371      that would be used for non-template classes.  */
7372   input_location = DECL_SOURCE_LOCATION (typedecl);
7373
7374   unreverse_member_declarations (type);
7375   finish_struct_1 (type);
7376   TYPE_BEING_DEFINED (type) = 0;
7377
7378   /* Now that the class is complete, instantiate default arguments for
7379      any member functions.  We don't do this earlier because the
7380      default arguments may reference members of the class.  */
7381   if (!PRIMARY_TEMPLATE_P (templ))
7382     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7383       if (TREE_CODE (t) == FUNCTION_DECL
7384           /* Implicitly generated member functions will not have template
7385              information; they are not instantiations, but instead are
7386              created "fresh" for each instantiation.  */
7387           && DECL_TEMPLATE_INFO (t))
7388         tsubst_default_arguments (t);
7389
7390   pop_nested_class ();
7391   pop_from_top_level ();
7392   pop_deferring_access_checks ();
7393   pop_tinst_level ();
7394
7395   /* The vtable for a template class can be emitted in any translation
7396      unit in which the class is instantiated.  When there is no key
7397      method, however, finish_struct_1 will already have added TYPE to
7398      the keyed_classes list.  */
7399   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7400     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7401
7402   return type;
7403 }
7404
7405 static tree
7406 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7407 {
7408   tree r;
7409
7410   if (!t)
7411     r = t;
7412   else if (TYPE_P (t))
7413     r = tsubst (t, args, complain, in_decl);
7414   else
7415     {
7416       r = tsubst_expr (t, args, complain, in_decl,
7417                        /*integral_constant_expression_p=*/true);
7418       r = fold_non_dependent_expr (r);
7419     }
7420   return r;
7421 }
7422
7423 /* Substitute ARGS into T, which is an pack expansion
7424    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7425    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7426    (if only a partial substitution could be performed) or
7427    ERROR_MARK_NODE if there was an error.  */
7428 tree
7429 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7430                        tree in_decl)
7431 {
7432   tree pattern;
7433   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7434   tree first_arg_pack; int i, len = -1;
7435   tree result;
7436   int incomplete = 0;
7437
7438   gcc_assert (PACK_EXPANSION_P (t));
7439   pattern = PACK_EXPANSION_PATTERN (t);
7440
7441   /* Determine the argument packs that will instantiate the parameter
7442      packs used in the expansion expression. While we're at it,
7443      compute the number of arguments to be expanded and make sure it
7444      is consistent.  */
7445   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7446        pack = TREE_CHAIN (pack))
7447     {
7448       tree parm_pack = TREE_VALUE (pack);
7449       tree arg_pack = NULL_TREE;
7450       tree orig_arg = NULL_TREE;
7451
7452       if (TREE_CODE (parm_pack) == PARM_DECL)
7453         arg_pack = retrieve_local_specialization (parm_pack);
7454       else
7455         {
7456           int level, idx, levels;
7457           template_parm_level_and_index (parm_pack, &level, &idx);
7458
7459           levels = TMPL_ARGS_DEPTH (args);
7460           if (level <= levels)
7461             arg_pack = TMPL_ARG (args, level, idx);
7462         }
7463
7464       orig_arg = arg_pack;
7465       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7466         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7467       
7468       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7469         /* This can only happen if we forget to expand an argument
7470            pack somewhere else. Just return an error, silently.  */
7471         {
7472           result = make_tree_vec (1);
7473           TREE_VEC_ELT (result, 0) = error_mark_node;
7474           return result;
7475         }
7476
7477       if (arg_pack
7478           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7479           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7480         {
7481           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7482           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7483           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7484               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7485             /* The argument pack that the parameter maps to is just an
7486                expansion of the parameter itself, such as one would
7487                find in the implicit typedef of a class inside the
7488                class itself.  Consider this parameter "unsubstituted",
7489                so that we will maintain the outer pack expansion.  */
7490             arg_pack = NULL_TREE;
7491         }
7492           
7493       if (arg_pack)
7494         {
7495           int my_len = 
7496             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7497
7498           /* It's all-or-nothing with incomplete argument packs.  */
7499           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7500             return error_mark_node;
7501           
7502           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7503             incomplete = 1;
7504
7505           if (len < 0)
7506             {
7507               len = my_len;
7508               first_arg_pack = arg_pack;
7509             }
7510           else if (len != my_len)
7511             {
7512               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7513                 error ("mismatched argument pack lengths while expanding "
7514                        "%<%T%>",
7515                        pattern);
7516               else
7517                 error ("mismatched argument pack lengths while expanding "
7518                        "%<%E%>",
7519                        pattern);
7520               return error_mark_node;
7521             }
7522
7523           /* Keep track of the parameter packs and their corresponding
7524              argument packs.  */
7525           packs = tree_cons (parm_pack, arg_pack, packs);
7526           TREE_TYPE (packs) = orig_arg;
7527         }
7528       else
7529         /* We can't substitute for this parameter pack.  */
7530         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7531                                          TREE_VALUE (pack),
7532                                          unsubstituted_packs);
7533     }
7534
7535   /* We cannot expand this expansion expression, because we don't have
7536      all of the argument packs we need. Substitute into the pattern
7537      and return a PACK_EXPANSION_*. The caller will need to deal with
7538      that.  */
7539   if (unsubstituted_packs)
7540     return make_pack_expansion (tsubst (pattern, args, complain, 
7541                                         in_decl));
7542
7543   /* We could not find any argument packs that work.  */
7544   if (len < 0)
7545     return error_mark_node;
7546
7547   /* For each argument in each argument pack, substitute into the
7548      pattern.  */
7549   result = make_tree_vec (len + incomplete);
7550   for (i = 0; i < len + incomplete; ++i)
7551     {
7552       /* For parameter pack, change the substitution of the parameter
7553          pack to the ith argument in its argument pack, then expand
7554          the pattern.  */
7555       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7556         {
7557           tree parm = TREE_PURPOSE (pack);
7558
7559           if (TREE_CODE (parm) == PARM_DECL)
7560             {
7561               /* Select the Ith argument from the pack.  */
7562               tree arg = make_node (ARGUMENT_PACK_SELECT);
7563               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7564               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7565               mark_used (parm);
7566               register_local_specialization (arg, parm);
7567             }
7568           else
7569             {
7570               tree value = parm;
7571               int idx, level;
7572               template_parm_level_and_index (parm, &level, &idx);
7573               
7574               if (i < len) 
7575                 {
7576                   /* Select the Ith argument from the pack. */
7577                   value = make_node (ARGUMENT_PACK_SELECT);
7578                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7579                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7580                 }
7581
7582               /* Update the corresponding argument.  */
7583               TMPL_ARG (args, level, idx) = value;
7584             }
7585         }
7586
7587       /* Substitute into the PATTERN with the altered arguments.  */
7588       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7589         TREE_VEC_ELT (result, i) = 
7590           tsubst_expr (pattern, args, complain, in_decl,
7591                        /*integral_constant_expression_p=*/false);
7592       else
7593         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7594
7595       if (i == len)
7596         /* When we have incomplete argument packs, the last "expanded"
7597            result is itself a pack expansion, which allows us
7598            to deduce more arguments.  */
7599         TREE_VEC_ELT (result, i) = 
7600           make_pack_expansion (TREE_VEC_ELT (result, i));
7601
7602       if (TREE_VEC_ELT (result, i) == error_mark_node)
7603         {
7604           result = error_mark_node;
7605           break;
7606         }
7607     }
7608   
7609   /* Update ARGS to restore the substitution from parameter packs to
7610      their argument packs.  */
7611   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7612     {
7613       tree parm = TREE_PURPOSE (pack);
7614
7615       if (TREE_CODE (parm) == PARM_DECL)
7616         register_local_specialization (TREE_TYPE (pack), parm);
7617       else
7618         {
7619           int idx, level;
7620           template_parm_level_and_index (parm, &level, &idx);
7621           
7622           /* Update the corresponding argument.  */
7623           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7624             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7625               TREE_TYPE (pack);
7626           else
7627             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7628         }
7629     }
7630
7631   return result;
7632 }
7633
7634 /* Substitute ARGS into the vector or list of template arguments T.  */
7635
7636 static tree
7637 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7638 {
7639   tree orig_t = t;
7640   int len = TREE_VEC_LENGTH (t);
7641   int need_new = 0, i, expanded_len_adjust = 0, out;
7642   tree *elts = (tree *) alloca (len * sizeof (tree));
7643
7644   for (i = 0; i < len; i++)
7645     {
7646       tree orig_arg = TREE_VEC_ELT (t, i);
7647       tree new_arg;
7648
7649       if (TREE_CODE (orig_arg) == TREE_VEC)
7650         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7651       else if (PACK_EXPANSION_P (orig_arg))
7652         {
7653           /* Substitute into an expansion expression.  */
7654           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7655
7656           if (TREE_CODE (new_arg) == TREE_VEC)
7657             /* Add to the expanded length adjustment the number of
7658                expanded arguments. We subtract one from this
7659                measurement, because the argument pack expression
7660                itself is already counted as 1 in
7661                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7662                the argument pack is empty.  */
7663             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7664         }
7665       else if (ARGUMENT_PACK_P (orig_arg))
7666         {
7667           /* Substitute into each of the arguments.  */
7668           new_arg = make_node (TREE_CODE (orig_arg));
7669           
7670           SET_ARGUMENT_PACK_ARGS (
7671             new_arg,
7672             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7673                                   args, complain, in_decl));
7674
7675           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7676             new_arg = error_mark_node;
7677
7678           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7679             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7680                                           complain, in_decl);
7681             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7682
7683             if (TREE_TYPE (new_arg) == error_mark_node)
7684               new_arg = error_mark_node;
7685           }
7686         }
7687       else
7688         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7689
7690       if (new_arg == error_mark_node)
7691         return error_mark_node;
7692
7693       elts[i] = new_arg;
7694       if (new_arg != orig_arg)
7695         need_new = 1;
7696     }
7697
7698   if (!need_new)
7699     return t;
7700
7701   /* Make space for the expanded arguments coming from template
7702      argument packs.  */
7703   t = make_tree_vec (len + expanded_len_adjust);
7704   for (i = 0, out = 0; i < len; i++)
7705     {
7706       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7707            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7708           && TREE_CODE (elts[i]) == TREE_VEC)
7709         {
7710           int idx;
7711
7712           /* Now expand the template argument pack "in place".  */
7713           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7714             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7715         }
7716       else
7717         {
7718           TREE_VEC_ELT (t, out) = elts[i];
7719           out++;
7720         }
7721     }
7722
7723   return t;
7724 }
7725
7726 /* Return the result of substituting ARGS into the template parameters
7727    given by PARMS.  If there are m levels of ARGS and m + n levels of
7728    PARMS, then the result will contain n levels of PARMS.  For
7729    example, if PARMS is `template <class T> template <class U>
7730    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7731    result will be `template <int*, double, class V>'.  */
7732
7733 static tree
7734 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7735 {
7736   tree r = NULL_TREE;
7737   tree* new_parms;
7738
7739   /* When substituting into a template, we must set
7740      PROCESSING_TEMPLATE_DECL as the template parameters may be
7741      dependent if they are based on one-another, and the dependency
7742      predicates are short-circuit outside of templates.  */
7743   ++processing_template_decl;
7744
7745   for (new_parms = &r;
7746        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7747        new_parms = &(TREE_CHAIN (*new_parms)),
7748          parms = TREE_CHAIN (parms))
7749     {
7750       tree new_vec =
7751         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7752       int i;
7753
7754       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7755         {
7756           tree tuple;
7757           tree default_value;
7758           tree parm_decl;
7759
7760           if (parms == error_mark_node)
7761             continue;
7762
7763           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7764
7765           if (tuple == error_mark_node)
7766             continue;
7767
7768           default_value = TREE_PURPOSE (tuple);
7769           parm_decl = TREE_VALUE (tuple);
7770
7771           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7772           if (TREE_CODE (parm_decl) == PARM_DECL
7773               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7774             parm_decl = error_mark_node;
7775           default_value = tsubst_template_arg (default_value, args,
7776                                                complain, NULL_TREE);
7777
7778           tuple = build_tree_list (default_value, parm_decl);
7779           TREE_VEC_ELT (new_vec, i) = tuple;
7780         }
7781
7782       *new_parms =
7783         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7784                              - TMPL_ARGS_DEPTH (args)),
7785                    new_vec, NULL_TREE);
7786     }
7787
7788   --processing_template_decl;
7789
7790   return r;
7791 }
7792
7793 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7794    type T.  If T is not an aggregate or enumeration type, it is
7795    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7796    ENTERING_SCOPE is nonzero, T is the context for a template which
7797    we are presently tsubst'ing.  Return the substituted value.  */
7798
7799 static tree
7800 tsubst_aggr_type (tree t,
7801                   tree args,
7802                   tsubst_flags_t complain,
7803                   tree in_decl,
7804                   int entering_scope)
7805 {
7806   if (t == NULL_TREE)
7807     return NULL_TREE;
7808
7809   switch (TREE_CODE (t))
7810     {
7811     case RECORD_TYPE:
7812       if (TYPE_PTRMEMFUNC_P (t))
7813         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7814
7815       /* Else fall through.  */
7816     case ENUMERAL_TYPE:
7817     case UNION_TYPE:
7818       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7819         {
7820           tree argvec;
7821           tree context;
7822           tree r;
7823           bool saved_skip_evaluation;
7824
7825           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7826           saved_skip_evaluation = skip_evaluation;
7827           skip_evaluation = false;
7828
7829           /* First, determine the context for the type we are looking
7830              up.  */
7831           context = TYPE_CONTEXT (t);
7832           if (context)
7833             {
7834               context = tsubst_aggr_type (context, args, complain,
7835                                           in_decl, /*entering_scope=*/1);
7836               /* If context is a nested class inside a class template,
7837                  it may still need to be instantiated (c++/33959).  */
7838               if (TYPE_P (context))
7839                 context = complete_type (context);
7840             }
7841
7842           /* Then, figure out what arguments are appropriate for the
7843              type we are trying to find.  For example, given:
7844
7845                template <class T> struct S;
7846                template <class T, class U> void f(T, U) { S<U> su; }
7847
7848              and supposing that we are instantiating f<int, double>,
7849              then our ARGS will be {int, double}, but, when looking up
7850              S we only want {double}.  */
7851           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7852                                          complain, in_decl);
7853           if (argvec == error_mark_node)
7854             r = error_mark_node;
7855           else
7856             {
7857               r = lookup_template_class (t, argvec, in_decl, context,
7858                                          entering_scope, complain);
7859               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7860             }
7861
7862           skip_evaluation = saved_skip_evaluation;
7863
7864           return r;
7865         }
7866       else
7867         /* This is not a template type, so there's nothing to do.  */
7868         return t;
7869
7870     default:
7871       return tsubst (t, args, complain, in_decl);
7872     }
7873 }
7874
7875 /* Substitute into the default argument ARG (a default argument for
7876    FN), which has the indicated TYPE.  */
7877
7878 tree
7879 tsubst_default_argument (tree fn, tree type, tree arg)
7880 {
7881   tree saved_class_ptr = NULL_TREE;
7882   tree saved_class_ref = NULL_TREE;
7883
7884   /* This default argument came from a template.  Instantiate the
7885      default argument here, not in tsubst.  In the case of
7886      something like:
7887
7888        template <class T>
7889        struct S {
7890          static T t();
7891          void f(T = t());
7892        };
7893
7894      we must be careful to do name lookup in the scope of S<T>,
7895      rather than in the current class.  */
7896   push_access_scope (fn);
7897   /* The "this" pointer is not valid in a default argument.  */
7898   if (cfun)
7899     {
7900       saved_class_ptr = current_class_ptr;
7901       cp_function_chain->x_current_class_ptr = NULL_TREE;
7902       saved_class_ref = current_class_ref;
7903       cp_function_chain->x_current_class_ref = NULL_TREE;
7904     }
7905
7906   push_deferring_access_checks(dk_no_deferred);
7907   /* The default argument expression may cause implicitly defined
7908      member functions to be synthesized, which will result in garbage
7909      collection.  We must treat this situation as if we were within
7910      the body of function so as to avoid collecting live data on the
7911      stack.  */
7912   ++function_depth;
7913   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7914                      tf_warning_or_error, NULL_TREE,
7915                      /*integral_constant_expression_p=*/false);
7916   --function_depth;
7917   pop_deferring_access_checks();
7918
7919   /* Restore the "this" pointer.  */
7920   if (cfun)
7921     {
7922       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7923       cp_function_chain->x_current_class_ref = saved_class_ref;
7924     }
7925
7926   pop_access_scope (fn);
7927
7928   /* Make sure the default argument is reasonable.  */
7929   arg = check_default_argument (type, arg);
7930
7931   return arg;
7932 }
7933
7934 /* Substitute into all the default arguments for FN.  */
7935
7936 static void
7937 tsubst_default_arguments (tree fn)
7938 {
7939   tree arg;
7940   tree tmpl_args;
7941
7942   tmpl_args = DECL_TI_ARGS (fn);
7943
7944   /* If this function is not yet instantiated, we certainly don't need
7945      its default arguments.  */
7946   if (uses_template_parms (tmpl_args))
7947     return;
7948
7949   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7950        arg;
7951        arg = TREE_CHAIN (arg))
7952     if (TREE_PURPOSE (arg))
7953       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7954                                                     TREE_VALUE (arg),
7955                                                     TREE_PURPOSE (arg));
7956 }
7957
7958 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7959    result of the substitution.  Issue error and warning messages under
7960    control of COMPLAIN.  */
7961
7962 static tree
7963 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7964 {
7965   location_t saved_loc;
7966   tree r = NULL_TREE;
7967   tree in_decl = t;
7968
7969   /* Set the filename and linenumber to improve error-reporting.  */
7970   saved_loc = input_location;
7971   input_location = DECL_SOURCE_LOCATION (t);
7972
7973   switch (TREE_CODE (t))
7974     {
7975     case TEMPLATE_DECL:
7976       {
7977         /* We can get here when processing a member function template,
7978            member class template, and template template parameter of
7979            a template class.  */
7980         tree decl = DECL_TEMPLATE_RESULT (t);
7981         tree spec;
7982         tree tmpl_args;
7983         tree full_args;
7984
7985         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7986           {
7987             /* Template template parameter is treated here.  */
7988             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7989             if (new_type == error_mark_node)
7990               return error_mark_node;
7991
7992             r = copy_decl (t);
7993             TREE_CHAIN (r) = NULL_TREE;
7994             TREE_TYPE (r) = new_type;
7995             DECL_TEMPLATE_RESULT (r)
7996               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7997             DECL_TEMPLATE_PARMS (r)
7998               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7999                                        complain);
8000             TYPE_NAME (new_type) = r;
8001             break;
8002           }
8003
8004         /* We might already have an instance of this template.
8005            The ARGS are for the surrounding class type, so the
8006            full args contain the tsubst'd args for the context,
8007            plus the innermost args from the template decl.  */
8008         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
8009           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
8010           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
8011         /* Because this is a template, the arguments will still be
8012            dependent, even after substitution.  If
8013            PROCESSING_TEMPLATE_DECL is not set, the dependency
8014            predicates will short-circuit.  */
8015         ++processing_template_decl;
8016         full_args = tsubst_template_args (tmpl_args, args,
8017                                           complain, in_decl);
8018         --processing_template_decl;
8019         if (full_args == error_mark_node)
8020           return error_mark_node;
8021
8022         /* tsubst_template_args doesn't copy the vector if
8023            nothing changed.  But, *something* should have
8024            changed.  */
8025         gcc_assert (full_args != tmpl_args);
8026
8027         spec = retrieve_specialization (t, full_args,
8028                                         /*class_specializations_p=*/true);
8029         if (spec != NULL_TREE)
8030           {
8031             r = spec;
8032             break;
8033           }
8034
8035         /* Make a new template decl.  It will be similar to the
8036            original, but will record the current template arguments.
8037            We also create a new function declaration, which is just
8038            like the old one, but points to this new template, rather
8039            than the old one.  */
8040         r = copy_decl (t);
8041         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
8042         TREE_CHAIN (r) = NULL_TREE;
8043
8044         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
8045
8046         if (TREE_CODE (decl) == TYPE_DECL)
8047           {
8048             tree new_type;
8049             ++processing_template_decl;
8050             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8051             --processing_template_decl;
8052             if (new_type == error_mark_node)
8053               return error_mark_node;
8054
8055             TREE_TYPE (r) = new_type;
8056             CLASSTYPE_TI_TEMPLATE (new_type) = r;
8057             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
8058             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
8059             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
8060           }
8061         else
8062           {
8063             tree new_decl;
8064             ++processing_template_decl;
8065             new_decl = tsubst (decl, args, complain, in_decl);
8066             --processing_template_decl;
8067             if (new_decl == error_mark_node)
8068               return error_mark_node;
8069
8070             DECL_TEMPLATE_RESULT (r) = new_decl;
8071             DECL_TI_TEMPLATE (new_decl) = r;
8072             TREE_TYPE (r) = TREE_TYPE (new_decl);
8073             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
8074             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
8075           }
8076
8077         SET_DECL_IMPLICIT_INSTANTIATION (r);
8078         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
8079         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
8080
8081         /* The template parameters for this new template are all the
8082            template parameters for the old template, except the
8083            outermost level of parameters.  */
8084         DECL_TEMPLATE_PARMS (r)
8085           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8086                                    complain);
8087
8088         if (PRIMARY_TEMPLATE_P (t))
8089           DECL_PRIMARY_TEMPLATE (r) = r;
8090
8091         if (TREE_CODE (decl) != TYPE_DECL)
8092           /* Record this non-type partial instantiation.  */
8093           register_specialization (r, t,
8094                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8095                                    false);
8096       }
8097       break;
8098
8099     case FUNCTION_DECL:
8100       {
8101         tree ctx;
8102         tree argvec = NULL_TREE;
8103         tree *friends;
8104         tree gen_tmpl;
8105         tree type;
8106         int member;
8107         int args_depth;
8108         int parms_depth;
8109
8110         /* Nobody should be tsubst'ing into non-template functions.  */
8111         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8112
8113         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8114           {
8115             tree spec;
8116             bool dependent_p;
8117
8118             /* If T is not dependent, just return it.  We have to
8119                increment PROCESSING_TEMPLATE_DECL because
8120                value_dependent_expression_p assumes that nothing is
8121                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
8122             ++processing_template_decl;
8123             dependent_p = value_dependent_expression_p (t);
8124             --processing_template_decl;
8125             if (!dependent_p)
8126               return t;
8127
8128             /* Calculate the most general template of which R is a
8129                specialization, and the complete set of arguments used to
8130                specialize R.  */
8131             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
8132             argvec = tsubst_template_args (DECL_TI_ARGS
8133                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
8134                                            args, complain, in_decl);
8135
8136             /* Check to see if we already have this specialization.  */
8137             spec = retrieve_specialization (gen_tmpl, argvec,
8138                                             /*class_specializations_p=*/false);
8139
8140             if (spec)
8141               {
8142                 r = spec;
8143                 break;
8144               }
8145
8146             /* We can see more levels of arguments than parameters if
8147                there was a specialization of a member template, like
8148                this:
8149
8150                  template <class T> struct S { template <class U> void f(); }
8151                  template <> template <class U> void S<int>::f(U);
8152
8153                Here, we'll be substituting into the specialization,
8154                because that's where we can find the code we actually
8155                want to generate, but we'll have enough arguments for
8156                the most general template.
8157
8158                We also deal with the peculiar case:
8159
8160                  template <class T> struct S {
8161                    template <class U> friend void f();
8162                  };
8163                  template <class U> void f() {}
8164                  template S<int>;
8165                  template void f<double>();
8166
8167                Here, the ARGS for the instantiation of will be {int,
8168                double}.  But, we only need as many ARGS as there are
8169                levels of template parameters in CODE_PATTERN.  We are
8170                careful not to get fooled into reducing the ARGS in
8171                situations like:
8172
8173                  template <class T> struct S { template <class U> void f(U); }
8174                  template <class T> template <> void S<T>::f(int) {}
8175
8176                which we can spot because the pattern will be a
8177                specialization in this case.  */
8178             args_depth = TMPL_ARGS_DEPTH (args);
8179             parms_depth =
8180               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8181             if (args_depth > parms_depth
8182                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8183               args = get_innermost_template_args (args, parms_depth);
8184           }
8185         else
8186           {
8187             /* This special case arises when we have something like this:
8188
8189                  template <class T> struct S {
8190                    friend void f<int>(int, double);
8191                  };
8192
8193                Here, the DECL_TI_TEMPLATE for the friend declaration
8194                will be an IDENTIFIER_NODE.  We are being called from
8195                tsubst_friend_function, and we want only to create a
8196                new decl (R) with appropriate types so that we can call
8197                determine_specialization.  */
8198             gen_tmpl = NULL_TREE;
8199           }
8200
8201         if (DECL_CLASS_SCOPE_P (t))
8202           {
8203             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8204               member = 2;
8205             else
8206               member = 1;
8207             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8208                                     complain, t, /*entering_scope=*/1);
8209           }
8210         else
8211           {
8212             member = 0;
8213             ctx = DECL_CONTEXT (t);
8214           }
8215         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8216         if (type == error_mark_node)
8217           return error_mark_node;
8218
8219         /* We do NOT check for matching decls pushed separately at this
8220            point, as they may not represent instantiations of this
8221            template, and in any case are considered separate under the
8222            discrete model.  */
8223         r = copy_decl (t);
8224         DECL_USE_TEMPLATE (r) = 0;
8225         TREE_TYPE (r) = type;
8226         /* Clear out the mangled name and RTL for the instantiation.  */
8227         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8228         SET_DECL_RTL (r, NULL_RTX);
8229         /* Leave DECL_INITIAL set on deleted instantiations.  */
8230         if (!DECL_DELETED_FN (r))
8231           DECL_INITIAL (r) = NULL_TREE;
8232         DECL_CONTEXT (r) = ctx;
8233
8234         if (member && DECL_CONV_FN_P (r))
8235           /* Type-conversion operator.  Reconstruct the name, in
8236              case it's the name of one of the template's parameters.  */
8237           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8238
8239         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8240                                      complain, t);
8241         DECL_RESULT (r) = NULL_TREE;
8242
8243         TREE_STATIC (r) = 0;
8244         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8245         DECL_EXTERNAL (r) = 1;
8246         /* If this is an instantiation of a function with internal
8247            linkage, we already know what object file linkage will be
8248            assigned to the instantiation.  */
8249         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8250         DECL_DEFER_OUTPUT (r) = 0;
8251         TREE_CHAIN (r) = NULL_TREE;
8252         DECL_PENDING_INLINE_INFO (r) = 0;
8253         DECL_PENDING_INLINE_P (r) = 0;
8254         DECL_SAVED_TREE (r) = NULL_TREE;
8255         DECL_STRUCT_FUNCTION (r) = NULL;
8256         TREE_USED (r) = 0;
8257         if (DECL_CLONED_FUNCTION (r))
8258           {
8259             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8260                                                args, complain, t);
8261             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8262             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8263           }
8264
8265         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8266            this in the special friend case mentioned above where
8267            GEN_TMPL is NULL.  */
8268         if (gen_tmpl)
8269           {
8270             DECL_TEMPLATE_INFO (r)
8271               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8272             SET_DECL_IMPLICIT_INSTANTIATION (r);
8273             register_specialization (r, gen_tmpl, argvec, false);
8274
8275             /* We're not supposed to instantiate default arguments
8276                until they are called, for a template.  But, for a
8277                declaration like:
8278
8279                  template <class T> void f ()
8280                  { extern void g(int i = T()); }
8281
8282                we should do the substitution when the template is
8283                instantiated.  We handle the member function case in
8284                instantiate_class_template since the default arguments
8285                might refer to other members of the class.  */
8286             if (!member
8287                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8288                 && !uses_template_parms (argvec))
8289               tsubst_default_arguments (r);
8290           }
8291         else
8292           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8293
8294         /* Copy the list of befriending classes.  */
8295         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8296              *friends;
8297              friends = &TREE_CHAIN (*friends))
8298           {
8299             *friends = copy_node (*friends);
8300             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8301                                             args, complain,
8302                                             in_decl);
8303           }
8304
8305         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8306           {
8307             maybe_retrofit_in_chrg (r);
8308             if (DECL_CONSTRUCTOR_P (r))
8309               grok_ctor_properties (ctx, r);
8310             /* If this is an instantiation of a member template, clone it.
8311                If it isn't, that'll be handled by
8312                clone_constructors_and_destructors.  */
8313             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8314               clone_function_decl (r, /*update_method_vec_p=*/0);
8315           }
8316         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8317                  && !grok_op_properties (r, (complain & tf_error) != 0))
8318           return error_mark_node;
8319
8320         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8321           SET_DECL_FRIEND_CONTEXT (r,
8322                                    tsubst (DECL_FRIEND_CONTEXT (t),
8323                                             args, complain, in_decl));
8324
8325         /* Possibly limit visibility based on template args.  */
8326         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8327         if (DECL_VISIBILITY_SPECIFIED (t))
8328           {
8329             DECL_VISIBILITY_SPECIFIED (r) = 0;
8330             DECL_ATTRIBUTES (r)
8331               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8332           }
8333         determine_visibility (r);
8334
8335         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8336                                         args, complain, in_decl);
8337       }
8338       break;
8339
8340     case PARM_DECL:
8341       {
8342         tree type = NULL_TREE;
8343         int i, len = 1;
8344         tree expanded_types = NULL_TREE;
8345         tree prev_r = NULL_TREE;
8346         tree first_r = NULL_TREE;
8347
8348         if (FUNCTION_PARAMETER_PACK_P (t))
8349           {
8350             /* If there is a local specialization that isn't a
8351                parameter pack, it means that we're doing a "simple"
8352                substitution from inside tsubst_pack_expansion. Just
8353                return the local specialization (which will be a single
8354                parm).  */
8355             tree spec = retrieve_local_specialization (t);
8356             if (spec 
8357                 && TREE_CODE (spec) == PARM_DECL
8358                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8359               return spec;
8360
8361             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8362                the parameters in this function parameter pack.  */
8363             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8364                                                     complain, in_decl);
8365             if (TREE_CODE (expanded_types) == TREE_VEC)
8366               {
8367                 len = TREE_VEC_LENGTH (expanded_types);
8368
8369                 /* Zero-length parameter packs are boring. Just substitute
8370                    into the chain.  */
8371                 if (len == 0)
8372                   return tsubst (TREE_CHAIN (t), args, complain, 
8373                                  TREE_CHAIN (t));
8374               }
8375             else
8376               {
8377                 /* All we did was update the type. Make a note of that.  */
8378                 type = expanded_types;
8379                 expanded_types = NULL_TREE;
8380               }
8381           }
8382
8383         /* Loop through all of the parameter's we'll build. When T is
8384            a function parameter pack, LEN is the number of expanded
8385            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8386         r = NULL_TREE;
8387         for (i = 0; i < len; ++i)
8388           {
8389             prev_r = r;
8390             r = copy_node (t);
8391             if (DECL_TEMPLATE_PARM_P (t))
8392               SET_DECL_TEMPLATE_PARM_P (r);
8393
8394             if (expanded_types)
8395               /* We're on the Ith parameter of the function parameter
8396                  pack.  */
8397               {
8398                 /* Get the Ith type.  */
8399                 type = TREE_VEC_ELT (expanded_types, i);
8400
8401                 if (DECL_NAME (r))
8402                   /* Rename the parameter to include the index.  */
8403                   DECL_NAME (r) =
8404                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8405               }
8406             else if (!type)
8407               /* We're dealing with a normal parameter.  */
8408               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8409
8410             type = type_decays_to (type);
8411             TREE_TYPE (r) = type;
8412             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8413
8414             if (DECL_INITIAL (r))
8415               {
8416                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8417                   DECL_INITIAL (r) = TREE_TYPE (r);
8418                 else
8419                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8420                                              complain, in_decl);
8421               }
8422
8423             DECL_CONTEXT (r) = NULL_TREE;
8424
8425             if (!DECL_TEMPLATE_PARM_P (r))
8426               DECL_ARG_TYPE (r) = type_passed_as (type);
8427
8428             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8429                                             args, complain, in_decl);
8430
8431             /* Keep track of the first new parameter we
8432                generate. That's what will be returned to the
8433                caller.  */
8434             if (!first_r)
8435               first_r = r;
8436
8437             /* Build a proper chain of parameters when substituting
8438                into a function parameter pack.  */
8439             if (prev_r)
8440               TREE_CHAIN (prev_r) = r;
8441           }
8442
8443         if (TREE_CHAIN (t))
8444           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8445                                    complain, TREE_CHAIN (t));
8446
8447         /* FIRST_R contains the start of the chain we've built.  */
8448         r = first_r;
8449       }
8450       break;
8451
8452     case FIELD_DECL:
8453       {
8454         tree type;
8455
8456         r = copy_decl (t);
8457         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8458         if (type == error_mark_node)
8459           return error_mark_node;
8460         TREE_TYPE (r) = type;
8461         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8462
8463         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8464         DECL_INITIAL (r)
8465           = tsubst_expr (DECL_INITIAL (t), args,
8466                          complain, in_decl,
8467                          /*integral_constant_expression_p=*/true);
8468         /* We don't have to set DECL_CONTEXT here; it is set by
8469            finish_member_declaration.  */
8470         TREE_CHAIN (r) = NULL_TREE;
8471         if (VOID_TYPE_P (type))
8472           error ("instantiation of %q+D as type %qT", r, type);
8473
8474         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8475                                         args, complain, in_decl);
8476       }
8477       break;
8478
8479     case USING_DECL:
8480       /* We reach here only for member using decls.  */
8481       if (DECL_DEPENDENT_P (t))
8482         {
8483           r = do_class_using_decl
8484             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8485              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8486           if (!r)
8487             r = error_mark_node;
8488         }
8489       else
8490         {
8491           r = copy_node (t);
8492           TREE_CHAIN (r) = NULL_TREE;
8493         }
8494       break;
8495
8496     case TYPE_DECL:
8497     case VAR_DECL:
8498       {
8499         tree argvec = NULL_TREE;
8500         tree gen_tmpl = NULL_TREE;
8501         tree spec;
8502         tree tmpl = NULL_TREE;
8503         tree ctx;
8504         tree type = NULL_TREE;
8505         bool local_p;
8506
8507         if (TREE_CODE (t) == TYPE_DECL
8508             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8509           {
8510             /* If this is the canonical decl, we don't have to
8511                mess with instantiations, and often we can't (for
8512                typename, template type parms and such).  Note that
8513                TYPE_NAME is not correct for the above test if
8514                we've copied the type for a typedef.  */
8515             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8516             if (type == error_mark_node)
8517               return error_mark_node;
8518             r = TYPE_NAME (type);
8519             break;
8520           }
8521
8522         /* Check to see if we already have the specialization we
8523            need.  */
8524         spec = NULL_TREE;
8525         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8526           {
8527             /* T is a static data member or namespace-scope entity.
8528                We have to substitute into namespace-scope variables
8529                (even though such entities are never templates) because
8530                of cases like:
8531                
8532                  template <class T> void f() { extern T t; }
8533
8534                where the entity referenced is not known until
8535                instantiation time.  */
8536             local_p = false;
8537             ctx = DECL_CONTEXT (t);
8538             if (DECL_CLASS_SCOPE_P (t))
8539               {
8540                 ctx = tsubst_aggr_type (ctx, args,
8541                                         complain,
8542                                         in_decl, /*entering_scope=*/1);
8543                 /* If CTX is unchanged, then T is in fact the
8544                    specialization we want.  That situation occurs when
8545                    referencing a static data member within in its own
8546                    class.  We can use pointer equality, rather than
8547                    same_type_p, because DECL_CONTEXT is always
8548                    canonical.  */
8549                 if (ctx == DECL_CONTEXT (t))
8550                   spec = t;
8551               }
8552
8553             if (!spec)
8554               {
8555                 tmpl = DECL_TI_TEMPLATE (t);
8556                 gen_tmpl = most_general_template (tmpl);
8557                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8558                 spec = (retrieve_specialization 
8559                         (gen_tmpl, argvec,
8560                          /*class_specializations_p=*/false));
8561               }
8562           }
8563         else
8564           {
8565             /* A local variable.  */
8566             local_p = true;
8567             /* Subsequent calls to pushdecl will fill this in.  */
8568             ctx = NULL_TREE;
8569             spec = retrieve_local_specialization (t);
8570           }
8571         /* If we already have the specialization we need, there is
8572            nothing more to do.  */ 
8573         if (spec)
8574           {
8575             r = spec;
8576             break;
8577           }
8578
8579         /* Create a new node for the specialization we need.  */
8580         r = copy_decl (t);
8581         if (type == NULL_TREE)
8582           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8583         if (TREE_CODE (r) == VAR_DECL)
8584           {
8585             /* Even if the original location is out of scope, the
8586                newly substituted one is not.  */
8587             DECL_DEAD_FOR_LOCAL (r) = 0;
8588             DECL_INITIALIZED_P (r) = 0;
8589             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8590             if (type == error_mark_node)
8591               return error_mark_node;
8592             if (TREE_CODE (type) == FUNCTION_TYPE)
8593               {
8594                 /* It may seem that this case cannot occur, since:
8595
8596                      typedef void f();
8597                      void g() { f x; }
8598
8599                    declares a function, not a variable.  However:
8600       
8601                      typedef void f();
8602                      template <typename T> void g() { T t; }
8603                      template void g<f>();
8604
8605                    is an attempt to declare a variable with function
8606                    type.  */
8607                 error ("variable %qD has function type",
8608                        /* R is not yet sufficiently initialized, so we
8609                           just use its name.  */
8610                        DECL_NAME (r));
8611                 return error_mark_node;
8612               }
8613             type = complete_type (type);
8614             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8615               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8616             type = check_var_type (DECL_NAME (r), type);
8617
8618             if (DECL_HAS_VALUE_EXPR_P (t))
8619               {
8620                 tree ve = DECL_VALUE_EXPR (t);
8621                 ve = tsubst_expr (ve, args, complain, in_decl,
8622                                   /*constant_expression_p=*/false);
8623                 SET_DECL_VALUE_EXPR (r, ve);
8624               }
8625           }
8626         else if (DECL_SELF_REFERENCE_P (t))
8627           SET_DECL_SELF_REFERENCE_P (r);
8628         TREE_TYPE (r) = type;
8629         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8630         DECL_CONTEXT (r) = ctx;
8631         /* Clear out the mangled name and RTL for the instantiation.  */
8632         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8633         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8634           SET_DECL_RTL (r, NULL_RTX);
8635         /* The initializer must not be expanded until it is required;
8636            see [temp.inst].  */
8637         DECL_INITIAL (r) = NULL_TREE;
8638         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8639           SET_DECL_RTL (r, NULL_RTX);
8640         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8641         if (TREE_CODE (r) == VAR_DECL)
8642           {
8643             /* Possibly limit visibility based on template args.  */
8644             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8645             if (DECL_VISIBILITY_SPECIFIED (t))
8646               {
8647                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8648                 DECL_ATTRIBUTES (r)
8649                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8650               }
8651             determine_visibility (r);
8652           }
8653         /* Preserve a typedef that names a type.  */
8654         else if (TREE_CODE (r) == TYPE_DECL
8655                  && DECL_ORIGINAL_TYPE (t)
8656                  && type != error_mark_node)
8657           {
8658             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8659                                              args, complain, in_decl);
8660             TREE_TYPE (r) = type = build_variant_type_copy (type);
8661             TYPE_NAME (type) = r;
8662           }
8663
8664         if (!local_p)
8665           {
8666             /* A static data member declaration is always marked
8667                external when it is declared in-class, even if an
8668                initializer is present.  We mimic the non-template
8669                processing here.  */
8670             DECL_EXTERNAL (r) = 1;
8671
8672             register_specialization (r, gen_tmpl, argvec, false);
8673             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8674             SET_DECL_IMPLICIT_INSTANTIATION (r);
8675           }
8676         else
8677           register_local_specialization (r, t);
8678
8679         TREE_CHAIN (r) = NULL_TREE;
8680
8681         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8682                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8683                                         args, complain, in_decl);
8684         layout_decl (r, 0);
8685       }
8686       break;
8687
8688     default:
8689       gcc_unreachable ();
8690     }
8691
8692   /* Restore the file and line information.  */
8693   input_location = saved_loc;
8694
8695   return r;
8696 }
8697
8698 /* Substitute into the ARG_TYPES of a function type.  */
8699
8700 static tree
8701 tsubst_arg_types (tree arg_types,
8702                   tree args,
8703                   tsubst_flags_t complain,
8704                   tree in_decl)
8705 {
8706   tree remaining_arg_types;
8707   tree type = NULL_TREE;
8708   int i = 1;
8709   tree expanded_args = NULL_TREE;
8710   tree default_arg;
8711
8712   if (!arg_types || arg_types == void_list_node)
8713     return arg_types;
8714
8715   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8716                                           args, complain, in_decl);
8717   if (remaining_arg_types == error_mark_node)
8718     return error_mark_node;
8719
8720   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8721     {
8722       /* For a pack expansion, perform substitution on the
8723          entire expression. Later on, we'll handle the arguments
8724          one-by-one.  */
8725       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8726                                             args, complain, in_decl);
8727
8728       if (TREE_CODE (expanded_args) == TREE_VEC)
8729         /* So that we'll spin through the parameters, one by one.  */
8730         i = TREE_VEC_LENGTH (expanded_args);
8731       else
8732         {
8733           /* We only partially substituted into the parameter
8734              pack. Our type is TYPE_PACK_EXPANSION.  */
8735           type = expanded_args;
8736           expanded_args = NULL_TREE;
8737         }
8738     }
8739
8740   while (i > 0) {
8741     --i;
8742     
8743     if (expanded_args)
8744       type = TREE_VEC_ELT (expanded_args, i);
8745     else if (!type)
8746       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8747
8748     if (type == error_mark_node)
8749       return error_mark_node;
8750     if (VOID_TYPE_P (type))
8751       {
8752         if (complain & tf_error)
8753           {
8754             error ("invalid parameter type %qT", type);
8755             if (in_decl)
8756               error ("in declaration %q+D", in_decl);
8757           }
8758         return error_mark_node;
8759     }
8760     
8761     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8762        top-level qualifiers as required.  */
8763     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8764
8765     /* We do not substitute into default arguments here.  The standard
8766        mandates that they be instantiated only when needed, which is
8767        done in build_over_call.  */
8768     default_arg = TREE_PURPOSE (arg_types);
8769
8770     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8771       {
8772         /* We've instantiated a template before its default arguments
8773            have been parsed.  This can happen for a nested template
8774            class, and is not an error unless we require the default
8775            argument in a call of this function.  */
8776         remaining_arg_types = 
8777           tree_cons (default_arg, type, remaining_arg_types);
8778         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8779                        remaining_arg_types);
8780       }
8781     else
8782       remaining_arg_types = 
8783         hash_tree_cons (default_arg, type, remaining_arg_types);
8784   }
8785         
8786   return remaining_arg_types;
8787 }
8788
8789 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8790    *not* handle the exception-specification for FNTYPE, because the
8791    initial substitution of explicitly provided template parameters
8792    during argument deduction forbids substitution into the
8793    exception-specification:
8794
8795      [temp.deduct]
8796
8797      All references in the function type of the function template to  the
8798      corresponding template parameters are replaced by the specified tem-
8799      plate argument values.  If a substitution in a template parameter or
8800      in  the function type of the function template results in an invalid
8801      type, type deduction fails.  [Note: The equivalent  substitution  in
8802      exception specifications is done only when the function is instanti-
8803      ated, at which point a program is  ill-formed  if  the  substitution
8804      results in an invalid type.]  */
8805
8806 static tree
8807 tsubst_function_type (tree t,
8808                       tree args,
8809                       tsubst_flags_t complain,
8810                       tree in_decl)
8811 {
8812   tree return_type;
8813   tree arg_types;
8814   tree fntype;
8815
8816   /* The TYPE_CONTEXT is not used for function/method types.  */
8817   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8818
8819   /* Substitute the return type.  */
8820   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8821   if (return_type == error_mark_node)
8822     return error_mark_node;
8823   /* The standard does not presently indicate that creation of a
8824      function type with an invalid return type is a deduction failure.
8825      However, that is clearly analogous to creating an array of "void"
8826      or a reference to a reference.  This is core issue #486.  */
8827   if (TREE_CODE (return_type) == ARRAY_TYPE
8828       || TREE_CODE (return_type) == FUNCTION_TYPE)
8829     {
8830       if (complain & tf_error)
8831         {
8832           if (TREE_CODE (return_type) == ARRAY_TYPE)
8833             error ("function returning an array");
8834           else
8835             error ("function returning a function");
8836         }
8837       return error_mark_node;
8838     }
8839
8840   /* Substitute the argument types.  */
8841   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8842                                 complain, in_decl);
8843   if (arg_types == error_mark_node)
8844     return error_mark_node;
8845
8846   /* Construct a new type node and return it.  */
8847   if (TREE_CODE (t) == FUNCTION_TYPE)
8848     fntype = build_function_type (return_type, arg_types);
8849   else
8850     {
8851       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8852       if (! MAYBE_CLASS_TYPE_P (r))
8853         {
8854           /* [temp.deduct]
8855
8856              Type deduction may fail for any of the following
8857              reasons:
8858
8859              -- Attempting to create "pointer to member of T" when T
8860              is not a class type.  */
8861           if (complain & tf_error)
8862             error ("creating pointer to member function of non-class type %qT",
8863                       r);
8864           return error_mark_node;
8865         }
8866
8867       fntype = build_method_type_directly (r, return_type,
8868                                            TREE_CHAIN (arg_types));
8869     }
8870   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8871   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8872
8873   return fntype;
8874 }
8875
8876 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8877    ARGS into that specification, and return the substituted
8878    specification.  If there is no specification, return NULL_TREE.  */
8879
8880 static tree
8881 tsubst_exception_specification (tree fntype,
8882                                 tree args,
8883                                 tsubst_flags_t complain,
8884                                 tree in_decl)
8885 {
8886   tree specs;
8887   tree new_specs;
8888
8889   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8890   new_specs = NULL_TREE;
8891   if (specs)
8892     {
8893       if (! TREE_VALUE (specs))
8894         new_specs = specs;
8895       else
8896         while (specs)
8897           {
8898             tree spec;
8899             int i, len = 1;
8900             tree expanded_specs = NULL_TREE;
8901
8902             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8903               {
8904                 /* Expand the pack expansion type.  */
8905                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8906                                                        args, complain,
8907                                                        in_decl);
8908
8909                 if (expanded_specs == error_mark_node)
8910                   return error_mark_node;
8911                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8912                   len = TREE_VEC_LENGTH (expanded_specs);
8913                 else
8914                   {
8915                     /* We're substituting into a member template, so
8916                        we got a TYPE_PACK_EXPANSION back.  Add that
8917                        expansion and move on.  */
8918                     gcc_assert (TREE_CODE (expanded_specs) 
8919                                 == TYPE_PACK_EXPANSION);
8920                     new_specs = add_exception_specifier (new_specs,
8921                                                          expanded_specs,
8922                                                          complain);
8923                     specs = TREE_CHAIN (specs);
8924                     continue;
8925                   }
8926               }
8927
8928             for (i = 0; i < len; ++i)
8929               {
8930                 if (expanded_specs)
8931                   spec = TREE_VEC_ELT (expanded_specs, i);
8932                 else
8933                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8934                 if (spec == error_mark_node)
8935                   return spec;
8936                 new_specs = add_exception_specifier (new_specs, spec, 
8937                                                      complain);
8938               }
8939
8940             specs = TREE_CHAIN (specs);
8941           }
8942     }
8943   return new_specs;
8944 }
8945
8946 /* Take the tree structure T and replace template parameters used
8947    therein with the argument vector ARGS.  IN_DECL is an associated
8948    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8949    Issue error and warning messages under control of COMPLAIN.  Note
8950    that we must be relatively non-tolerant of extensions here, in
8951    order to preserve conformance; if we allow substitutions that
8952    should not be allowed, we may allow argument deductions that should
8953    not succeed, and therefore report ambiguous overload situations
8954    where there are none.  In theory, we could allow the substitution,
8955    but indicate that it should have failed, and allow our caller to
8956    make sure that the right thing happens, but we don't try to do this
8957    yet.
8958
8959    This function is used for dealing with types, decls and the like;
8960    for expressions, use tsubst_expr or tsubst_copy.  */
8961
8962 static tree
8963 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8964 {
8965   tree type, r;
8966
8967   if (t == NULL_TREE || t == error_mark_node
8968       || t == integer_type_node
8969       || t == void_type_node
8970       || t == char_type_node
8971       || t == unknown_type_node
8972       || TREE_CODE (t) == NAMESPACE_DECL)
8973     return t;
8974
8975   if (DECL_P (t))
8976     return tsubst_decl (t, args, complain);
8977
8978   if (args == NULL_TREE)
8979     return t;
8980
8981   if (TREE_CODE (t) == IDENTIFIER_NODE)
8982     type = IDENTIFIER_TYPE_VALUE (t);
8983   else
8984     type = TREE_TYPE (t);
8985
8986   gcc_assert (type != unknown_type_node);
8987
8988   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8989      such as attribute aligned.  */
8990   if (TYPE_P (t)
8991       && TYPE_NAME (t)
8992       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8993     {
8994       tree decl = TYPE_NAME (t);
8995       
8996       if (DECL_CLASS_SCOPE_P (decl)
8997           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
8998           && uses_template_parms (DECL_CONTEXT (decl)))
8999         {
9000           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
9001           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
9002           r = retrieve_specialization (tmpl, gen_args, false);
9003         }
9004       else if (DECL_FUNCTION_SCOPE_P (decl)
9005                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
9006                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
9007         r = retrieve_local_specialization (decl);
9008       else
9009         /* The typedef is from a non-template context.  */
9010         return t;
9011
9012       if (r)
9013         {
9014           r = TREE_TYPE (r);
9015           r = cp_build_qualified_type_real
9016             (r, cp_type_quals (t) | cp_type_quals (r),
9017              complain | tf_ignore_bad_quals);
9018           return r;
9019         }
9020       /* Else we must be instantiating the typedef, so fall through.  */
9021     }
9022
9023   if (type
9024       && TREE_CODE (t) != TYPENAME_TYPE
9025       && TREE_CODE (t) != IDENTIFIER_NODE
9026       && TREE_CODE (t) != FUNCTION_TYPE
9027       && TREE_CODE (t) != METHOD_TYPE)
9028     type = tsubst (type, args, complain, in_decl);
9029   if (type == error_mark_node)
9030     return error_mark_node;
9031
9032   switch (TREE_CODE (t))
9033     {
9034     case RECORD_TYPE:
9035     case UNION_TYPE:
9036     case ENUMERAL_TYPE:
9037       return tsubst_aggr_type (t, args, complain, in_decl,
9038                                /*entering_scope=*/0);
9039
9040     case ERROR_MARK:
9041     case IDENTIFIER_NODE:
9042     case VOID_TYPE:
9043     case REAL_TYPE:
9044     case COMPLEX_TYPE:
9045     case VECTOR_TYPE:
9046     case BOOLEAN_TYPE:
9047     case INTEGER_CST:
9048     case REAL_CST:
9049     case STRING_CST:
9050       return t;
9051
9052     case INTEGER_TYPE:
9053       if (t == integer_type_node)
9054         return t;
9055
9056       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
9057           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
9058         return t;
9059
9060       {
9061         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
9062
9063         max = tsubst_expr (omax, args, complain, in_decl,
9064                            /*integral_constant_expression_p=*/false);
9065         max = fold_decl_constant_value (max);
9066
9067         if (TREE_CODE (max) != INTEGER_CST
9068             && !at_function_scope_p ()
9069             && !value_dependent_expression_p (max))
9070           {
9071             if (complain & tf_error)
9072               error ("array bound is not an integer constant");
9073             return error_mark_node;
9074           }
9075
9076         /* [temp.deduct]
9077
9078            Type deduction may fail for any of the following
9079            reasons:
9080
9081              Attempting to create an array with a size that is
9082              zero or negative.  */
9083         if (integer_zerop (max) && !(complain & tf_error))
9084           /* We must fail if performing argument deduction (as
9085              indicated by the state of complain), so that
9086              another substitution can be found.  */
9087           return error_mark_node;
9088         else if (TREE_CODE (max) == INTEGER_CST
9089                  && INT_CST_LT (max, integer_zero_node))
9090           {
9091             if (complain & tf_error)
9092               error ("creating array with negative size (%qE)", max);
9093
9094             return error_mark_node;
9095           }
9096
9097         return compute_array_index_type (NULL_TREE, max);
9098       }
9099
9100     case TEMPLATE_TYPE_PARM:
9101     case TEMPLATE_TEMPLATE_PARM:
9102     case BOUND_TEMPLATE_TEMPLATE_PARM:
9103     case TEMPLATE_PARM_INDEX:
9104       {
9105         int idx;
9106         int level;
9107         int levels;
9108         tree arg = NULL_TREE;
9109
9110         r = NULL_TREE;
9111
9112         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9113         template_parm_level_and_index (t, &level, &idx); 
9114
9115         levels = TMPL_ARGS_DEPTH (args);
9116         if (level <= levels)
9117           {
9118             arg = TMPL_ARG (args, level, idx);
9119
9120             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9121               /* See through ARGUMENT_PACK_SELECT arguments. */
9122               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9123           }
9124
9125         if (arg == error_mark_node)
9126           return error_mark_node;
9127         else if (arg != NULL_TREE)
9128           {
9129             if (ARGUMENT_PACK_P (arg))
9130               /* If ARG is an argument pack, we don't actually want to
9131                  perform a substitution here, because substitutions
9132                  for argument packs are only done
9133                  element-by-element. We can get to this point when
9134                  substituting the type of a non-type template
9135                  parameter pack, when that type actually contains
9136                  template parameter packs from an outer template, e.g.,
9137
9138                  template<typename... Types> struct A {
9139                    template<Types... Values> struct B { };
9140                  };  */
9141               return t;
9142
9143             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9144               {
9145                 int quals;
9146                 gcc_assert (TYPE_P (arg));
9147
9148                 /* cv-quals from the template are discarded when
9149                    substituting in a function or reference type.  */
9150                 if (TREE_CODE (arg) == FUNCTION_TYPE
9151                     || TREE_CODE (arg) == METHOD_TYPE
9152                     || TREE_CODE (arg) == REFERENCE_TYPE)
9153                   quals = cp_type_quals (arg);
9154                 else
9155                   quals = cp_type_quals (arg) | cp_type_quals (t);
9156                   
9157                 return cp_build_qualified_type_real
9158                   (arg, quals, complain | tf_ignore_bad_quals);
9159               }
9160             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9161               {
9162                 /* We are processing a type constructed from a
9163                    template template parameter.  */
9164                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9165                                       args, complain, in_decl);
9166                 if (argvec == error_mark_node)
9167                   return error_mark_node;
9168
9169                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9170                    are resolving nested-types in the signature of a
9171                    member function templates.  Otherwise ARG is a
9172                    TEMPLATE_DECL and is the real template to be
9173                    instantiated.  */
9174                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9175                   arg = TYPE_NAME (arg);
9176
9177                 r = lookup_template_class (arg,
9178                                            argvec, in_decl,
9179                                            DECL_CONTEXT (arg),
9180                                             /*entering_scope=*/0,
9181                                            complain);
9182                 return cp_build_qualified_type_real
9183                   (r, TYPE_QUALS (t), complain);
9184               }
9185             else
9186               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9187               return arg;
9188           }
9189
9190         if (level == 1)
9191           /* This can happen during the attempted tsubst'ing in
9192              unify.  This means that we don't yet have any information
9193              about the template parameter in question.  */
9194           return t;
9195
9196         /* If we get here, we must have been looking at a parm for a
9197            more deeply nested template.  Make a new version of this
9198            template parameter, but with a lower level.  */
9199         switch (TREE_CODE (t))
9200           {
9201           case TEMPLATE_TYPE_PARM:
9202           case TEMPLATE_TEMPLATE_PARM:
9203           case BOUND_TEMPLATE_TEMPLATE_PARM:
9204             if (cp_type_quals (t))
9205               {
9206                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9207                 r = cp_build_qualified_type_real
9208                   (r, cp_type_quals (t),
9209                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9210                                ? tf_ignore_bad_quals : 0));
9211               }
9212             else
9213               {
9214                 r = copy_type (t);
9215                 TEMPLATE_TYPE_PARM_INDEX (r)
9216                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9217                                                 r, levels, args, complain);
9218                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9219                 TYPE_MAIN_VARIANT (r) = r;
9220                 TYPE_POINTER_TO (r) = NULL_TREE;
9221                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9222
9223                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9224                   /* We have reduced the level of the template
9225                      template parameter, but not the levels of its
9226                      template parameters, so canonical_type_parameter
9227                      will not be able to find the canonical template
9228                      template parameter for this level. Thus, we
9229                      require structural equality checking to compare
9230                      TEMPLATE_TEMPLATE_PARMs. */
9231                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9232                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9233                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9234                 else
9235                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9236
9237                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9238                   {
9239                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9240                                           complain, in_decl);
9241                     if (argvec == error_mark_node)
9242                       return error_mark_node;
9243
9244                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9245                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9246                   }
9247               }
9248             break;
9249
9250           case TEMPLATE_PARM_INDEX:
9251             r = reduce_template_parm_level (t, type, levels, args, complain);
9252             break;
9253
9254           default:
9255             gcc_unreachable ();
9256           }
9257
9258         return r;
9259       }
9260
9261     case TREE_LIST:
9262       {
9263         tree purpose, value, chain;
9264
9265         if (t == void_list_node)
9266           return t;
9267
9268         purpose = TREE_PURPOSE (t);
9269         if (purpose)
9270           {
9271             purpose = tsubst (purpose, args, complain, in_decl);
9272             if (purpose == error_mark_node)
9273               return error_mark_node;
9274           }
9275         value = TREE_VALUE (t);
9276         if (value)
9277           {
9278             value = tsubst (value, args, complain, in_decl);
9279             if (value == error_mark_node)
9280               return error_mark_node;
9281           }
9282         chain = TREE_CHAIN (t);
9283         if (chain && chain != void_type_node)
9284           {
9285             chain = tsubst (chain, args, complain, in_decl);
9286             if (chain == error_mark_node)
9287               return error_mark_node;
9288           }
9289         if (purpose == TREE_PURPOSE (t)
9290             && value == TREE_VALUE (t)
9291             && chain == TREE_CHAIN (t))
9292           return t;
9293         return hash_tree_cons (purpose, value, chain);
9294       }
9295
9296     case TREE_BINFO:
9297       /* We should never be tsubsting a binfo.  */
9298       gcc_unreachable ();
9299
9300     case TREE_VEC:
9301       /* A vector of template arguments.  */
9302       gcc_assert (!type);
9303       return tsubst_template_args (t, args, complain, in_decl);
9304
9305     case POINTER_TYPE:
9306     case REFERENCE_TYPE:
9307       {
9308         enum tree_code code;
9309
9310         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9311           return t;
9312
9313         code = TREE_CODE (t);
9314
9315
9316         /* [temp.deduct]
9317
9318            Type deduction may fail for any of the following
9319            reasons:
9320
9321            -- Attempting to create a pointer to reference type.
9322            -- Attempting to create a reference to a reference type or
9323               a reference to void.
9324
9325           Core issue 106 says that creating a reference to a reference
9326           during instantiation is no longer a cause for failure. We
9327           only enforce this check in strict C++98 mode.  */
9328         if ((TREE_CODE (type) == REFERENCE_TYPE
9329              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9330             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9331           {
9332             static location_t last_loc;
9333
9334             /* We keep track of the last time we issued this error
9335                message to avoid spewing a ton of messages during a
9336                single bad template instantiation.  */
9337             if (complain & tf_error
9338                 && last_loc != input_location)
9339               {
9340                 if (TREE_CODE (type) == VOID_TYPE)
9341                   error ("forming reference to void");
9342                 else
9343                   error ("forming %s to reference type %qT",
9344                          (code == POINTER_TYPE) ? "pointer" : "reference",
9345                          type);
9346                 last_loc = input_location;
9347               }
9348
9349             return error_mark_node;
9350           }
9351         else if (code == POINTER_TYPE)
9352           {
9353             r = build_pointer_type (type);
9354             if (TREE_CODE (type) == METHOD_TYPE)
9355               r = build_ptrmemfunc_type (r);
9356           }
9357         else if (TREE_CODE (type) == REFERENCE_TYPE)
9358           /* In C++0x, during template argument substitution, when there is an
9359              attempt to create a reference to a reference type, reference
9360              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9361
9362              "If a template-argument for a template-parameter T names a type
9363              that is a reference to a type A, an attempt to create the type
9364              'lvalue reference to cv T' creates the type 'lvalue reference to
9365              A,' while an attempt to create the type type rvalue reference to
9366              cv T' creates the type T"
9367           */
9368           r = cp_build_reference_type
9369               (TREE_TYPE (type),
9370                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9371         else
9372           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9373         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9374
9375         if (r != error_mark_node)
9376           /* Will this ever be needed for TYPE_..._TO values?  */
9377           layout_type (r);
9378
9379         return r;
9380       }
9381     case OFFSET_TYPE:
9382       {
9383         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9384         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9385           {
9386             /* [temp.deduct]
9387
9388                Type deduction may fail for any of the following
9389                reasons:
9390
9391                -- Attempting to create "pointer to member of T" when T
9392                   is not a class type.  */
9393             if (complain & tf_error)
9394               error ("creating pointer to member of non-class type %qT", r);
9395             return error_mark_node;
9396           }
9397         if (TREE_CODE (type) == REFERENCE_TYPE)
9398           {
9399             if (complain & tf_error)
9400               error ("creating pointer to member reference type %qT", type);
9401             return error_mark_node;
9402           }
9403         if (TREE_CODE (type) == VOID_TYPE)
9404           {
9405             if (complain & tf_error)
9406               error ("creating pointer to member of type void");
9407             return error_mark_node;
9408           }
9409         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9410         if (TREE_CODE (type) == FUNCTION_TYPE)
9411           {
9412             /* The type of the implicit object parameter gets its
9413                cv-qualifiers from the FUNCTION_TYPE. */
9414             tree method_type;
9415             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9416                                                       cp_type_quals (type));
9417             tree memptr;
9418             method_type = build_method_type_directly (this_type,
9419                                                       TREE_TYPE (type),
9420                                                       TYPE_ARG_TYPES (type));
9421             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9422             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9423                                                  complain);
9424           }
9425         else
9426           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9427                                                TYPE_QUALS (t),
9428                                                complain);
9429       }
9430     case FUNCTION_TYPE:
9431     case METHOD_TYPE:
9432       {
9433         tree fntype;
9434         tree specs;
9435         fntype = tsubst_function_type (t, args, complain, in_decl);
9436         if (fntype == error_mark_node)
9437           return error_mark_node;
9438
9439         /* Substitute the exception specification.  */
9440         specs = tsubst_exception_specification (t, args, complain,
9441                                                 in_decl);
9442         if (specs == error_mark_node)
9443           return error_mark_node;
9444         if (specs)
9445           fntype = build_exception_variant (fntype, specs);
9446         return fntype;
9447       }
9448     case ARRAY_TYPE:
9449       {
9450         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9451         if (domain == error_mark_node)
9452           return error_mark_node;
9453
9454         /* As an optimization, we avoid regenerating the array type if
9455            it will obviously be the same as T.  */
9456         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9457           return t;
9458
9459         /* These checks should match the ones in grokdeclarator.
9460
9461            [temp.deduct]
9462
9463            The deduction may fail for any of the following reasons:
9464
9465            -- Attempting to create an array with an element type that
9466               is void, a function type, or a reference type, or [DR337]
9467               an abstract class type.  */
9468         if (TREE_CODE (type) == VOID_TYPE
9469             || TREE_CODE (type) == FUNCTION_TYPE
9470             || TREE_CODE (type) == REFERENCE_TYPE)
9471           {
9472             if (complain & tf_error)
9473               error ("creating array of %qT", type);
9474             return error_mark_node;
9475           }
9476         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9477           {
9478             if (complain & tf_error)
9479               error ("creating array of %qT, which is an abstract class type",
9480                      type);
9481             return error_mark_node;
9482           }
9483
9484         r = build_cplus_array_type (type, domain);
9485
9486         if (TYPE_USER_ALIGN (t))
9487           {
9488             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9489             TYPE_USER_ALIGN (r) = 1;
9490           }
9491
9492         return r;
9493       }
9494
9495     case PLUS_EXPR:
9496     case MINUS_EXPR:
9497       {
9498         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9499         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9500
9501         if (e1 == error_mark_node || e2 == error_mark_node)
9502           return error_mark_node;
9503
9504         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9505       }
9506
9507     case NEGATE_EXPR:
9508     case NOP_EXPR:
9509       {
9510         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9511         if (e == error_mark_node)
9512           return error_mark_node;
9513
9514         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9515       }
9516
9517     case TYPENAME_TYPE:
9518       {
9519         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9520                                      in_decl, /*entering_scope=*/1);
9521         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9522                               complain, in_decl);
9523
9524         if (ctx == error_mark_node || f == error_mark_node)
9525           return error_mark_node;
9526
9527         if (!MAYBE_CLASS_TYPE_P (ctx))
9528           {
9529             if (complain & tf_error)
9530               error ("%qT is not a class, struct, or union type", ctx);
9531             return error_mark_node;
9532           }
9533         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9534           {
9535             /* Normally, make_typename_type does not require that the CTX
9536                have complete type in order to allow things like:
9537
9538                  template <class T> struct S { typename S<T>::X Y; };
9539
9540                But, such constructs have already been resolved by this
9541                point, so here CTX really should have complete type, unless
9542                it's a partial instantiation.  */
9543             ctx = complete_type (ctx);
9544             if (!COMPLETE_TYPE_P (ctx))
9545               {
9546                 if (complain & tf_error)
9547                   cxx_incomplete_type_error (NULL_TREE, ctx);
9548                 return error_mark_node;
9549               }
9550           }
9551
9552         f = make_typename_type (ctx, f, typename_type,
9553                                 (complain & tf_error) | tf_keep_type_decl);
9554         if (f == error_mark_node)
9555           return f;
9556         if (TREE_CODE (f) == TYPE_DECL)
9557           {
9558             complain |= tf_ignore_bad_quals;
9559             f = TREE_TYPE (f);
9560           }
9561
9562         if (TREE_CODE (f) != TYPENAME_TYPE)
9563           {
9564             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9565               error ("%qT resolves to %qT, which is not an enumeration type",
9566                      t, f);
9567             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9568               error ("%qT resolves to %qT, which is is not a class type",
9569                      t, f);
9570           }
9571
9572         return cp_build_qualified_type_real
9573           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9574       }
9575
9576     case UNBOUND_CLASS_TEMPLATE:
9577       {
9578         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9579                                      in_decl, /*entering_scope=*/1);
9580         tree name = TYPE_IDENTIFIER (t);
9581         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9582
9583         if (ctx == error_mark_node || name == error_mark_node)
9584           return error_mark_node;
9585
9586         if (parm_list)
9587           parm_list = tsubst_template_parms (parm_list, args, complain);
9588         return make_unbound_class_template (ctx, name, parm_list, complain);
9589       }
9590
9591     case INDIRECT_REF:
9592     case ADDR_EXPR:
9593     case CALL_EXPR:
9594       gcc_unreachable ();
9595
9596     case ARRAY_REF:
9597       {
9598         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9599         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9600                                /*integral_constant_expression_p=*/false);
9601         if (e1 == error_mark_node || e2 == error_mark_node)
9602           return error_mark_node;
9603
9604         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9605       }
9606
9607     case SCOPE_REF:
9608       {
9609         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9610         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9611         if (e1 == error_mark_node || e2 == error_mark_node)
9612           return error_mark_node;
9613
9614         return build_qualified_name (/*type=*/NULL_TREE,
9615                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9616       }
9617
9618     case TYPEOF_TYPE:
9619       {
9620         tree type;
9621
9622         type = finish_typeof (tsubst_expr 
9623                               (TYPEOF_TYPE_EXPR (t), args,
9624                                complain, in_decl,
9625                                /*integral_constant_expression_p=*/false));
9626         return cp_build_qualified_type_real (type,
9627                                              cp_type_quals (t)
9628                                              | cp_type_quals (type),
9629                                              complain);
9630       }
9631
9632     case DECLTYPE_TYPE:
9633       {
9634         tree type;
9635
9636         ++skip_evaluation;
9637
9638         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
9639                             complain, in_decl,
9640                             /*integral_constant_expression_p=*/false);
9641
9642         --skip_evaluation;
9643
9644         type =
9645           finish_decltype_type (type,
9646                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9647         return cp_build_qualified_type_real (type,
9648                                              cp_type_quals (t)
9649                                              | cp_type_quals (type),
9650                                              complain);
9651       }
9652
9653     case TYPE_ARGUMENT_PACK:
9654     case NONTYPE_ARGUMENT_PACK:
9655       {
9656         tree r = make_node (TREE_CODE (t));
9657         tree packed_out = 
9658           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9659                                 args,
9660                                 complain,
9661                                 in_decl);
9662         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9663
9664         /* For template nontype argument packs, also substitute into
9665            the type.  */
9666         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9667           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9668
9669         return r;
9670       }
9671       break;
9672
9673     default:
9674       sorry ("use of %qs in template",
9675              tree_code_name [(int) TREE_CODE (t)]);
9676       return error_mark_node;
9677     }
9678 }
9679
9680 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9681    type of the expression on the left-hand side of the "." or "->"
9682    operator.  */
9683
9684 static tree
9685 tsubst_baselink (tree baselink, tree object_type,
9686                  tree args, tsubst_flags_t complain, tree in_decl)
9687 {
9688     tree name;
9689     tree qualifying_scope;
9690     tree fns;
9691     tree optype;
9692     tree template_args = 0;
9693     bool template_id_p = false;
9694
9695     /* A baselink indicates a function from a base class.  Both the
9696        BASELINK_ACCESS_BINFO and the base class referenced may
9697        indicate bases of the template class, rather than the
9698        instantiated class.  In addition, lookups that were not
9699        ambiguous before may be ambiguous now.  Therefore, we perform
9700        the lookup again.  */
9701     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9702     qualifying_scope = tsubst (qualifying_scope, args,
9703                                complain, in_decl);
9704     fns = BASELINK_FUNCTIONS (baselink);
9705     optype = BASELINK_OPTYPE (baselink);
9706     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9707       {
9708         template_id_p = true;
9709         template_args = TREE_OPERAND (fns, 1);
9710         fns = TREE_OPERAND (fns, 0);
9711         if (template_args)
9712           template_args = tsubst_template_args (template_args, args,
9713                                                 complain, in_decl);
9714       }
9715     name = DECL_NAME (get_first_fn (fns));
9716     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9717
9718     /* If lookup found a single function, mark it as used at this
9719        point.  (If it lookup found multiple functions the one selected
9720        later by overload resolution will be marked as used at that
9721        point.)  */
9722     if (BASELINK_P (baselink))
9723       fns = BASELINK_FUNCTIONS (baselink);
9724     if (!template_id_p && !really_overloaded_fn (fns))
9725       mark_used (OVL_CURRENT (fns));
9726
9727     /* Add back the template arguments, if present.  */
9728     if (BASELINK_P (baselink) && template_id_p)
9729       BASELINK_FUNCTIONS (baselink)
9730         = build_nt (TEMPLATE_ID_EXPR,
9731                     BASELINK_FUNCTIONS (baselink),
9732                     template_args);
9733     /* Update the conversion operator type.  */
9734     BASELINK_OPTYPE (baselink) 
9735       = tsubst (optype, args, complain, in_decl);
9736
9737     if (!object_type)
9738       object_type = current_class_type;
9739     return adjust_result_of_qualified_name_lookup (baselink,
9740                                                    qualifying_scope,
9741                                                    object_type);
9742 }
9743
9744 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9745    true if the qualified-id will be a postfix-expression in-and-of
9746    itself; false if more of the postfix-expression follows the
9747    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9748    of "&".  */
9749
9750 static tree
9751 tsubst_qualified_id (tree qualified_id, tree args,
9752                      tsubst_flags_t complain, tree in_decl,
9753                      bool done, bool address_p)
9754 {
9755   tree expr;
9756   tree scope;
9757   tree name;
9758   bool is_template;
9759   tree template_args;
9760
9761   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9762
9763   /* Figure out what name to look up.  */
9764   name = TREE_OPERAND (qualified_id, 1);
9765   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9766     {
9767       is_template = true;
9768       template_args = TREE_OPERAND (name, 1);
9769       if (template_args)
9770         template_args = tsubst_template_args (template_args, args,
9771                                               complain, in_decl);
9772       name = TREE_OPERAND (name, 0);
9773     }
9774   else
9775     {
9776       is_template = false;
9777       template_args = NULL_TREE;
9778     }
9779
9780   /* Substitute into the qualifying scope.  When there are no ARGS, we
9781      are just trying to simplify a non-dependent expression.  In that
9782      case the qualifying scope may be dependent, and, in any case,
9783      substituting will not help.  */
9784   scope = TREE_OPERAND (qualified_id, 0);
9785   if (args)
9786     {
9787       scope = tsubst (scope, args, complain, in_decl);
9788       expr = tsubst_copy (name, args, complain, in_decl);
9789     }
9790   else
9791     expr = name;
9792
9793   if (dependent_type_p (scope))
9794     return build_qualified_name (/*type=*/NULL_TREE,
9795                                  scope, expr,
9796                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9797
9798   if (!BASELINK_P (name) && !DECL_P (expr))
9799     {
9800       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9801         /* If this were actually a destructor call, it would have been
9802            parsed as such by the parser.  */
9803         expr = error_mark_node;
9804       else
9805         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9806       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9807                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9808         {
9809           if (complain & tf_error)
9810             {
9811               error ("dependent-name %qE is parsed as a non-type, but "
9812                      "instantiation yields a type", qualified_id);
9813               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
9814             }
9815           return error_mark_node;
9816         }
9817     }
9818
9819   if (DECL_P (expr))
9820     {
9821       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9822                                            scope);
9823       /* Remember that there was a reference to this entity.  */
9824       mark_used (expr);
9825     }
9826
9827   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9828     {
9829       if (complain & tf_error)
9830         qualified_name_lookup_error (scope,
9831                                      TREE_OPERAND (qualified_id, 1),
9832                                      expr, input_location);
9833       return error_mark_node;
9834     }
9835
9836   if (is_template)
9837     expr = lookup_template_function (expr, template_args);
9838
9839   if (expr == error_mark_node && complain & tf_error)
9840     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9841                                  expr, input_location);
9842   else if (TYPE_P (scope))
9843     {
9844       expr = (adjust_result_of_qualified_name_lookup
9845               (expr, scope, current_class_type));
9846       expr = (finish_qualified_id_expr
9847               (scope, expr, done, address_p,
9848                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9849                /*template_arg_p=*/false));
9850     }
9851
9852   /* Expressions do not generally have reference type.  */
9853   if (TREE_CODE (expr) != SCOPE_REF
9854       /* However, if we're about to form a pointer-to-member, we just
9855          want the referenced member referenced.  */
9856       && TREE_CODE (expr) != OFFSET_REF)
9857     expr = convert_from_reference (expr);
9858
9859   return expr;
9860 }
9861
9862 /* Like tsubst, but deals with expressions.  This function just replaces
9863    template parms; to finish processing the resultant expression, use
9864    tsubst_expr.  */
9865
9866 static tree
9867 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9868 {
9869   enum tree_code code;
9870   tree r;
9871
9872   if (t == NULL_TREE || t == error_mark_node)
9873     return t;
9874
9875   code = TREE_CODE (t);
9876
9877   switch (code)
9878     {
9879     case PARM_DECL:
9880       r = retrieve_local_specialization (t);
9881
9882       if (r == NULL)
9883         {
9884           /* This can happen for a parameter name used later in a function
9885              declaration (such as in a late-specified return type).
9886              Replace it with an arbitrary expression with the same type
9887              (*(T*)0).  This should only occur in an unevaluated context
9888              (i.e. decltype).  */
9889           gcc_assert (skip_evaluation);
9890           r = non_reference (TREE_TYPE (t));
9891           r = tsubst (r, args, complain, in_decl);
9892           r = build_pointer_type (r);
9893           r = build_c_cast (r, null_node);
9894           return cp_build_indirect_ref (r, NULL, tf_warning_or_error);
9895         }
9896       
9897       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9898         r = ARGUMENT_PACK_SELECT_ARG (r);
9899       mark_used (r);
9900       return r;
9901
9902     case CONST_DECL:
9903       {
9904         tree enum_type;
9905         tree v;
9906
9907         if (DECL_TEMPLATE_PARM_P (t))
9908           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9909         /* There is no need to substitute into namespace-scope
9910            enumerators.  */
9911         if (DECL_NAMESPACE_SCOPE_P (t))
9912           return t;
9913         /* If ARGS is NULL, then T is known to be non-dependent.  */
9914         if (args == NULL_TREE)
9915           return integral_constant_value (t);
9916
9917         /* Unfortunately, we cannot just call lookup_name here.
9918            Consider:
9919
9920              template <int I> int f() {
9921              enum E { a = I };
9922              struct S { void g() { E e = a; } };
9923              };
9924
9925            When we instantiate f<7>::S::g(), say, lookup_name is not
9926            clever enough to find f<7>::a.  */
9927         enum_type
9928           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9929                               /*entering_scope=*/0);
9930
9931         for (v = TYPE_VALUES (enum_type);
9932              v != NULL_TREE;
9933              v = TREE_CHAIN (v))
9934           if (TREE_PURPOSE (v) == DECL_NAME (t))
9935             return TREE_VALUE (v);
9936
9937           /* We didn't find the name.  That should never happen; if
9938              name-lookup found it during preliminary parsing, we
9939              should find it again here during instantiation.  */
9940         gcc_unreachable ();
9941       }
9942       return t;
9943
9944     case FIELD_DECL:
9945       if (DECL_CONTEXT (t))
9946         {
9947           tree ctx;
9948
9949           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9950                                   /*entering_scope=*/1);
9951           if (ctx != DECL_CONTEXT (t))
9952             {
9953               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9954               if (!r)
9955                 {
9956                   if (complain & tf_error)
9957                     error ("using invalid field %qD", t);
9958                   return error_mark_node;
9959                 }
9960               return r;
9961             }
9962         }
9963
9964       return t;
9965
9966     case VAR_DECL:
9967     case FUNCTION_DECL:
9968       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9969           || local_variable_p (t))
9970         t = tsubst (t, args, complain, in_decl);
9971       mark_used (t);
9972       return t;
9973
9974     case BASELINK:
9975       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9976
9977     case TEMPLATE_DECL:
9978       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9979         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9980                        args, complain, in_decl);
9981       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9982         return tsubst (t, args, complain, in_decl);
9983       else if (DECL_CLASS_SCOPE_P (t)
9984                && uses_template_parms (DECL_CONTEXT (t)))
9985         {
9986           /* Template template argument like the following example need
9987              special treatment:
9988
9989                template <template <class> class TT> struct C {};
9990                template <class T> struct D {
9991                  template <class U> struct E {};
9992                  C<E> c;                                // #1
9993                };
9994                D<int> d;                                // #2
9995
9996              We are processing the template argument `E' in #1 for
9997              the template instantiation #2.  Originally, `E' is a
9998              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9999              have to substitute this with one having context `D<int>'.  */
10000
10001           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
10002           return lookup_field (context, DECL_NAME(t), 0, false);
10003         }
10004       else
10005         /* Ordinary template template argument.  */
10006         return t;
10007
10008     case CAST_EXPR:
10009     case REINTERPRET_CAST_EXPR:
10010     case CONST_CAST_EXPR:
10011     case STATIC_CAST_EXPR:
10012     case DYNAMIC_CAST_EXPR:
10013     case NOP_EXPR:
10014       return build1
10015         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
10016          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
10017
10018     case SIZEOF_EXPR:
10019       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10020         {
10021           /* We only want to compute the number of arguments.  */
10022           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10023                                                 complain, in_decl);
10024           int len = 0;
10025
10026           if (TREE_CODE (expanded) == TREE_VEC)
10027             len = TREE_VEC_LENGTH (expanded);
10028
10029           if (expanded == error_mark_node)
10030             return error_mark_node;
10031           else if (PACK_EXPANSION_P (expanded)
10032                    || (TREE_CODE (expanded) == TREE_VEC
10033                        && len > 0
10034                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
10035             {
10036               if (TREE_CODE (expanded) == TREE_VEC)
10037                 expanded = TREE_VEC_ELT (expanded, len - 1);
10038
10039               if (TYPE_P (expanded))
10040                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
10041                                                    complain & tf_error);
10042               else
10043                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
10044                                                    complain & tf_error);
10045             }
10046           else
10047             return build_int_cst (size_type_node, len);
10048         }
10049       /* Fall through */
10050
10051     case INDIRECT_REF:
10052     case NEGATE_EXPR:
10053     case TRUTH_NOT_EXPR:
10054     case BIT_NOT_EXPR:
10055     case ADDR_EXPR:
10056     case UNARY_PLUS_EXPR:      /* Unary + */
10057     case ALIGNOF_EXPR:
10058     case ARROW_EXPR:
10059     case THROW_EXPR:
10060     case TYPEID_EXPR:
10061     case REALPART_EXPR:
10062     case IMAGPART_EXPR:
10063       return build1
10064         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
10065          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
10066
10067     case COMPONENT_REF:
10068       {
10069         tree object;
10070         tree name;
10071
10072         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
10073         name = TREE_OPERAND (t, 1);
10074         if (TREE_CODE (name) == BIT_NOT_EXPR)
10075           {
10076             name = tsubst_copy (TREE_OPERAND (name, 0), args,
10077                                 complain, in_decl);
10078             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
10079           }
10080         else if (TREE_CODE (name) == SCOPE_REF
10081                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
10082           {
10083             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
10084                                      complain, in_decl);
10085             name = TREE_OPERAND (name, 1);
10086             name = tsubst_copy (TREE_OPERAND (name, 0), args,
10087                                 complain, in_decl);
10088             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
10089             name = build_qualified_name (/*type=*/NULL_TREE,
10090                                          base, name,
10091                                          /*template_p=*/false);
10092           }
10093         else if (TREE_CODE (name) == BASELINK)
10094           name = tsubst_baselink (name,
10095                                   non_reference (TREE_TYPE (object)),
10096                                   args, complain,
10097                                   in_decl);
10098         else
10099           name = tsubst_copy (name, args, complain, in_decl);
10100         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
10101       }
10102
10103     case PLUS_EXPR:
10104     case MINUS_EXPR:
10105     case MULT_EXPR:
10106     case TRUNC_DIV_EXPR:
10107     case CEIL_DIV_EXPR:
10108     case FLOOR_DIV_EXPR:
10109     case ROUND_DIV_EXPR:
10110     case EXACT_DIV_EXPR:
10111     case BIT_AND_EXPR:
10112     case BIT_IOR_EXPR:
10113     case BIT_XOR_EXPR:
10114     case TRUNC_MOD_EXPR:
10115     case FLOOR_MOD_EXPR:
10116     case TRUTH_ANDIF_EXPR:
10117     case TRUTH_ORIF_EXPR:
10118     case TRUTH_AND_EXPR:
10119     case TRUTH_OR_EXPR:
10120     case RSHIFT_EXPR:
10121     case LSHIFT_EXPR:
10122     case RROTATE_EXPR:
10123     case LROTATE_EXPR:
10124     case EQ_EXPR:
10125     case NE_EXPR:
10126     case MAX_EXPR:
10127     case MIN_EXPR:
10128     case LE_EXPR:
10129     case GE_EXPR:
10130     case LT_EXPR:
10131     case GT_EXPR:
10132     case COMPOUND_EXPR:
10133     case DOTSTAR_EXPR:
10134     case MEMBER_REF:
10135     case PREDECREMENT_EXPR:
10136     case PREINCREMENT_EXPR:
10137     case POSTDECREMENT_EXPR:
10138     case POSTINCREMENT_EXPR:
10139       return build_nt
10140         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10141          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10142
10143     case SCOPE_REF:
10144       return build_qualified_name (/*type=*/NULL_TREE,
10145                                    tsubst_copy (TREE_OPERAND (t, 0),
10146                                                 args, complain, in_decl),
10147                                    tsubst_copy (TREE_OPERAND (t, 1),
10148                                                 args, complain, in_decl),
10149                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10150
10151     case ARRAY_REF:
10152       return build_nt
10153         (ARRAY_REF,
10154          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10155          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10156          NULL_TREE, NULL_TREE);
10157
10158     case CALL_EXPR:
10159       {
10160         int n = VL_EXP_OPERAND_LENGTH (t);
10161         tree result = build_vl_exp (CALL_EXPR, n);
10162         int i;
10163         for (i = 0; i < n; i++)
10164           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10165                                              complain, in_decl);
10166         return result;
10167       }
10168
10169     case COND_EXPR:
10170     case MODOP_EXPR:
10171     case PSEUDO_DTOR_EXPR:
10172       {
10173         r = build_nt
10174           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10175            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10176            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10177         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10178         return r;
10179       }
10180
10181     case NEW_EXPR:
10182       {
10183         r = build_nt
10184         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10185          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10186          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10187         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10188         return r;
10189       }
10190
10191     case DELETE_EXPR:
10192       {
10193         r = build_nt
10194         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10195          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10196         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10197         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10198         return r;
10199       }
10200
10201     case TEMPLATE_ID_EXPR:
10202       {
10203         /* Substituted template arguments */
10204         tree fn = TREE_OPERAND (t, 0);
10205         tree targs = TREE_OPERAND (t, 1);
10206
10207         fn = tsubst_copy (fn, args, complain, in_decl);
10208         if (targs)
10209           targs = tsubst_template_args (targs, args, complain, in_decl);
10210
10211         return lookup_template_function (fn, targs);
10212       }
10213
10214     case TREE_LIST:
10215       {
10216         tree purpose, value, chain;
10217
10218         if (t == void_list_node)
10219           return t;
10220
10221         purpose = TREE_PURPOSE (t);
10222         if (purpose)
10223           purpose = tsubst_copy (purpose, args, complain, in_decl);
10224         value = TREE_VALUE (t);
10225         if (value)
10226           value = tsubst_copy (value, args, complain, in_decl);
10227         chain = TREE_CHAIN (t);
10228         if (chain && chain != void_type_node)
10229           chain = tsubst_copy (chain, args, complain, in_decl);
10230         if (purpose == TREE_PURPOSE (t)
10231             && value == TREE_VALUE (t)
10232             && chain == TREE_CHAIN (t))
10233           return t;
10234         return tree_cons (purpose, value, chain);
10235       }
10236
10237     case RECORD_TYPE:
10238     case UNION_TYPE:
10239     case ENUMERAL_TYPE:
10240     case INTEGER_TYPE:
10241     case TEMPLATE_TYPE_PARM:
10242     case TEMPLATE_TEMPLATE_PARM:
10243     case BOUND_TEMPLATE_TEMPLATE_PARM:
10244     case TEMPLATE_PARM_INDEX:
10245     case POINTER_TYPE:
10246     case REFERENCE_TYPE:
10247     case OFFSET_TYPE:
10248     case FUNCTION_TYPE:
10249     case METHOD_TYPE:
10250     case ARRAY_TYPE:
10251     case TYPENAME_TYPE:
10252     case UNBOUND_CLASS_TEMPLATE:
10253     case TYPEOF_TYPE:
10254     case DECLTYPE_TYPE:
10255     case TYPE_DECL:
10256       return tsubst (t, args, complain, in_decl);
10257
10258     case IDENTIFIER_NODE:
10259       if (IDENTIFIER_TYPENAME_P (t))
10260         {
10261           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10262           return mangle_conv_op_name_for_type (new_type);
10263         }
10264       else
10265         return t;
10266
10267     case CONSTRUCTOR:
10268       /* This is handled by tsubst_copy_and_build.  */
10269       gcc_unreachable ();
10270
10271     case VA_ARG_EXPR:
10272       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10273                                           in_decl),
10274                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10275
10276     case CLEANUP_POINT_EXPR:
10277       /* We shouldn't have built any of these during initial template
10278          generation.  Instead, they should be built during instantiation
10279          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10280       gcc_unreachable ();
10281
10282     case OFFSET_REF:
10283       mark_used (TREE_OPERAND (t, 1));
10284       return t;
10285
10286     case EXPR_PACK_EXPANSION:
10287       error ("invalid use of pack expansion expression");
10288       return error_mark_node;
10289
10290     case NONTYPE_ARGUMENT_PACK:
10291       error ("use %<...%> to expand argument pack");
10292       return error_mark_node;
10293
10294     default:
10295       return t;
10296     }
10297 }
10298
10299 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10300
10301 static tree
10302 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10303                     tree in_decl)
10304 {
10305   tree new_clauses = NULL, nc, oc;
10306
10307   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10308     {
10309       nc = copy_node (oc);
10310       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10311       new_clauses = nc;
10312
10313       switch (OMP_CLAUSE_CODE (nc))
10314         {
10315         case OMP_CLAUSE_LASTPRIVATE:
10316           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10317             {
10318               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10319               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10320                            in_decl, /*integral_constant_expression_p=*/false);
10321               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10322                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10323             }
10324           /* FALLTHRU */
10325         case OMP_CLAUSE_PRIVATE:
10326         case OMP_CLAUSE_SHARED:
10327         case OMP_CLAUSE_FIRSTPRIVATE:
10328         case OMP_CLAUSE_REDUCTION:
10329         case OMP_CLAUSE_COPYIN:
10330         case OMP_CLAUSE_COPYPRIVATE:
10331         case OMP_CLAUSE_IF:
10332         case OMP_CLAUSE_NUM_THREADS:
10333         case OMP_CLAUSE_SCHEDULE:
10334         case OMP_CLAUSE_COLLAPSE:
10335           OMP_CLAUSE_OPERAND (nc, 0)
10336             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10337                            in_decl, /*integral_constant_expression_p=*/false);
10338           break;
10339         case OMP_CLAUSE_NOWAIT:
10340         case OMP_CLAUSE_ORDERED:
10341         case OMP_CLAUSE_DEFAULT:
10342         case OMP_CLAUSE_UNTIED:
10343           break;
10344         default:
10345           gcc_unreachable ();
10346         }
10347     }
10348
10349   return finish_omp_clauses (nreverse (new_clauses));
10350 }
10351
10352 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10353
10354 static tree
10355 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10356                           tree in_decl)
10357 {
10358 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10359
10360   tree purpose, value, chain;
10361
10362   if (t == NULL)
10363     return t;
10364
10365   if (TREE_CODE (t) != TREE_LIST)
10366     return tsubst_copy_and_build (t, args, complain, in_decl,
10367                                   /*function_p=*/false,
10368                                   /*integral_constant_expression_p=*/false);
10369
10370   if (t == void_list_node)
10371     return t;
10372
10373   purpose = TREE_PURPOSE (t);
10374   if (purpose)
10375     purpose = RECUR (purpose);
10376   value = TREE_VALUE (t);
10377   if (value)
10378     value = RECUR (value);
10379   chain = TREE_CHAIN (t);
10380   if (chain && chain != void_type_node)
10381     chain = RECUR (chain);
10382   return tree_cons (purpose, value, chain);
10383 #undef RECUR
10384 }
10385
10386 /* Substitute one OMP_FOR iterator.  */
10387
10388 static void
10389 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
10390                          tree condv, tree incrv, tree *clauses,
10391                          tree args, tsubst_flags_t complain, tree in_decl,
10392                          bool integral_constant_expression_p)
10393 {
10394 #define RECUR(NODE)                             \
10395   tsubst_expr ((NODE), args, complain, in_decl, \
10396                integral_constant_expression_p)
10397   tree decl, init, cond, incr, auto_node;
10398
10399   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
10400   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10401   decl = RECUR (TREE_OPERAND (init, 0));
10402   init = TREE_OPERAND (init, 1);
10403   auto_node = type_uses_auto (TREE_TYPE (decl));
10404   if (auto_node && init)
10405     {
10406       tree init_expr = init;
10407       if (TREE_CODE (init_expr) == DECL_EXPR)
10408         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
10409       init_expr = RECUR (init_expr);
10410       TREE_TYPE (decl)
10411         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
10412     }
10413   gcc_assert (!type_dependent_expression_p (decl));
10414
10415   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
10416     {
10417       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
10418       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10419       if (TREE_CODE (incr) == MODIFY_EXPR)
10420         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
10421                                     RECUR (TREE_OPERAND (incr, 1)),
10422                                     complain);
10423       else
10424         incr = RECUR (incr);
10425       TREE_VEC_ELT (declv, i) = decl;
10426       TREE_VEC_ELT (initv, i) = init;
10427       TREE_VEC_ELT (condv, i) = cond;
10428       TREE_VEC_ELT (incrv, i) = incr;
10429       return;
10430     }
10431
10432   if (init && TREE_CODE (init) != DECL_EXPR)
10433     {
10434       tree c;
10435       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
10436         {
10437           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
10438                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
10439               && OMP_CLAUSE_DECL (c) == decl)
10440             break;
10441           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
10442                    && OMP_CLAUSE_DECL (c) == decl)
10443             error ("iteration variable %qD should not be firstprivate", decl);
10444           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
10445                    && OMP_CLAUSE_DECL (c) == decl)
10446             error ("iteration variable %qD should not be reduction", decl);
10447         }
10448       if (c == NULL)
10449         {
10450           c = build_omp_clause (OMP_CLAUSE_PRIVATE);
10451           OMP_CLAUSE_DECL (c) = decl;
10452           c = finish_omp_clauses (c);
10453           if (c)
10454             {
10455               OMP_CLAUSE_CHAIN (c) = *clauses;
10456               *clauses = c;
10457             }
10458         }
10459     }
10460   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
10461   if (COMPARISON_CLASS_P (cond))
10462     cond = build2 (TREE_CODE (cond), boolean_type_node,
10463                    RECUR (TREE_OPERAND (cond, 0)),
10464                    RECUR (TREE_OPERAND (cond, 1)));
10465   else
10466     cond = RECUR (cond);
10467   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10468   switch (TREE_CODE (incr))
10469     {
10470     case PREINCREMENT_EXPR:
10471     case PREDECREMENT_EXPR:
10472     case POSTINCREMENT_EXPR:
10473     case POSTDECREMENT_EXPR:
10474       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
10475                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
10476       break;
10477     case MODIFY_EXPR:
10478       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10479           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10480         {
10481           tree rhs = TREE_OPERAND (incr, 1);
10482           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10483                          RECUR (TREE_OPERAND (incr, 0)),
10484                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10485                                  RECUR (TREE_OPERAND (rhs, 0)),
10486                                  RECUR (TREE_OPERAND (rhs, 1))));
10487         }
10488       else
10489         incr = RECUR (incr);
10490       break;
10491     case MODOP_EXPR:
10492       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10493           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10494         {
10495           tree lhs = RECUR (TREE_OPERAND (incr, 0));
10496           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
10497                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
10498                                  TREE_TYPE (decl), lhs,
10499                                  RECUR (TREE_OPERAND (incr, 2))));
10500         }
10501       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
10502                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
10503                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
10504         {
10505           tree rhs = TREE_OPERAND (incr, 2);
10506           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10507                          RECUR (TREE_OPERAND (incr, 0)),
10508                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10509                                  RECUR (TREE_OPERAND (rhs, 0)),
10510                                  RECUR (TREE_OPERAND (rhs, 1))));
10511         }
10512       else
10513         incr = RECUR (incr);
10514       break;
10515     default:
10516       incr = RECUR (incr);
10517       break;
10518     }
10519
10520   TREE_VEC_ELT (declv, i) = decl;
10521   TREE_VEC_ELT (initv, i) = init;
10522   TREE_VEC_ELT (condv, i) = cond;
10523   TREE_VEC_ELT (incrv, i) = incr;
10524 #undef RECUR
10525 }
10526
10527 /* Like tsubst_copy for expressions, etc. but also does semantic
10528    processing.  */
10529
10530 static tree
10531 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10532              bool integral_constant_expression_p)
10533 {
10534 #define RECUR(NODE)                             \
10535   tsubst_expr ((NODE), args, complain, in_decl, \
10536                integral_constant_expression_p)
10537
10538   tree stmt, tmp;
10539
10540   if (t == NULL_TREE || t == error_mark_node)
10541     return t;
10542
10543   if (EXPR_HAS_LOCATION (t))
10544     input_location = EXPR_LOCATION (t);
10545   if (STATEMENT_CODE_P (TREE_CODE (t)))
10546     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10547
10548   switch (TREE_CODE (t))
10549     {
10550     case STATEMENT_LIST:
10551       {
10552         tree_stmt_iterator i;
10553         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10554           RECUR (tsi_stmt (i));
10555         break;
10556       }
10557
10558     case CTOR_INITIALIZER:
10559       finish_mem_initializers (tsubst_initializer_list
10560                                (TREE_OPERAND (t, 0), args));
10561       break;
10562
10563     case RETURN_EXPR:
10564       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10565       break;
10566
10567     case EXPR_STMT:
10568       tmp = RECUR (EXPR_STMT_EXPR (t));
10569       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10570         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10571       else
10572         finish_expr_stmt (tmp);
10573       break;
10574
10575     case USING_STMT:
10576       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10577       break;
10578
10579     case DECL_EXPR:
10580       {
10581         tree decl;
10582         tree init;
10583
10584         decl = DECL_EXPR_DECL (t);
10585         if (TREE_CODE (decl) == LABEL_DECL)
10586           finish_label_decl (DECL_NAME (decl));
10587         else if (TREE_CODE (decl) == USING_DECL)
10588           {
10589             tree scope = USING_DECL_SCOPE (decl);
10590             tree name = DECL_NAME (decl);
10591             tree decl;
10592
10593             scope = RECUR (scope);
10594             decl = lookup_qualified_name (scope, name,
10595                                           /*is_type_p=*/false,
10596                                           /*complain=*/false);
10597             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10598               qualified_name_lookup_error (scope, name, decl, input_location);
10599             else
10600               do_local_using_decl (decl, scope, name);
10601           }
10602         else
10603           {
10604             init = DECL_INITIAL (decl);
10605             decl = tsubst (decl, args, complain, in_decl);
10606             if (decl != error_mark_node)
10607               {
10608                 /* By marking the declaration as instantiated, we avoid
10609                    trying to instantiate it.  Since instantiate_decl can't
10610                    handle local variables, and since we've already done
10611                    all that needs to be done, that's the right thing to
10612                    do.  */
10613                 if (TREE_CODE (decl) == VAR_DECL)
10614                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10615                 if (TREE_CODE (decl) == VAR_DECL
10616                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10617                   /* Anonymous aggregates are a special case.  */
10618                   finish_anon_union (decl);
10619                 else
10620                   {
10621                     maybe_push_decl (decl);
10622                     if (TREE_CODE (decl) == VAR_DECL
10623                         && DECL_PRETTY_FUNCTION_P (decl))
10624                       {
10625                         /* For __PRETTY_FUNCTION__ we have to adjust the
10626                            initializer.  */
10627                         const char *const name
10628                           = cxx_printable_name (current_function_decl, 2);
10629                         init = cp_fname_init (name, &TREE_TYPE (decl));
10630                       }
10631                     else
10632                       {
10633                         tree t = RECUR (init);
10634
10635                         if (init && !t)
10636                           /* If we had an initializer but it
10637                              instantiated to nothing,
10638                              value-initialize the object.  This will
10639                              only occur when the initializer was a
10640                              pack expansion where the parameter packs
10641                              used in that expansion were of length
10642                              zero.  */
10643                           init = build_value_init (TREE_TYPE (decl));
10644                         else
10645                           init = t;
10646                       }
10647
10648                     finish_decl (decl, init, NULL_TREE);
10649                   }
10650               }
10651           }
10652
10653         /* A DECL_EXPR can also be used as an expression, in the condition
10654            clause of an if/for/while construct.  */
10655         return decl;
10656       }
10657
10658     case FOR_STMT:
10659       stmt = begin_for_stmt ();
10660                           RECUR (FOR_INIT_STMT (t));
10661       finish_for_init_stmt (stmt);
10662       tmp = RECUR (FOR_COND (t));
10663       finish_for_cond (tmp, stmt);
10664       tmp = RECUR (FOR_EXPR (t));
10665       finish_for_expr (tmp, stmt);
10666       RECUR (FOR_BODY (t));
10667       finish_for_stmt (stmt);
10668       break;
10669
10670     case WHILE_STMT:
10671       stmt = begin_while_stmt ();
10672       tmp = RECUR (WHILE_COND (t));
10673       finish_while_stmt_cond (tmp, stmt);
10674       RECUR (WHILE_BODY (t));
10675       finish_while_stmt (stmt);
10676       break;
10677
10678     case DO_STMT:
10679       stmt = begin_do_stmt ();
10680       RECUR (DO_BODY (t));
10681       finish_do_body (stmt);
10682       tmp = RECUR (DO_COND (t));
10683       finish_do_stmt (tmp, stmt);
10684       break;
10685
10686     case IF_STMT:
10687       stmt = begin_if_stmt ();
10688       tmp = RECUR (IF_COND (t));
10689       finish_if_stmt_cond (tmp, stmt);
10690       RECUR (THEN_CLAUSE (t));
10691       finish_then_clause (stmt);
10692
10693       if (ELSE_CLAUSE (t))
10694         {
10695           begin_else_clause (stmt);
10696           RECUR (ELSE_CLAUSE (t));
10697           finish_else_clause (stmt);
10698         }
10699
10700       finish_if_stmt (stmt);
10701       break;
10702
10703     case BIND_EXPR:
10704       if (BIND_EXPR_BODY_BLOCK (t))
10705         stmt = begin_function_body ();
10706       else
10707         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10708                                     ? BCS_TRY_BLOCK : 0);
10709
10710       RECUR (BIND_EXPR_BODY (t));
10711
10712       if (BIND_EXPR_BODY_BLOCK (t))
10713         finish_function_body (stmt);
10714       else
10715         finish_compound_stmt (stmt);
10716       break;
10717
10718     case BREAK_STMT:
10719       finish_break_stmt ();
10720       break;
10721
10722     case CONTINUE_STMT:
10723       finish_continue_stmt ();
10724       break;
10725
10726     case SWITCH_STMT:
10727       stmt = begin_switch_stmt ();
10728       tmp = RECUR (SWITCH_STMT_COND (t));
10729       finish_switch_cond (tmp, stmt);
10730       RECUR (SWITCH_STMT_BODY (t));
10731       finish_switch_stmt (stmt);
10732       break;
10733
10734     case CASE_LABEL_EXPR:
10735       finish_case_label (RECUR (CASE_LOW (t)),
10736                          RECUR (CASE_HIGH (t)));
10737       break;
10738
10739     case LABEL_EXPR:
10740       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10741       break;
10742
10743     case GOTO_EXPR:
10744       tmp = GOTO_DESTINATION (t);
10745       if (TREE_CODE (tmp) != LABEL_DECL)
10746         /* Computed goto's must be tsubst'd into.  On the other hand,
10747            non-computed gotos must not be; the identifier in question
10748            will have no binding.  */
10749         tmp = RECUR (tmp);
10750       else
10751         tmp = DECL_NAME (tmp);
10752       finish_goto_stmt (tmp);
10753       break;
10754
10755     case ASM_EXPR:
10756       tmp = finish_asm_stmt
10757         (ASM_VOLATILE_P (t),
10758          RECUR (ASM_STRING (t)),
10759          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10760          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10761          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10762       {
10763         tree asm_expr = tmp;
10764         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10765           asm_expr = TREE_OPERAND (asm_expr, 0);
10766         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10767       }
10768       break;
10769
10770     case TRY_BLOCK:
10771       if (CLEANUP_P (t))
10772         {
10773           stmt = begin_try_block ();
10774           RECUR (TRY_STMTS (t));
10775           finish_cleanup_try_block (stmt);
10776           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10777         }
10778       else
10779         {
10780           tree compound_stmt = NULL_TREE;
10781
10782           if (FN_TRY_BLOCK_P (t))
10783             stmt = begin_function_try_block (&compound_stmt);
10784           else
10785             stmt = begin_try_block ();
10786
10787           RECUR (TRY_STMTS (t));
10788
10789           if (FN_TRY_BLOCK_P (t))
10790             finish_function_try_block (stmt);
10791           else
10792             finish_try_block (stmt);
10793
10794           RECUR (TRY_HANDLERS (t));
10795           if (FN_TRY_BLOCK_P (t))
10796             finish_function_handler_sequence (stmt, compound_stmt);
10797           else
10798             finish_handler_sequence (stmt);
10799         }
10800       break;
10801
10802     case HANDLER:
10803       {
10804         tree decl = HANDLER_PARMS (t);
10805
10806         if (decl)
10807           {
10808             decl = tsubst (decl, args, complain, in_decl);
10809             /* Prevent instantiate_decl from trying to instantiate
10810                this variable.  We've already done all that needs to be
10811                done.  */
10812             if (decl != error_mark_node)
10813               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10814           }
10815         stmt = begin_handler ();
10816         finish_handler_parms (decl, stmt);
10817         RECUR (HANDLER_BODY (t));
10818         finish_handler (stmt);
10819       }
10820       break;
10821
10822     case TAG_DEFN:
10823       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10824       break;
10825
10826     case STATIC_ASSERT:
10827       {
10828         tree condition = 
10829           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10830                        args,
10831                        complain, in_decl,
10832                        /*integral_constant_expression_p=*/true);
10833         finish_static_assert (condition,
10834                               STATIC_ASSERT_MESSAGE (t),
10835                               STATIC_ASSERT_SOURCE_LOCATION (t),
10836                               /*member_p=*/false);
10837       }
10838       break;
10839
10840     case OMP_PARALLEL:
10841       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10842                                 args, complain, in_decl);
10843       stmt = begin_omp_parallel ();
10844       RECUR (OMP_PARALLEL_BODY (t));
10845       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10846         = OMP_PARALLEL_COMBINED (t);
10847       break;
10848
10849     case OMP_TASK:
10850       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
10851                                 args, complain, in_decl);
10852       stmt = begin_omp_task ();
10853       RECUR (OMP_TASK_BODY (t));
10854       finish_omp_task (tmp, stmt);
10855       break;
10856
10857     case OMP_FOR:
10858       {
10859         tree clauses, body, pre_body;
10860         tree declv, initv, condv, incrv;
10861         int i;
10862
10863         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10864                                       args, complain, in_decl);
10865         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10866         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10867         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10868         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10869
10870         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
10871           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
10872                                    &clauses, args, complain, in_decl,
10873                                    integral_constant_expression_p);
10874
10875         stmt = begin_omp_structured_block ();
10876
10877         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
10878           if (TREE_VEC_ELT (initv, i) == NULL
10879               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
10880             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
10881           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
10882             {
10883               tree init = RECUR (TREE_VEC_ELT (initv, i));
10884               gcc_assert (init == TREE_VEC_ELT (declv, i));
10885               TREE_VEC_ELT (initv, i) = NULL_TREE;
10886             }
10887           else
10888             {
10889               tree decl_expr = TREE_VEC_ELT (initv, i);
10890               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
10891               gcc_assert (init != NULL);
10892               TREE_VEC_ELT (initv, i) = RECUR (init);
10893               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
10894               RECUR (decl_expr);
10895               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
10896             }
10897
10898         pre_body = push_stmt_list ();
10899         RECUR (OMP_FOR_PRE_BODY (t));
10900         pre_body = pop_stmt_list (pre_body);
10901
10902         body = push_stmt_list ();
10903         RECUR (OMP_FOR_BODY (t));
10904         body = pop_stmt_list (body);
10905
10906         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
10907                             body, pre_body, clauses);
10908
10909         add_stmt (finish_omp_structured_block (stmt));
10910       }
10911       break;
10912
10913     case OMP_SECTIONS:
10914     case OMP_SINGLE:
10915       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10916       stmt = push_stmt_list ();
10917       RECUR (OMP_BODY (t));
10918       stmt = pop_stmt_list (stmt);
10919
10920       t = copy_node (t);
10921       OMP_BODY (t) = stmt;
10922       OMP_CLAUSES (t) = tmp;
10923       add_stmt (t);
10924       break;
10925
10926     case OMP_SECTION:
10927     case OMP_CRITICAL:
10928     case OMP_MASTER:
10929     case OMP_ORDERED:
10930       stmt = push_stmt_list ();
10931       RECUR (OMP_BODY (t));
10932       stmt = pop_stmt_list (stmt);
10933
10934       t = copy_node (t);
10935       OMP_BODY (t) = stmt;
10936       add_stmt (t);
10937       break;
10938
10939     case OMP_ATOMIC:
10940       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10941       {
10942         tree op1 = TREE_OPERAND (t, 1);
10943         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10944         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10945         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10946       }
10947       break;
10948
10949     case EXPR_PACK_EXPANSION:
10950       error ("invalid use of pack expansion expression");
10951       return error_mark_node;
10952
10953     case NONTYPE_ARGUMENT_PACK:
10954       error ("use %<...%> to expand argument pack");
10955       return error_mark_node;
10956
10957     default:
10958       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10959
10960       return tsubst_copy_and_build (t, args, complain, in_decl,
10961                                     /*function_p=*/false,
10962                                     integral_constant_expression_p);
10963     }
10964
10965   return NULL_TREE;
10966 #undef RECUR
10967 }
10968
10969 /* T is a postfix-expression that is not being used in a function
10970    call.  Return the substituted version of T.  */
10971
10972 static tree
10973 tsubst_non_call_postfix_expression (tree t, tree args,
10974                                     tsubst_flags_t complain,
10975                                     tree in_decl)
10976 {
10977   if (TREE_CODE (t) == SCOPE_REF)
10978     t = tsubst_qualified_id (t, args, complain, in_decl,
10979                              /*done=*/false, /*address_p=*/false);
10980   else
10981     t = tsubst_copy_and_build (t, args, complain, in_decl,
10982                                /*function_p=*/false,
10983                                /*integral_constant_expression_p=*/false);
10984
10985   return t;
10986 }
10987
10988 /* Like tsubst but deals with expressions and performs semantic
10989    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10990
10991 tree
10992 tsubst_copy_and_build (tree t,
10993                        tree args,
10994                        tsubst_flags_t complain,
10995                        tree in_decl,
10996                        bool function_p,
10997                        bool integral_constant_expression_p)
10998 {
10999 #define RECUR(NODE)                                             \
11000   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
11001                          /*function_p=*/false,                  \
11002                          integral_constant_expression_p)
11003
11004   tree op1;
11005
11006   if (t == NULL_TREE || t == error_mark_node)
11007     return t;
11008
11009   switch (TREE_CODE (t))
11010     {
11011     case USING_DECL:
11012       t = DECL_NAME (t);
11013       /* Fall through.  */
11014     case IDENTIFIER_NODE:
11015       {
11016         tree decl;
11017         cp_id_kind idk;
11018         bool non_integral_constant_expression_p;
11019         const char *error_msg;
11020
11021         if (IDENTIFIER_TYPENAME_P (t))
11022           {
11023             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11024             t = mangle_conv_op_name_for_type (new_type);
11025           }
11026
11027         /* Look up the name.  */
11028         decl = lookup_name (t);
11029
11030         /* By convention, expressions use ERROR_MARK_NODE to indicate
11031            failure, not NULL_TREE.  */
11032         if (decl == NULL_TREE)
11033           decl = error_mark_node;
11034
11035         decl = finish_id_expression (t, decl, NULL_TREE,
11036                                      &idk,
11037                                      integral_constant_expression_p,
11038                                      /*allow_non_integral_constant_expression_p=*/false,
11039                                      &non_integral_constant_expression_p,
11040                                      /*template_p=*/false,
11041                                      /*done=*/true,
11042                                      /*address_p=*/false,
11043                                      /*template_arg_p=*/false,
11044                                      &error_msg,
11045                                      input_location);
11046         if (error_msg)
11047           error (error_msg);
11048         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
11049           decl = unqualified_name_lookup_error (decl);
11050         return decl;
11051       }
11052
11053     case TEMPLATE_ID_EXPR:
11054       {
11055         tree object;
11056         tree templ = RECUR (TREE_OPERAND (t, 0));
11057         tree targs = TREE_OPERAND (t, 1);
11058
11059         if (targs)
11060           targs = tsubst_template_args (targs, args, complain, in_decl);
11061
11062         if (TREE_CODE (templ) == COMPONENT_REF)
11063           {
11064             object = TREE_OPERAND (templ, 0);
11065             templ = TREE_OPERAND (templ, 1);
11066           }
11067         else
11068           object = NULL_TREE;
11069         templ = lookup_template_function (templ, targs);
11070
11071         if (object)
11072           return build3 (COMPONENT_REF, TREE_TYPE (templ),
11073                          object, templ, NULL_TREE);
11074         else
11075           return baselink_for_fns (templ);
11076       }
11077
11078     case INDIRECT_REF:
11079       {
11080         tree r = RECUR (TREE_OPERAND (t, 0));
11081
11082         if (REFERENCE_REF_P (t))
11083           {
11084             /* A type conversion to reference type will be enclosed in
11085                such an indirect ref, but the substitution of the cast
11086                will have also added such an indirect ref.  */
11087             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
11088               r = convert_from_reference (r);
11089           }
11090         else
11091           r = build_x_indirect_ref (r, "unary *", complain);
11092         return r;
11093       }
11094
11095     case NOP_EXPR:
11096       return build_nop
11097         (tsubst (TREE_TYPE (t), args, complain, in_decl),
11098          RECUR (TREE_OPERAND (t, 0)));
11099
11100     case CAST_EXPR:
11101     case REINTERPRET_CAST_EXPR:
11102     case CONST_CAST_EXPR:
11103     case DYNAMIC_CAST_EXPR:
11104     case STATIC_CAST_EXPR:
11105       {
11106         tree type;
11107         tree op;
11108
11109         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11110         if (integral_constant_expression_p
11111             && !cast_valid_in_integral_constant_expression_p (type))
11112           {
11113             if (complain & tf_error)
11114               error ("a cast to a type other than an integral or "
11115                      "enumeration type cannot appear in a constant-expression");
11116             return error_mark_node; 
11117           }
11118
11119         op = RECUR (TREE_OPERAND (t, 0));
11120
11121         switch (TREE_CODE (t))
11122           {
11123           case CAST_EXPR:
11124             return build_functional_cast (type, op, complain);
11125           case REINTERPRET_CAST_EXPR:
11126             return build_reinterpret_cast (type, op, complain);
11127           case CONST_CAST_EXPR:
11128             return build_const_cast (type, op, complain);
11129           case DYNAMIC_CAST_EXPR:
11130             return build_dynamic_cast (type, op, complain);
11131           case STATIC_CAST_EXPR:
11132             return build_static_cast (type, op, complain);
11133           default:
11134             gcc_unreachable ();
11135           }
11136       }
11137
11138     case POSTDECREMENT_EXPR:
11139     case POSTINCREMENT_EXPR:
11140       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11141                                                 args, complain, in_decl);
11142       return build_x_unary_op (TREE_CODE (t), op1, complain);
11143
11144     case PREDECREMENT_EXPR:
11145     case PREINCREMENT_EXPR:
11146     case NEGATE_EXPR:
11147     case BIT_NOT_EXPR:
11148     case ABS_EXPR:
11149     case TRUTH_NOT_EXPR:
11150     case UNARY_PLUS_EXPR:  /* Unary + */
11151     case REALPART_EXPR:
11152     case IMAGPART_EXPR:
11153       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11154                                complain);
11155
11156     case ADDR_EXPR:
11157       op1 = TREE_OPERAND (t, 0);
11158       if (TREE_CODE (op1) == SCOPE_REF)
11159         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11160                                    /*done=*/true, /*address_p=*/true);
11161       else
11162         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11163                                                   in_decl);
11164       if (TREE_CODE (op1) == LABEL_DECL)
11165         return finish_label_address_expr (DECL_NAME (op1),
11166                                           EXPR_LOCATION (op1));
11167       return build_x_unary_op (ADDR_EXPR, op1, complain);
11168
11169     case PLUS_EXPR:
11170     case MINUS_EXPR:
11171     case MULT_EXPR:
11172     case TRUNC_DIV_EXPR:
11173     case CEIL_DIV_EXPR:
11174     case FLOOR_DIV_EXPR:
11175     case ROUND_DIV_EXPR:
11176     case EXACT_DIV_EXPR:
11177     case BIT_AND_EXPR:
11178     case BIT_IOR_EXPR:
11179     case BIT_XOR_EXPR:
11180     case TRUNC_MOD_EXPR:
11181     case FLOOR_MOD_EXPR:
11182     case TRUTH_ANDIF_EXPR:
11183     case TRUTH_ORIF_EXPR:
11184     case TRUTH_AND_EXPR:
11185     case TRUTH_OR_EXPR:
11186     case RSHIFT_EXPR:
11187     case LSHIFT_EXPR:
11188     case RROTATE_EXPR:
11189     case LROTATE_EXPR:
11190     case EQ_EXPR:
11191     case NE_EXPR:
11192     case MAX_EXPR:
11193     case MIN_EXPR:
11194     case LE_EXPR:
11195     case GE_EXPR:
11196     case LT_EXPR:
11197     case GT_EXPR:
11198     case MEMBER_REF:
11199     case DOTSTAR_EXPR:
11200       return build_x_binary_op
11201         (TREE_CODE (t),
11202          RECUR (TREE_OPERAND (t, 0)),
11203          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11204           ? ERROR_MARK
11205           : TREE_CODE (TREE_OPERAND (t, 0))),
11206          RECUR (TREE_OPERAND (t, 1)),
11207          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11208           ? ERROR_MARK
11209           : TREE_CODE (TREE_OPERAND (t, 1))),
11210          /*overloaded_p=*/NULL,
11211          complain);
11212
11213     case SCOPE_REF:
11214       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11215                                   /*address_p=*/false);
11216     case ARRAY_REF:
11217       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11218                                                 args, complain, in_decl);
11219       return build_x_binary_op (ARRAY_REF, op1,
11220                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11221                                  ? ERROR_MARK
11222                                  : TREE_CODE (TREE_OPERAND (t, 0))),
11223                                 RECUR (TREE_OPERAND (t, 1)),
11224                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11225                                  ? ERROR_MARK
11226                                  : TREE_CODE (TREE_OPERAND (t, 1))),
11227                                 /*overloaded_p=*/NULL,
11228                                 complain);
11229
11230     case SIZEOF_EXPR:
11231       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11232         return tsubst_copy (t, args, complain, in_decl);
11233       /* Fall through */
11234       
11235     case ALIGNOF_EXPR:
11236       op1 = TREE_OPERAND (t, 0);
11237       if (!args)
11238         {
11239           /* When there are no ARGS, we are trying to evaluate a
11240              non-dependent expression from the parser.  Trying to do
11241              the substitutions may not work.  */
11242           if (!TYPE_P (op1))
11243             op1 = TREE_TYPE (op1);
11244         }
11245       else
11246         {
11247           ++skip_evaluation;
11248           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11249                                        /*function_p=*/false,
11250                                        /*integral_constant_expression_p=*/false);
11251           --skip_evaluation;
11252         }
11253       if (TYPE_P (op1))
11254         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11255                                            complain & tf_error);
11256       else
11257         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11258                                            complain & tf_error);
11259
11260     case MODOP_EXPR:
11261       {
11262         tree r = build_x_modify_expr
11263           (RECUR (TREE_OPERAND (t, 0)),
11264            TREE_CODE (TREE_OPERAND (t, 1)),
11265            RECUR (TREE_OPERAND (t, 2)),
11266            complain);
11267         /* TREE_NO_WARNING must be set if either the expression was
11268            parenthesized or it uses an operator such as >>= rather
11269            than plain assignment.  In the former case, it was already
11270            set and must be copied.  In the latter case,
11271            build_x_modify_expr sets it and it must not be reset
11272            here.  */
11273         if (TREE_NO_WARNING (t))
11274           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11275         return r;
11276       }
11277
11278     case ARROW_EXPR:
11279       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11280                                                 args, complain, in_decl);
11281       /* Remember that there was a reference to this entity.  */
11282       if (DECL_P (op1))
11283         mark_used (op1);
11284       return build_x_arrow (op1);
11285
11286     case NEW_EXPR:
11287       {
11288         tree init = RECUR (TREE_OPERAND (t, 3));
11289
11290         if (TREE_OPERAND (t, 3) && !init)
11291           /* If there was an initializer in the original tree, but
11292              it instantiated to an empty list, then we should pass on
11293              VOID_ZERO_NODE to tell build_new that it was an empty
11294              initializer () rather than no initializer.  This can only
11295              happen when the initializer is a pack expansion whose
11296              parameter packs are of length zero.  */
11297           init = void_zero_node;
11298
11299         return build_new
11300           (RECUR (TREE_OPERAND (t, 0)),
11301            RECUR (TREE_OPERAND (t, 1)),
11302            RECUR (TREE_OPERAND (t, 2)),
11303            init,
11304            NEW_EXPR_USE_GLOBAL (t),
11305            complain);
11306       }
11307
11308     case DELETE_EXPR:
11309      return delete_sanity
11310        (RECUR (TREE_OPERAND (t, 0)),
11311         RECUR (TREE_OPERAND (t, 1)),
11312         DELETE_EXPR_USE_VEC (t),
11313         DELETE_EXPR_USE_GLOBAL (t));
11314
11315     case COMPOUND_EXPR:
11316       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11317                                     RECUR (TREE_OPERAND (t, 1)),
11318                                     complain);
11319
11320     case CALL_EXPR:
11321       {
11322         tree function;
11323         tree call_args;
11324         bool qualified_p;
11325         bool koenig_p;
11326
11327         function = CALL_EXPR_FN (t);
11328         /* When we parsed the expression,  we determined whether or
11329            not Koenig lookup should be performed.  */
11330         koenig_p = KOENIG_LOOKUP_P (t);
11331         if (TREE_CODE (function) == SCOPE_REF)
11332           {
11333             qualified_p = true;
11334             function = tsubst_qualified_id (function, args, complain, in_decl,
11335                                             /*done=*/false,
11336                                             /*address_p=*/false);
11337           }
11338         else
11339           {
11340             if (TREE_CODE (function) == COMPONENT_REF)
11341               {
11342                 tree op = TREE_OPERAND (function, 1);
11343
11344                 qualified_p = (TREE_CODE (op) == SCOPE_REF
11345                                || (BASELINK_P (op)
11346                                    && BASELINK_QUALIFIED_P (op)));
11347               }
11348             else
11349               qualified_p = false;
11350
11351             function = tsubst_copy_and_build (function, args, complain,
11352                                               in_decl,
11353                                               !qualified_p,
11354                                               integral_constant_expression_p);
11355
11356             if (BASELINK_P (function))
11357               qualified_p = true;
11358           }
11359
11360         /* FIXME:  Rewrite this so as not to construct an arglist.  */
11361         call_args = RECUR (CALL_EXPR_ARGS (t));
11362
11363         /* We do not perform argument-dependent lookup if normal
11364            lookup finds a non-function, in accordance with the
11365            expected resolution of DR 218.  */
11366         if (koenig_p
11367             && ((is_overloaded_fn (function)
11368                  /* If lookup found a member function, the Koenig lookup is
11369                     not appropriate, even if an unqualified-name was used
11370                     to denote the function.  */
11371                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
11372                 || TREE_CODE (function) == IDENTIFIER_NODE))
11373           function = perform_koenig_lookup (function, call_args);
11374
11375         if (TREE_CODE (function) == IDENTIFIER_NODE)
11376           {
11377             unqualified_name_lookup_error (function);
11378             return error_mark_node;
11379           }
11380
11381         /* Remember that there was a reference to this entity.  */
11382         if (DECL_P (function))
11383           mark_used (function);
11384
11385         if (TREE_CODE (function) == OFFSET_REF)
11386           return build_offset_ref_call_from_tree (function, call_args);
11387         if (TREE_CODE (function) == COMPONENT_REF)
11388           {
11389             if (!BASELINK_P (TREE_OPERAND (function, 1)))
11390               return finish_call_expr (function, call_args,
11391                                        /*disallow_virtual=*/false,
11392                                        /*koenig_p=*/false,
11393                                        complain);
11394             else
11395               return (build_new_method_call
11396                       (TREE_OPERAND (function, 0),
11397                        TREE_OPERAND (function, 1),
11398                        call_args, NULL_TREE,
11399                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11400                        /*fn_p=*/NULL,
11401                        complain));
11402           }
11403         /* Pass true for koenig_p so that build_new_function_call will
11404            allow hidden friends found by arg-dependent lookup at template
11405            parsing time.  */
11406         return finish_call_expr (function, call_args,
11407                                  /*disallow_virtual=*/qualified_p,
11408                                  /*koenig_p*/true,
11409                                  complain);
11410       }
11411
11412     case COND_EXPR:
11413       return build_x_conditional_expr
11414         (RECUR (TREE_OPERAND (t, 0)),
11415          RECUR (TREE_OPERAND (t, 1)),
11416          RECUR (TREE_OPERAND (t, 2)),
11417          complain);
11418
11419     case PSEUDO_DTOR_EXPR:
11420       return finish_pseudo_destructor_expr
11421         (RECUR (TREE_OPERAND (t, 0)),
11422          RECUR (TREE_OPERAND (t, 1)),
11423          RECUR (TREE_OPERAND (t, 2)));
11424
11425     case TREE_LIST:
11426       {
11427         tree purpose, value, chain;
11428
11429         if (t == void_list_node)
11430           return t;
11431
11432         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11433             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11434           {
11435             /* We have pack expansions, so expand those and
11436                create a new list out of it.  */
11437             tree purposevec = NULL_TREE;
11438             tree valuevec = NULL_TREE;
11439             tree chain;
11440             int i, len = -1;
11441
11442             /* Expand the argument expressions.  */
11443             if (TREE_PURPOSE (t))
11444               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11445                                                  complain, in_decl);
11446             if (TREE_VALUE (t))
11447               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11448                                                complain, in_decl);
11449
11450             /* Build the rest of the list.  */
11451             chain = TREE_CHAIN (t);
11452             if (chain && chain != void_type_node)
11453               chain = RECUR (chain);
11454
11455             /* Determine the number of arguments.  */
11456             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11457               {
11458                 len = TREE_VEC_LENGTH (purposevec);
11459                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11460               }
11461             else if (TREE_CODE (valuevec) == TREE_VEC)
11462               len = TREE_VEC_LENGTH (valuevec);
11463             else
11464               {
11465                 /* Since we only performed a partial substitution into
11466                    the argument pack, we only return a single list
11467                    node.  */
11468                 if (purposevec == TREE_PURPOSE (t)
11469                     && valuevec == TREE_VALUE (t)
11470                     && chain == TREE_CHAIN (t))
11471                   return t;
11472
11473                 return tree_cons (purposevec, valuevec, chain);
11474               }
11475             
11476             /* Convert the argument vectors into a TREE_LIST */
11477             i = len;
11478             while (i > 0)
11479               {
11480                 /* Grab the Ith values.  */
11481                 i--;
11482                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11483                                      : NULL_TREE;
11484                 value 
11485                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11486                              : NULL_TREE;
11487
11488                 /* Build the list (backwards).  */
11489                 chain = tree_cons (purpose, value, chain);
11490               }
11491
11492             return chain;
11493           }
11494
11495         purpose = TREE_PURPOSE (t);
11496         if (purpose)
11497           purpose = RECUR (purpose);
11498         value = TREE_VALUE (t);
11499         if (value)
11500           value = RECUR (value);
11501         chain = TREE_CHAIN (t);
11502         if (chain && chain != void_type_node)
11503           chain = RECUR (chain);
11504         if (purpose == TREE_PURPOSE (t)
11505             && value == TREE_VALUE (t)
11506             && chain == TREE_CHAIN (t))
11507           return t;
11508         return tree_cons (purpose, value, chain);
11509       }
11510
11511     case COMPONENT_REF:
11512       {
11513         tree object;
11514         tree object_type;
11515         tree member;
11516
11517         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11518                                                      args, complain, in_decl);
11519         /* Remember that there was a reference to this entity.  */
11520         if (DECL_P (object))
11521           mark_used (object);
11522         object_type = TREE_TYPE (object);
11523
11524         member = TREE_OPERAND (t, 1);
11525         if (BASELINK_P (member))
11526           member = tsubst_baselink (member,
11527                                     non_reference (TREE_TYPE (object)),
11528                                     args, complain, in_decl);
11529         else
11530           member = tsubst_copy (member, args, complain, in_decl);
11531         if (member == error_mark_node)
11532           return error_mark_node;
11533
11534         if (object_type && !CLASS_TYPE_P (object_type))
11535           {
11536             if (SCALAR_TYPE_P (object_type))
11537               {
11538                 tree s = NULL_TREE;
11539                 tree dtor = member;
11540
11541                 if (TREE_CODE (dtor) == SCOPE_REF)
11542                   {
11543                     s = TREE_OPERAND (dtor, 0);
11544                     dtor = TREE_OPERAND (dtor, 1);
11545                   }
11546                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11547                   {
11548                     dtor = TREE_OPERAND (dtor, 0);
11549                     if (TYPE_P (dtor))
11550                       return finish_pseudo_destructor_expr (object, s, dtor);
11551                   }
11552               }
11553           }
11554         else if (TREE_CODE (member) == SCOPE_REF
11555                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11556           {
11557             tree tmpl;
11558             tree args;
11559
11560             /* Lookup the template functions now that we know what the
11561                scope is.  */
11562             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11563             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11564             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11565                                             /*is_type_p=*/false,
11566                                             /*complain=*/false);
11567             if (BASELINK_P (member))
11568               {
11569                 BASELINK_FUNCTIONS (member)
11570                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11571                               args);
11572                 member = (adjust_result_of_qualified_name_lookup
11573                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11574                            object_type));
11575               }
11576             else
11577               {
11578                 qualified_name_lookup_error (object_type, tmpl, member,
11579                                              input_location);
11580                 return error_mark_node;
11581               }
11582           }
11583         else if (TREE_CODE (member) == SCOPE_REF
11584                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11585                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11586           {
11587             if (complain & tf_error)
11588               {
11589                 if (TYPE_P (TREE_OPERAND (member, 0)))
11590                   error ("%qT is not a class or namespace",
11591                          TREE_OPERAND (member, 0));
11592                 else
11593                   error ("%qD is not a class or namespace",
11594                          TREE_OPERAND (member, 0));
11595               }
11596             return error_mark_node;
11597           }
11598         else if (TREE_CODE (member) == FIELD_DECL)
11599           return finish_non_static_data_member (member, object, NULL_TREE);
11600
11601         return finish_class_member_access_expr (object, member,
11602                                                 /*template_p=*/false,
11603                                                 complain);
11604       }
11605
11606     case THROW_EXPR:
11607       return build_throw
11608         (RECUR (TREE_OPERAND (t, 0)));
11609
11610     case CONSTRUCTOR:
11611       {
11612         VEC(constructor_elt,gc) *n;
11613         constructor_elt *ce;
11614         unsigned HOST_WIDE_INT idx;
11615         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11616         bool process_index_p;
11617         int newlen;
11618         bool need_copy_p = false;
11619         tree r;
11620
11621         if (type == error_mark_node)
11622           return error_mark_node;
11623
11624         /* digest_init will do the wrong thing if we let it.  */
11625         if (type && TYPE_PTRMEMFUNC_P (type))
11626           return t;
11627
11628         /* We do not want to process the index of aggregate
11629            initializers as they are identifier nodes which will be
11630            looked up by digest_init.  */
11631         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
11632
11633         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11634         newlen = VEC_length (constructor_elt, n);
11635         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11636           {
11637             if (ce->index && process_index_p)
11638               ce->index = RECUR (ce->index);
11639
11640             if (PACK_EXPANSION_P (ce->value))
11641               {
11642                 /* Substitute into the pack expansion.  */
11643                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11644                                                   in_decl);
11645
11646                 if (ce->value == error_mark_node)
11647                   ;
11648                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11649                   /* Just move the argument into place.  */
11650                   ce->value = TREE_VEC_ELT (ce->value, 0);
11651                 else
11652                   {
11653                     /* Update the length of the final CONSTRUCTOR
11654                        arguments vector, and note that we will need to
11655                        copy.*/
11656                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11657                     need_copy_p = true;
11658                   }
11659               }
11660             else
11661               ce->value = RECUR (ce->value);
11662           }
11663
11664         if (need_copy_p)
11665           {
11666             VEC(constructor_elt,gc) *old_n = n;
11667
11668             n = VEC_alloc (constructor_elt, gc, newlen);
11669             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11670                  idx++)
11671               {
11672                 if (TREE_CODE (ce->value) == TREE_VEC)
11673                   {
11674                     int i, len = TREE_VEC_LENGTH (ce->value);
11675                     for (i = 0; i < len; ++i)
11676                       CONSTRUCTOR_APPEND_ELT (n, 0,
11677                                               TREE_VEC_ELT (ce->value, i));
11678                   }
11679                 else
11680                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11681               }
11682           }
11683
11684         r = build_constructor (init_list_type_node, n);
11685         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
11686
11687         if (TREE_HAS_CONSTRUCTOR (t))
11688           return finish_compound_literal (type, r);
11689
11690         return r;
11691       }
11692
11693     case TYPEID_EXPR:
11694       {
11695         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11696         if (TYPE_P (operand_0))
11697           return get_typeid (operand_0);
11698         return build_typeid (operand_0);
11699       }
11700
11701     case VAR_DECL:
11702       if (!args)
11703         return t;
11704       /* Fall through */
11705
11706     case PARM_DECL:
11707       {
11708         tree r = tsubst_copy (t, args, complain, in_decl);
11709
11710         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11711           /* If the original type was a reference, we'll be wrapped in
11712              the appropriate INDIRECT_REF.  */
11713           r = convert_from_reference (r);
11714         return r;
11715       }
11716
11717     case VA_ARG_EXPR:
11718       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11719                              tsubst_copy (TREE_TYPE (t), args, complain,
11720                                           in_decl));
11721
11722     case OFFSETOF_EXPR:
11723       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11724
11725     case TRAIT_EXPR:
11726       {
11727         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11728                                   complain, in_decl);
11729
11730         tree type2 = TRAIT_EXPR_TYPE2 (t);
11731         if (type2)
11732           type2 = tsubst_copy (type2, args, complain, in_decl);
11733         
11734         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11735       }
11736
11737     case STMT_EXPR:
11738       {
11739         tree old_stmt_expr = cur_stmt_expr;
11740         tree stmt_expr = begin_stmt_expr ();
11741
11742         cur_stmt_expr = stmt_expr;
11743         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11744                      integral_constant_expression_p);
11745         stmt_expr = finish_stmt_expr (stmt_expr, false);
11746         cur_stmt_expr = old_stmt_expr;
11747
11748         return stmt_expr;
11749       }
11750
11751     case CONST_DECL:
11752       t = tsubst_copy (t, args, complain, in_decl);
11753       /* As in finish_id_expression, we resolve enumeration constants
11754          to their underlying values.  */
11755       if (TREE_CODE (t) == CONST_DECL)
11756         {
11757           used_types_insert (TREE_TYPE (t));
11758           return DECL_INITIAL (t);
11759         }
11760       return t;
11761
11762     default:
11763       /* Handle Objective-C++ constructs, if appropriate.  */
11764       {
11765         tree subst
11766           = objcp_tsubst_copy_and_build (t, args, complain,
11767                                          in_decl, /*function_p=*/false);
11768         if (subst)
11769           return subst;
11770       }
11771       return tsubst_copy (t, args, complain, in_decl);
11772     }
11773
11774 #undef RECUR
11775 }
11776
11777 /* Verify that the instantiated ARGS are valid. For type arguments,
11778    make sure that the type's linkage is ok. For non-type arguments,
11779    make sure they are constants if they are integral or enumerations.
11780    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11781
11782 static bool
11783 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
11784 {
11785   if (ARGUMENT_PACK_P (t))
11786     {
11787       tree vec = ARGUMENT_PACK_ARGS (t);
11788       int len = TREE_VEC_LENGTH (vec);
11789       bool result = false;
11790       int i;
11791
11792       for (i = 0; i < len; ++i)
11793         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
11794           result = true;
11795       return result;
11796     }
11797   else if (TYPE_P (t))
11798     {
11799       /* [basic.link]: A name with no linkage (notably, the name
11800          of a class or enumeration declared in a local scope)
11801          shall not be used to declare an entity with linkage.
11802          This implies that names with no linkage cannot be used as
11803          template arguments.  */
11804       tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11805
11806       if (nt)
11807         {
11808           /* DR 488 makes use of a type with no linkage cause
11809              type deduction to fail.  */
11810           if (complain & tf_error)
11811             {
11812               if (TYPE_ANONYMOUS_P (nt))
11813                 error ("%qT is/uses anonymous type", t);
11814               else
11815                 error ("template argument for %qD uses local type %qT",
11816                        tmpl, t);
11817             }
11818           return true;
11819         }
11820       /* In order to avoid all sorts of complications, we do not
11821          allow variably-modified types as template arguments.  */
11822       else if (variably_modified_type_p (t, NULL_TREE))
11823         {
11824           if (complain & tf_error)
11825             error ("%qT is a variably modified type", t);
11826           return true;
11827         }
11828     }
11829   /* A non-type argument of integral or enumerated type must be a
11830      constant.  */
11831   else if (TREE_TYPE (t)
11832            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11833            && !TREE_CONSTANT (t))
11834     {
11835       if (complain & tf_error)
11836         error ("integral expression %qE is not constant", t);
11837       return true;
11838     }
11839   return false;
11840 }
11841
11842 static bool
11843 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11844 {
11845   int ix, len = DECL_NTPARMS (tmpl);
11846   bool result = false;
11847
11848   for (ix = 0; ix != len; ix++)
11849     {
11850       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
11851         result = true;
11852     }
11853   if (result && (complain & tf_error))
11854     error ("  trying to instantiate %qD", tmpl);
11855   return result;
11856 }
11857
11858 /* Instantiate the indicated variable or function template TMPL with
11859    the template arguments in TARG_PTR.  */
11860
11861 tree
11862 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11863 {
11864   tree fndecl;
11865   tree gen_tmpl;
11866   tree spec;
11867   HOST_WIDE_INT saved_processing_template_decl;
11868
11869   if (tmpl == error_mark_node)
11870     return error_mark_node;
11871
11872   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11873
11874   /* If this function is a clone, handle it specially.  */
11875   if (DECL_CLONED_FUNCTION_P (tmpl))
11876     {
11877       tree spec;
11878       tree clone;
11879
11880       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11881                                    complain);
11882       if (spec == error_mark_node)
11883         return error_mark_node;
11884
11885       /* Look for the clone.  */
11886       FOR_EACH_CLONE (clone, spec)
11887         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11888           return clone;
11889       /* We should always have found the clone by now.  */
11890       gcc_unreachable ();
11891       return NULL_TREE;
11892     }
11893
11894   /* Check to see if we already have this specialization.  */
11895   spec = retrieve_specialization (tmpl, targ_ptr,
11896                                   /*class_specializations_p=*/false);
11897   if (spec != NULL_TREE)
11898     return spec;
11899
11900   gen_tmpl = most_general_template (tmpl);
11901   if (tmpl != gen_tmpl)
11902     {
11903       /* The TMPL is a partial instantiation.  To get a full set of
11904          arguments we must add the arguments used to perform the
11905          partial instantiation.  */
11906       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11907                                               targ_ptr);
11908
11909       /* Check to see if we already have this specialization.  */
11910       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11911                                       /*class_specializations_p=*/false);
11912       if (spec != NULL_TREE)
11913         return spec;
11914     }
11915
11916   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11917                                complain))
11918     return error_mark_node;
11919
11920   /* We are building a FUNCTION_DECL, during which the access of its
11921      parameters and return types have to be checked.  However this
11922      FUNCTION_DECL which is the desired context for access checking
11923      is not built yet.  We solve this chicken-and-egg problem by
11924      deferring all checks until we have the FUNCTION_DECL.  */
11925   push_deferring_access_checks (dk_deferred);
11926
11927   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11928      (because, for example, we have encountered a non-dependent
11929      function call in the body of a template function and must now
11930      determine which of several overloaded functions will be called),
11931      within the instantiation itself we are not processing a
11932      template.  */  
11933   saved_processing_template_decl = processing_template_decl;
11934   processing_template_decl = 0;
11935   /* Substitute template parameters to obtain the specialization.  */
11936   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11937                    targ_ptr, complain, gen_tmpl);
11938   processing_template_decl = saved_processing_template_decl;
11939   if (fndecl == error_mark_node)
11940     return error_mark_node;
11941
11942   /* Now we know the specialization, compute access previously
11943      deferred.  */
11944   push_access_scope (fndecl);
11945   perform_deferred_access_checks ();
11946   pop_access_scope (fndecl);
11947   pop_deferring_access_checks ();
11948
11949   /* The DECL_TI_TEMPLATE should always be the immediate parent
11950      template, not the most general template.  */
11951   DECL_TI_TEMPLATE (fndecl) = tmpl;
11952
11953   /* If we've just instantiated the main entry point for a function,
11954      instantiate all the alternate entry points as well.  We do this
11955      by cloning the instantiation of the main entry point, not by
11956      instantiating the template clones.  */
11957   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11958     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11959
11960   return fndecl;
11961 }
11962
11963 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11964    arguments that are being used when calling it.  TARGS is a vector
11965    into which the deduced template arguments are placed.
11966
11967    Return zero for success, 2 for an incomplete match that doesn't resolve
11968    all the types, and 1 for complete failure.  An error message will be
11969    printed only for an incomplete match.
11970
11971    If FN is a conversion operator, or we are trying to produce a specific
11972    specialization, RETURN_TYPE is the return type desired.
11973
11974    The EXPLICIT_TARGS are explicit template arguments provided via a
11975    template-id.
11976
11977    The parameter STRICT is one of:
11978
11979    DEDUCE_CALL:
11980      We are deducing arguments for a function call, as in
11981      [temp.deduct.call].
11982
11983    DEDUCE_CONV:
11984      We are deducing arguments for a conversion function, as in
11985      [temp.deduct.conv].
11986
11987    DEDUCE_EXACT:
11988      We are deducing arguments when doing an explicit instantiation
11989      as in [temp.explicit], when determining an explicit specialization
11990      as in [temp.expl.spec], or when taking the address of a function
11991      template, as in [temp.deduct.funcaddr].  */
11992
11993 int
11994 fn_type_unification (tree fn,
11995                      tree explicit_targs,
11996                      tree targs,
11997                      tree args,
11998                      tree return_type,
11999                      unification_kind_t strict,
12000                      int flags)
12001 {
12002   tree parms;
12003   tree fntype;
12004   int result;
12005   bool incomplete_argument_packs_p = false;
12006
12007   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
12008
12009   fntype = TREE_TYPE (fn);
12010   if (explicit_targs)
12011     {
12012       /* [temp.deduct]
12013
12014          The specified template arguments must match the template
12015          parameters in kind (i.e., type, nontype, template), and there
12016          must not be more arguments than there are parameters;
12017          otherwise type deduction fails.
12018
12019          Nontype arguments must match the types of the corresponding
12020          nontype template parameters, or must be convertible to the
12021          types of the corresponding nontype parameters as specified in
12022          _temp.arg.nontype_, otherwise type deduction fails.
12023
12024          All references in the function type of the function template
12025          to the corresponding template parameters are replaced by the
12026          specified template argument values.  If a substitution in a
12027          template parameter or in the function type of the function
12028          template results in an invalid type, type deduction fails.  */
12029       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
12030       int i, len = TREE_VEC_LENGTH (tparms);
12031       tree converted_args;
12032       bool incomplete = false;
12033
12034       if (explicit_targs == error_mark_node)
12035         return 1;
12036
12037       converted_args
12038         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
12039                                   /*require_all_args=*/false,
12040                                   /*use_default_args=*/false));
12041       if (converted_args == error_mark_node)
12042         return 1;
12043
12044       /* Substitute the explicit args into the function type.  This is
12045          necessary so that, for instance, explicitly declared function
12046          arguments can match null pointed constants.  If we were given
12047          an incomplete set of explicit args, we must not do semantic
12048          processing during substitution as we could create partial
12049          instantiations.  */
12050       for (i = 0; i < len; i++)
12051         {
12052           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12053           bool parameter_pack = false;
12054
12055           /* Dig out the actual parm.  */
12056           if (TREE_CODE (parm) == TYPE_DECL
12057               || TREE_CODE (parm) == TEMPLATE_DECL)
12058             {
12059               parm = TREE_TYPE (parm);
12060               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
12061             }
12062           else if (TREE_CODE (parm) == PARM_DECL)
12063             {
12064               parm = DECL_INITIAL (parm);
12065               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
12066             }
12067
12068           if (parameter_pack)
12069             {
12070               int level, idx;
12071               tree targ;
12072               template_parm_level_and_index (parm, &level, &idx);
12073
12074               /* Mark the argument pack as "incomplete". We could
12075                  still deduce more arguments during unification.  */
12076               targ = TMPL_ARG (converted_args, level, idx);
12077               if (targ)
12078                 {
12079                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
12080                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
12081                     = ARGUMENT_PACK_ARGS (targ);
12082                 }
12083
12084               /* We have some incomplete argument packs.  */
12085               incomplete_argument_packs_p = true;
12086             }
12087         }
12088
12089       if (incomplete_argument_packs_p)
12090         /* Any substitution is guaranteed to be incomplete if there
12091            are incomplete argument packs, because we can still deduce
12092            more arguments.  */
12093         incomplete = 1;
12094       else
12095         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
12096
12097       processing_template_decl += incomplete;
12098       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
12099       processing_template_decl -= incomplete;
12100
12101       if (fntype == error_mark_node)
12102         return 1;
12103
12104       /* Place the explicitly specified arguments in TARGS.  */
12105       for (i = NUM_TMPL_ARGS (converted_args); i--;)
12106         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
12107     }
12108
12109   /* Never do unification on the 'this' parameter.  */
12110   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
12111
12112   if (return_type)
12113     {
12114       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
12115       args = tree_cons (NULL_TREE, return_type, args);
12116     }
12117
12118   /* We allow incomplete unification without an error message here
12119      because the standard doesn't seem to explicitly prohibit it.  Our
12120      callers must be ready to deal with unification failures in any
12121      event.  */
12122   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
12123                                   targs, parms, args, /*subr=*/0,
12124                                   strict, flags);
12125
12126   if (result == 0 && incomplete_argument_packs_p)
12127     {
12128       int i, len = NUM_TMPL_ARGS (targs);
12129
12130       /* Clear the "incomplete" flags on all argument packs.  */
12131       for (i = 0; i < len; i++)
12132         {
12133           tree arg = TREE_VEC_ELT (targs, i);
12134           if (ARGUMENT_PACK_P (arg))
12135             {
12136               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
12137               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
12138             }
12139         }
12140     }
12141
12142   /* Now that we have bindings for all of the template arguments,
12143      ensure that the arguments deduced for the template template
12144      parameters have compatible template parameter lists.  We cannot
12145      check this property before we have deduced all template
12146      arguments, because the template parameter types of a template
12147      template parameter might depend on prior template parameters
12148      deduced after the template template parameter.  The following
12149      ill-formed example illustrates this issue:
12150
12151        template<typename T, template<T> class C> void f(C<5>, T);
12152
12153        template<int N> struct X {};
12154
12155        void g() {
12156          f(X<5>(), 5l); // error: template argument deduction fails
12157        }
12158
12159      The template parameter list of 'C' depends on the template type
12160      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12161      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12162      time that we deduce 'C'.  */
12163   if (result == 0
12164       && !template_template_parm_bindings_ok_p 
12165            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12166     return 1;
12167
12168   if (result == 0)
12169     /* All is well so far.  Now, check:
12170
12171        [temp.deduct]
12172
12173        When all template arguments have been deduced, all uses of
12174        template parameters in nondeduced contexts are replaced with
12175        the corresponding deduced argument values.  If the
12176        substitution results in an invalid type, as described above,
12177        type deduction fails.  */
12178     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
12179         == error_mark_node)
12180       return 1;
12181
12182   return result;
12183 }
12184
12185 /* Adjust types before performing type deduction, as described in
12186    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12187    sections are symmetric.  PARM is the type of a function parameter
12188    or the return type of the conversion function.  ARG is the type of
12189    the argument passed to the call, or the type of the value
12190    initialized with the result of the conversion function.
12191    ARG_EXPR is the original argument expression, which may be null.  */
12192
12193 static int
12194 maybe_adjust_types_for_deduction (unification_kind_t strict,
12195                                   tree* parm,
12196                                   tree* arg,
12197                                   tree arg_expr)
12198 {
12199   int result = 0;
12200
12201   switch (strict)
12202     {
12203     case DEDUCE_CALL:
12204       break;
12205
12206     case DEDUCE_CONV:
12207       {
12208         /* Swap PARM and ARG throughout the remainder of this
12209            function; the handling is precisely symmetric since PARM
12210            will initialize ARG rather than vice versa.  */
12211         tree* temp = parm;
12212         parm = arg;
12213         arg = temp;
12214         break;
12215       }
12216
12217     case DEDUCE_EXACT:
12218       /* There is nothing to do in this case.  */
12219       return 0;
12220
12221     default:
12222       gcc_unreachable ();
12223     }
12224
12225   if (TREE_CODE (*parm) != REFERENCE_TYPE)
12226     {
12227       /* [temp.deduct.call]
12228
12229          If P is not a reference type:
12230
12231          --If A is an array type, the pointer type produced by the
12232          array-to-pointer standard conversion (_conv.array_) is
12233          used in place of A for type deduction; otherwise,
12234
12235          --If A is a function type, the pointer type produced by
12236          the function-to-pointer standard conversion
12237          (_conv.func_) is used in place of A for type deduction;
12238          otherwise,
12239
12240          --If A is a cv-qualified type, the top level
12241          cv-qualifiers of A's type are ignored for type
12242          deduction.  */
12243       if (TREE_CODE (*arg) == ARRAY_TYPE)
12244         *arg = build_pointer_type (TREE_TYPE (*arg));
12245       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
12246         *arg = build_pointer_type (*arg);
12247       else
12248         *arg = TYPE_MAIN_VARIANT (*arg);
12249     }
12250
12251   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
12252      of the form T&&, where T is a template parameter, and the argument
12253      is an lvalue, T is deduced as A& */
12254   if (TREE_CODE (*parm) == REFERENCE_TYPE
12255       && TYPE_REF_IS_RVALUE (*parm)
12256       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12257       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12258       && arg_expr && real_lvalue_p (arg_expr))
12259     *arg = build_reference_type (*arg);
12260
12261   /* [temp.deduct.call]
12262
12263      If P is a cv-qualified type, the top level cv-qualifiers
12264      of P's type are ignored for type deduction.  If P is a
12265      reference type, the type referred to by P is used for
12266      type deduction.  */
12267   *parm = TYPE_MAIN_VARIANT (*parm);
12268   if (TREE_CODE (*parm) == REFERENCE_TYPE)
12269     {
12270       *parm = TREE_TYPE (*parm);
12271       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12272     }
12273
12274   /* DR 322. For conversion deduction, remove a reference type on parm
12275      too (which has been swapped into ARG).  */
12276   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
12277     *arg = TREE_TYPE (*arg);
12278
12279   return result;
12280 }
12281
12282 /* Most parms like fn_type_unification.
12283
12284    If SUBR is 1, we're being called recursively (to unify the
12285    arguments of a function or method parameter of a function
12286    template). */
12287
12288 static int
12289 type_unification_real (tree tparms,
12290                        tree targs,
12291                        tree xparms,
12292                        tree xargs,
12293                        int subr,
12294                        unification_kind_t strict,
12295                        int flags)
12296 {
12297   tree parm, arg, arg_expr;
12298   int i;
12299   int ntparms = TREE_VEC_LENGTH (tparms);
12300   int sub_strict;
12301   int saw_undeduced = 0;
12302   tree parms, args;
12303
12304   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
12305   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
12306   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
12307   gcc_assert (ntparms > 0);
12308
12309   switch (strict)
12310     {
12311     case DEDUCE_CALL:
12312       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
12313                     | UNIFY_ALLOW_DERIVED);
12314       break;
12315
12316     case DEDUCE_CONV:
12317       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12318       break;
12319
12320     case DEDUCE_EXACT:
12321       sub_strict = UNIFY_ALLOW_NONE;
12322       break;
12323
12324     default:
12325       gcc_unreachable ();
12326     }
12327
12328  again:
12329   parms = xparms;
12330   args = xargs;
12331
12332   while (parms && parms != void_list_node
12333          && args && args != void_list_node)
12334     {
12335       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12336         break;
12337
12338       parm = TREE_VALUE (parms);
12339       parms = TREE_CHAIN (parms);
12340       arg = TREE_VALUE (args);
12341       args = TREE_CHAIN (args);
12342       arg_expr = NULL;
12343
12344       if (arg == error_mark_node)
12345         return 1;
12346       if (arg == unknown_type_node)
12347         /* We can't deduce anything from this, but we might get all the
12348            template args from other function args.  */
12349         continue;
12350
12351       /* Conversions will be performed on a function argument that
12352          corresponds with a function parameter that contains only
12353          non-deducible template parameters and explicitly specified
12354          template parameters.  */
12355       if (!uses_template_parms (parm))
12356         {
12357           tree type;
12358
12359           if (!TYPE_P (arg))
12360             type = TREE_TYPE (arg);
12361           else
12362             type = arg;
12363
12364           if (same_type_p (parm, type))
12365             continue;
12366           if (strict != DEDUCE_EXACT
12367               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
12368                                   flags))
12369             continue;
12370
12371           return 1;
12372         }
12373
12374       if (!TYPE_P (arg))
12375         {
12376           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12377           if (type_unknown_p (arg))
12378             {
12379               /* [temp.deduct.type] 
12380
12381                  A template-argument can be deduced from a pointer to
12382                  function or pointer to member function argument if
12383                  the set of overloaded functions does not contain
12384                  function templates and at most one of a set of
12385                  overloaded functions provides a unique match.  */
12386               if (resolve_overloaded_unification
12387                   (tparms, targs, parm, arg, strict, sub_strict))
12388                 continue;
12389
12390               return 1;
12391             }
12392           arg_expr = arg;
12393           arg = unlowered_expr_type (arg);
12394           if (arg == error_mark_node)
12395             return 1;
12396         }
12397
12398       {
12399         int arg_strict = sub_strict;
12400
12401         if (!subr)
12402           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
12403                                                           arg_expr);
12404
12405         if (arg == init_list_type_node && arg_expr)
12406           arg = arg_expr;
12407         if (unify (tparms, targs, parm, arg, arg_strict))
12408           return 1;
12409       }
12410     }
12411
12412
12413   if (parms 
12414       && parms != void_list_node
12415       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12416     {
12417       /* Unify the remaining arguments with the pack expansion type.  */
12418       tree argvec;
12419       tree parmvec = make_tree_vec (1);
12420       int len = 0;
12421       tree t;
12422
12423       /* Count the number of arguments that remain.  */
12424       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12425         len++;
12426         
12427       /* Allocate a TREE_VEC and copy in all of the arguments */ 
12428       argvec = make_tree_vec (len);
12429       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12430         {
12431           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12432           ++i;
12433         }
12434
12435       /* Copy the parameter into parmvec.  */
12436       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12437       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12438                                 /*call_args_p=*/true, /*subr=*/subr))
12439         return 1;
12440
12441       /* Advance to the end of the list of parameters.  */
12442       parms = TREE_CHAIN (parms);
12443     }
12444
12445   /* Fail if we've reached the end of the parm list, and more args
12446      are present, and the parm list isn't variadic.  */
12447   if (args && args != void_list_node && parms == void_list_node)
12448     return 1;
12449   /* Fail if parms are left and they don't have default values.  */
12450   if (parms && parms != void_list_node
12451       && TREE_PURPOSE (parms) == NULL_TREE)
12452     return 1;
12453
12454   if (!subr)
12455     for (i = 0; i < ntparms; i++)
12456       if (!TREE_VEC_ELT (targs, i))
12457         {
12458           tree tparm;
12459
12460           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12461             continue;
12462
12463           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12464
12465           /* If this is an undeduced nontype parameter that depends on
12466              a type parameter, try another pass; its type may have been
12467              deduced from a later argument than the one from which
12468              this parameter can be deduced.  */
12469           if (TREE_CODE (tparm) == PARM_DECL
12470               && uses_template_parms (TREE_TYPE (tparm))
12471               && !saw_undeduced++)
12472             goto again;
12473
12474           /* Core issue #226 (C++0x) [temp.deduct]:
12475
12476                If a template argument has not been deduced, its
12477                default template argument, if any, is used. 
12478
12479              When we are in C++98 mode, TREE_PURPOSE will either
12480              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12481              to explicitly check cxx_dialect here.  */
12482           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12483             {
12484               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12485                                  targs, tf_none, NULL_TREE);
12486               if (arg == error_mark_node)
12487                 return 1;
12488               else
12489                 {
12490                   TREE_VEC_ELT (targs, i) = arg;
12491                   continue;
12492                 }
12493             }
12494
12495           /* If the type parameter is a parameter pack, then it will
12496              be deduced to an empty parameter pack.  */
12497           if (template_parameter_pack_p (tparm))
12498             {
12499               tree arg;
12500
12501               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12502                 {
12503                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12504                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12505                   TREE_CONSTANT (arg) = 1;
12506                 }
12507               else
12508                 arg = make_node (TYPE_ARGUMENT_PACK);
12509
12510               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12511
12512               TREE_VEC_ELT (targs, i) = arg;
12513               continue;
12514             }
12515
12516           return 2;
12517         }
12518
12519   return 0;
12520 }
12521
12522 /* Subroutine of type_unification_real.  Args are like the variables
12523    at the call site.  ARG is an overloaded function (or template-id);
12524    we try deducing template args from each of the overloads, and if
12525    only one succeeds, we go with that.  Modifies TARGS and returns
12526    true on success.  */
12527
12528 static bool
12529 resolve_overloaded_unification (tree tparms,
12530                                 tree targs,
12531                                 tree parm,
12532                                 tree arg,
12533                                 unification_kind_t strict,
12534                                 int sub_strict)
12535 {
12536   tree tempargs = copy_node (targs);
12537   int good = 0;
12538   bool addr_p;
12539
12540   if (TREE_CODE (arg) == ADDR_EXPR)
12541     {
12542       arg = TREE_OPERAND (arg, 0);
12543       addr_p = true;
12544     }
12545   else
12546     addr_p = false;
12547
12548   if (TREE_CODE (arg) == COMPONENT_REF)
12549     /* Handle `&x' where `x' is some static or non-static member
12550        function name.  */
12551     arg = TREE_OPERAND (arg, 1);
12552
12553   if (TREE_CODE (arg) == OFFSET_REF)
12554     arg = TREE_OPERAND (arg, 1);
12555
12556   /* Strip baselink information.  */
12557   if (BASELINK_P (arg))
12558     arg = BASELINK_FUNCTIONS (arg);
12559
12560   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12561     {
12562       /* If we got some explicit template args, we need to plug them into
12563          the affected templates before we try to unify, in case the
12564          explicit args will completely resolve the templates in question.  */
12565
12566       tree expl_subargs = TREE_OPERAND (arg, 1);
12567       arg = TREE_OPERAND (arg, 0);
12568
12569       for (; arg; arg = OVL_NEXT (arg))
12570         {
12571           tree fn = OVL_CURRENT (arg);
12572           tree subargs, elem;
12573
12574           if (TREE_CODE (fn) != TEMPLATE_DECL)
12575             continue;
12576
12577           ++processing_template_decl;
12578           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12579                                   expl_subargs, /*check_ret=*/false);
12580           if (subargs)
12581             {
12582               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12583               good += try_one_overload (tparms, targs, tempargs, parm,
12584                                         elem, strict, sub_strict, addr_p);
12585             }
12586           --processing_template_decl;
12587         }
12588     }
12589   else if (TREE_CODE (arg) != OVERLOAD
12590            && TREE_CODE (arg) != FUNCTION_DECL)
12591     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12592        -- but the deduction does not succeed because the expression is
12593        not just the function on its own.  */
12594     return false;
12595   else
12596     for (; arg; arg = OVL_NEXT (arg))
12597       good += try_one_overload (tparms, targs, tempargs, parm,
12598                                 TREE_TYPE (OVL_CURRENT (arg)),
12599                                 strict, sub_strict, addr_p);
12600
12601   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12602      to function or pointer to member function argument if the set of
12603      overloaded functions does not contain function templates and at most
12604      one of a set of overloaded functions provides a unique match.
12605
12606      So if we found multiple possibilities, we return success but don't
12607      deduce anything.  */
12608
12609   if (good == 1)
12610     {
12611       int i = TREE_VEC_LENGTH (targs);
12612       for (; i--; )
12613         if (TREE_VEC_ELT (tempargs, i))
12614           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12615     }
12616   if (good)
12617     return true;
12618
12619   return false;
12620 }
12621
12622 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12623    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12624    different overloads deduce different arguments for a given parm.
12625    ADDR_P is true if the expression for which deduction is being
12626    performed was of the form "& fn" rather than simply "fn".
12627
12628    Returns 1 on success.  */
12629
12630 static int
12631 try_one_overload (tree tparms,
12632                   tree orig_targs,
12633                   tree targs,
12634                   tree parm,
12635                   tree arg,
12636                   unification_kind_t strict,
12637                   int sub_strict,
12638                   bool addr_p)
12639 {
12640   int nargs;
12641   tree tempargs;
12642   int i;
12643
12644   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12645      to function or pointer to member function argument if the set of
12646      overloaded functions does not contain function templates and at most
12647      one of a set of overloaded functions provides a unique match.
12648
12649      So if this is a template, just return success.  */
12650
12651   if (uses_template_parms (arg))
12652     return 1;
12653
12654   if (TREE_CODE (arg) == METHOD_TYPE)
12655     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12656   else if (addr_p)
12657     arg = build_pointer_type (arg);
12658
12659   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12660
12661   /* We don't copy orig_targs for this because if we have already deduced
12662      some template args from previous args, unify would complain when we
12663      try to deduce a template parameter for the same argument, even though
12664      there isn't really a conflict.  */
12665   nargs = TREE_VEC_LENGTH (targs);
12666   tempargs = make_tree_vec (nargs);
12667
12668   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12669     return 0;
12670
12671   /* First make sure we didn't deduce anything that conflicts with
12672      explicitly specified args.  */
12673   for (i = nargs; i--; )
12674     {
12675       tree elt = TREE_VEC_ELT (tempargs, i);
12676       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12677
12678       if (!elt)
12679         /*NOP*/;
12680       else if (uses_template_parms (elt))
12681         /* Since we're unifying against ourselves, we will fill in
12682            template args used in the function parm list with our own
12683            template parms.  Discard them.  */
12684         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12685       else if (oldelt && !template_args_equal (oldelt, elt))
12686         return 0;
12687     }
12688
12689   for (i = nargs; i--; )
12690     {
12691       tree elt = TREE_VEC_ELT (tempargs, i);
12692
12693       if (elt)
12694         TREE_VEC_ELT (targs, i) = elt;
12695     }
12696
12697   return 1;
12698 }
12699
12700 /* PARM is a template class (perhaps with unbound template
12701    parameters).  ARG is a fully instantiated type.  If ARG can be
12702    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12703    TARGS are as for unify.  */
12704
12705 static tree
12706 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12707 {
12708   tree copy_of_targs;
12709
12710   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12711       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12712           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12713     return NULL_TREE;
12714
12715   /* We need to make a new template argument vector for the call to
12716      unify.  If we used TARGS, we'd clutter it up with the result of
12717      the attempted unification, even if this class didn't work out.
12718      We also don't want to commit ourselves to all the unifications
12719      we've already done, since unification is supposed to be done on
12720      an argument-by-argument basis.  In other words, consider the
12721      following pathological case:
12722
12723        template <int I, int J, int K>
12724        struct S {};
12725
12726        template <int I, int J>
12727        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12728
12729        template <int I, int J, int K>
12730        void f(S<I, J, K>, S<I, I, I>);
12731
12732        void g() {
12733          S<0, 0, 0> s0;
12734          S<0, 1, 2> s2;
12735
12736          f(s0, s2);
12737        }
12738
12739      Now, by the time we consider the unification involving `s2', we
12740      already know that we must have `f<0, 0, 0>'.  But, even though
12741      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12742      because there are two ways to unify base classes of S<0, 1, 2>
12743      with S<I, I, I>.  If we kept the already deduced knowledge, we
12744      would reject the possibility I=1.  */
12745   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12746
12747   /* If unification failed, we're done.  */
12748   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12749              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12750     return NULL_TREE;
12751
12752   return arg;
12753 }
12754
12755 /* Given a template type PARM and a class type ARG, find the unique
12756    base type in ARG that is an instance of PARM.  We do not examine
12757    ARG itself; only its base-classes.  If there is not exactly one
12758    appropriate base class, return NULL_TREE.  PARM may be the type of
12759    a partial specialization, as well as a plain template type.  Used
12760    by unify.  */
12761
12762 static tree
12763 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12764 {
12765   tree rval = NULL_TREE;
12766   tree binfo;
12767
12768   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
12769
12770   binfo = TYPE_BINFO (complete_type (arg));
12771   if (!binfo)
12772     /* The type could not be completed.  */
12773     return NULL_TREE;
12774
12775   /* Walk in inheritance graph order.  The search order is not
12776      important, and this avoids multiple walks of virtual bases.  */
12777   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12778     {
12779       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12780
12781       if (r)
12782         {
12783           /* If there is more than one satisfactory baseclass, then:
12784
12785                [temp.deduct.call]
12786
12787               If they yield more than one possible deduced A, the type
12788               deduction fails.
12789
12790              applies.  */
12791           if (rval && !same_type_p (r, rval))
12792             return NULL_TREE;
12793
12794           rval = r;
12795         }
12796     }
12797
12798   return rval;
12799 }
12800
12801 /* Returns the level of DECL, which declares a template parameter.  */
12802
12803 static int
12804 template_decl_level (tree decl)
12805 {
12806   switch (TREE_CODE (decl))
12807     {
12808     case TYPE_DECL:
12809     case TEMPLATE_DECL:
12810       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12811
12812     case PARM_DECL:
12813       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12814
12815     default:
12816       gcc_unreachable ();
12817     }
12818   return 0;
12819 }
12820
12821 /* Decide whether ARG can be unified with PARM, considering only the
12822    cv-qualifiers of each type, given STRICT as documented for unify.
12823    Returns nonzero iff the unification is OK on that basis.  */
12824
12825 static int
12826 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12827 {
12828   int arg_quals = cp_type_quals (arg);
12829   int parm_quals = cp_type_quals (parm);
12830
12831   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12832       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12833     {
12834       /*  Although a CVR qualifier is ignored when being applied to a
12835           substituted template parameter ([8.3.2]/1 for example), that
12836           does not apply during deduction [14.8.2.4]/1, (even though
12837           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12838           this).  Except when we're allowing additional CV qualifiers
12839           at the outer level [14.8.2.1]/3,1st bullet.  */
12840       if ((TREE_CODE (arg) == REFERENCE_TYPE
12841            || TREE_CODE (arg) == FUNCTION_TYPE
12842            || TREE_CODE (arg) == METHOD_TYPE)
12843           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12844         return 0;
12845
12846       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12847           && (parm_quals & TYPE_QUAL_RESTRICT))
12848         return 0;
12849     }
12850
12851   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12852       && (arg_quals & parm_quals) != parm_quals)
12853     return 0;
12854
12855   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12856       && (parm_quals & arg_quals) != arg_quals)
12857     return 0;
12858
12859   return 1;
12860 }
12861
12862 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12863 void 
12864 template_parm_level_and_index (tree parm, int* level, int* index)
12865 {
12866   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12867       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12868       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12869     {
12870       *index = TEMPLATE_TYPE_IDX (parm);
12871       *level = TEMPLATE_TYPE_LEVEL (parm);
12872     }
12873   else
12874     {
12875       *index = TEMPLATE_PARM_IDX (parm);
12876       *level = TEMPLATE_PARM_LEVEL (parm);
12877     }
12878 }
12879
12880 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12881    expansion at the end of PACKED_PARMS. Returns 0 if the type
12882    deduction succeeds, 1 otherwise. STRICT is the same as in
12883    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12884    call argument list. We'll need to adjust the arguments to make them
12885    types. SUBR tells us if this is from a recursive call to
12886    type_unification_real.  */
12887 int
12888 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12889                       tree packed_args, int strict, bool call_args_p,
12890                       bool subr)
12891 {
12892   tree parm 
12893     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12894   tree pattern = PACK_EXPANSION_PATTERN (parm);
12895   tree pack, packs = NULL_TREE;
12896   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12897   int len = TREE_VEC_LENGTH (packed_args);
12898
12899   /* Determine the parameter packs we will be deducing from the
12900      pattern, and record their current deductions.  */
12901   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12902        pack; pack = TREE_CHAIN (pack))
12903     {
12904       tree parm_pack = TREE_VALUE (pack);
12905       int idx, level;
12906
12907       /* Determine the index and level of this parameter pack.  */
12908       template_parm_level_and_index (parm_pack, &level, &idx);
12909
12910       /* Keep track of the parameter packs and their corresponding
12911          argument packs.  */
12912       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12913       TREE_TYPE (packs) = make_tree_vec (len - start);
12914     }
12915   
12916   /* Loop through all of the arguments that have not yet been
12917      unified and unify each with the pattern.  */
12918   for (i = start; i < len; i++)
12919     {
12920       tree parm = pattern;
12921
12922       /* For each parameter pack, clear out the deduced value so that
12923          we can deduce it again.  */
12924       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12925         {
12926           int idx, level;
12927           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12928
12929           TMPL_ARG (targs, level, idx) = NULL_TREE;
12930         }
12931
12932       /* Unify the pattern with the current argument.  */
12933       {
12934         tree arg = TREE_VEC_ELT (packed_args, i);
12935         tree arg_expr = NULL_TREE;
12936         int arg_strict = strict;
12937         bool skip_arg_p = false;
12938
12939         if (call_args_p)
12940           {
12941             int sub_strict;
12942
12943             /* This mirrors what we do in type_unification_real.  */
12944             switch (strict)
12945               {
12946               case DEDUCE_CALL:
12947                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12948                               | UNIFY_ALLOW_MORE_CV_QUAL
12949                               | UNIFY_ALLOW_DERIVED);
12950                 break;
12951                 
12952               case DEDUCE_CONV:
12953                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12954                 break;
12955                 
12956               case DEDUCE_EXACT:
12957                 sub_strict = UNIFY_ALLOW_NONE;
12958                 break;
12959                 
12960               default:
12961                 gcc_unreachable ();
12962               }
12963
12964             if (!TYPE_P (arg))
12965               {
12966                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12967                 if (type_unknown_p (arg))
12968                   {
12969                     /* [temp.deduct.type] A template-argument can be
12970                        deduced from a pointer to function or pointer
12971                        to member function argument if the set of
12972                        overloaded functions does not contain function
12973                        templates and at most one of a set of
12974                        overloaded functions provides a unique
12975                        match.  */
12976
12977                     if (resolve_overloaded_unification
12978                         (tparms, targs, parm, arg, strict, sub_strict)
12979                         != 0)
12980                       return 1;
12981                     skip_arg_p = true;
12982                   }
12983
12984                 if (!skip_arg_p)
12985                   {
12986                     arg_expr = arg;
12987                     arg = unlowered_expr_type (arg);
12988                     if (arg == error_mark_node)
12989                       return 1;
12990                   }
12991               }
12992       
12993             arg_strict = sub_strict;
12994
12995             if (!subr)
12996               arg_strict |= 
12997                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12998                                                   arg_expr);
12999           }
13000
13001         if (!skip_arg_p)
13002           {
13003             if (unify (tparms, targs, parm, arg, arg_strict))
13004               return 1;
13005           }
13006       }
13007
13008       /* For each parameter pack, collect the deduced value.  */
13009       for (pack = packs; pack; pack = TREE_CHAIN (pack))
13010         {
13011           int idx, level;
13012           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13013
13014           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
13015             TMPL_ARG (targs, level, idx);
13016         }
13017     }
13018
13019   /* Verify that the results of unification with the parameter packs
13020      produce results consistent with what we've seen before, and make
13021      the deduced argument packs available.  */
13022   for (pack = packs; pack; pack = TREE_CHAIN (pack))
13023     {
13024       tree old_pack = TREE_VALUE (pack);
13025       tree new_args = TREE_TYPE (pack);
13026       int i, len = TREE_VEC_LENGTH (new_args);
13027       bool nondeduced_p = false;
13028
13029       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
13030          actually deduce anything.  */
13031       for (i = 0; i < len && !nondeduced_p; ++i)
13032         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
13033           nondeduced_p = true;
13034       if (nondeduced_p)
13035         continue;
13036
13037       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
13038         {
13039           /* Prepend the explicit arguments onto NEW_ARGS.  */
13040           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
13041           tree old_args = new_args;
13042           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
13043           int len = explicit_len + TREE_VEC_LENGTH (old_args);
13044
13045           /* Copy the explicit arguments.  */
13046           new_args = make_tree_vec (len);
13047           for (i = 0; i < explicit_len; i++)
13048             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
13049
13050           /* Copy the deduced arguments.  */
13051           for (; i < len; i++)
13052             TREE_VEC_ELT (new_args, i) =
13053               TREE_VEC_ELT (old_args, i - explicit_len);
13054         }
13055
13056       if (!old_pack)
13057         {
13058           tree result;
13059           int idx, level;
13060           
13061           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13062
13063           /* Build the deduced *_ARGUMENT_PACK.  */
13064           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
13065             {
13066               result = make_node (NONTYPE_ARGUMENT_PACK);
13067               TREE_TYPE (result) = 
13068                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
13069               TREE_CONSTANT (result) = 1;
13070             }
13071           else
13072             result = make_node (TYPE_ARGUMENT_PACK);
13073
13074           SET_ARGUMENT_PACK_ARGS (result, new_args);
13075
13076           /* Note the deduced argument packs for this parameter
13077              pack.  */
13078           TMPL_ARG (targs, level, idx) = result;
13079         }
13080       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
13081                && (ARGUMENT_PACK_ARGS (old_pack) 
13082                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
13083         {
13084           /* We only had the explicitly-provided arguments before, but
13085              now we have a complete set of arguments.  */
13086           int idx, level;
13087           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
13088           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13089
13090           /* Keep the original deduced argument pack.  */
13091           TMPL_ARG (targs, level, idx) = old_pack;
13092
13093           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
13094           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
13095           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
13096         }
13097       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
13098                                     new_args))
13099         /* Inconsistent unification of this parameter pack.  */
13100         return 1;
13101       else
13102         {
13103           int idx, level;
13104           
13105           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13106
13107           /* Keep the original deduced argument pack.  */
13108           TMPL_ARG (targs, level, idx) = old_pack;
13109         }
13110     }
13111
13112   return 0;
13113 }
13114
13115 /* Deduce the value of template parameters.  TPARMS is the (innermost)
13116    set of template parameters to a template.  TARGS is the bindings
13117    for those template parameters, as determined thus far; TARGS may
13118    include template arguments for outer levels of template parameters
13119    as well.  PARM is a parameter to a template function, or a
13120    subcomponent of that parameter; ARG is the corresponding argument.
13121    This function attempts to match PARM with ARG in a manner
13122    consistent with the existing assignments in TARGS.  If more values
13123    are deduced, then TARGS is updated.
13124
13125    Returns 0 if the type deduction succeeds, 1 otherwise.  The
13126    parameter STRICT is a bitwise or of the following flags:
13127
13128      UNIFY_ALLOW_NONE:
13129        Require an exact match between PARM and ARG.
13130      UNIFY_ALLOW_MORE_CV_QUAL:
13131        Allow the deduced ARG to be more cv-qualified (by qualification
13132        conversion) than ARG.
13133      UNIFY_ALLOW_LESS_CV_QUAL:
13134        Allow the deduced ARG to be less cv-qualified than ARG.
13135      UNIFY_ALLOW_DERIVED:
13136        Allow the deduced ARG to be a template base class of ARG,
13137        or a pointer to a template base class of the type pointed to by
13138        ARG.
13139      UNIFY_ALLOW_INTEGER:
13140        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
13141        case for more information.
13142      UNIFY_ALLOW_OUTER_LEVEL:
13143        This is the outermost level of a deduction. Used to determine validity
13144        of qualification conversions. A valid qualification conversion must
13145        have const qualified pointers leading up to the inner type which
13146        requires additional CV quals, except at the outer level, where const
13147        is not required [conv.qual]. It would be normal to set this flag in
13148        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
13149      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
13150        This is the outermost level of a deduction, and PARM can be more CV
13151        qualified at this point.
13152      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
13153        This is the outermost level of a deduction, and PARM can be less CV
13154        qualified at this point.  */
13155
13156 static int
13157 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
13158 {
13159   int idx;
13160   tree targ;
13161   tree tparm;
13162   int strict_in = strict;
13163
13164   /* I don't think this will do the right thing with respect to types.
13165      But the only case I've seen it in so far has been array bounds, where
13166      signedness is the only information lost, and I think that will be
13167      okay.  */
13168   while (TREE_CODE (parm) == NOP_EXPR)
13169     parm = TREE_OPERAND (parm, 0);
13170
13171   if (arg == error_mark_node)
13172     return 1;
13173   if (arg == unknown_type_node
13174       || arg == init_list_type_node)
13175     /* We can't deduce anything from this, but we might get all the
13176        template args from other function args.  */
13177     return 0;
13178
13179   /* If PARM uses template parameters, then we can't bail out here,
13180      even if ARG == PARM, since we won't record unifications for the
13181      template parameters.  We might need them if we're trying to
13182      figure out which of two things is more specialized.  */
13183   if (arg == parm && !uses_template_parms (parm))
13184     return 0;
13185
13186   /* Handle init lists early, so the rest of the function can assume
13187      we're dealing with a type. */
13188   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
13189     {
13190       tree elt, elttype;
13191       unsigned i;
13192
13193       if (!is_std_init_list (parm))
13194         /* We can only deduce from an initializer list argument if the
13195            parameter is std::initializer_list; otherwise this is a
13196            non-deduced context. */
13197         return 0;
13198
13199       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
13200
13201       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
13202         {
13203           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
13204             elt = TREE_TYPE (elt);
13205           if (unify (tparms, targs, elttype, elt, UNIFY_ALLOW_NONE))
13206             return 1;
13207         }
13208       return 0;
13209     }
13210
13211   /* Immediately reject some pairs that won't unify because of
13212      cv-qualification mismatches.  */
13213   if (TREE_CODE (arg) == TREE_CODE (parm)
13214       && TYPE_P (arg)
13215       /* It is the elements of the array which hold the cv quals of an array
13216          type, and the elements might be template type parms. We'll check
13217          when we recurse.  */
13218       && TREE_CODE (arg) != ARRAY_TYPE
13219       /* We check the cv-qualifiers when unifying with template type
13220          parameters below.  We want to allow ARG `const T' to unify with
13221          PARM `T' for example, when computing which of two templates
13222          is more specialized, for example.  */
13223       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
13224       && !check_cv_quals_for_unify (strict_in, arg, parm))
13225     return 1;
13226
13227   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
13228       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
13229     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
13230   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
13231   strict &= ~UNIFY_ALLOW_DERIVED;
13232   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13233   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
13234
13235   switch (TREE_CODE (parm))
13236     {
13237     case TYPENAME_TYPE:
13238     case SCOPE_REF:
13239     case UNBOUND_CLASS_TEMPLATE:
13240       /* In a type which contains a nested-name-specifier, template
13241          argument values cannot be deduced for template parameters used
13242          within the nested-name-specifier.  */
13243       return 0;
13244
13245     case TEMPLATE_TYPE_PARM:
13246     case TEMPLATE_TEMPLATE_PARM:
13247     case BOUND_TEMPLATE_TEMPLATE_PARM:
13248       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13249       if (tparm == error_mark_node)
13250         return 1;
13251
13252       if (TEMPLATE_TYPE_LEVEL (parm)
13253           != template_decl_level (tparm))
13254         /* The PARM is not one we're trying to unify.  Just check
13255            to see if it matches ARG.  */
13256         return (TREE_CODE (arg) == TREE_CODE (parm)
13257                 && same_type_p (parm, arg)) ? 0 : 1;
13258       idx = TEMPLATE_TYPE_IDX (parm);
13259       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13260       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
13261
13262       /* Check for mixed types and values.  */
13263       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13264            && TREE_CODE (tparm) != TYPE_DECL)
13265           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13266               && TREE_CODE (tparm) != TEMPLATE_DECL))
13267         return 1;
13268
13269       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13270         {
13271           /* ARG must be constructed from a template class or a template
13272              template parameter.  */
13273           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
13274               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
13275             return 1;
13276
13277           {
13278             tree parmvec = TYPE_TI_ARGS (parm);
13279             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
13280             tree parm_parms 
13281               = DECL_INNERMOST_TEMPLATE_PARMS
13282                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
13283             int i, len;
13284             int parm_variadic_p = 0;
13285
13286             /* The resolution to DR150 makes clear that default
13287                arguments for an N-argument may not be used to bind T
13288                to a template template parameter with fewer than N
13289                parameters.  It is not safe to permit the binding of
13290                default arguments as an extension, as that may change
13291                the meaning of a conforming program.  Consider:
13292
13293                   struct Dense { static const unsigned int dim = 1; };
13294
13295                   template <template <typename> class View,
13296                             typename Block>
13297                   void operator+(float, View<Block> const&);
13298
13299                   template <typename Block,
13300                             unsigned int Dim = Block::dim>
13301                   struct Lvalue_proxy { operator float() const; };
13302
13303                   void
13304                   test_1d (void) {
13305                     Lvalue_proxy<Dense> p;
13306                     float b;
13307                     b + p;
13308                   }
13309
13310               Here, if Lvalue_proxy is permitted to bind to View, then
13311               the global operator+ will be used; if they are not, the
13312               Lvalue_proxy will be converted to float.  */
13313             if (coerce_template_parms (parm_parms,
13314                                        argvec,
13315                                        TYPE_TI_TEMPLATE (parm),
13316                                        tf_none,
13317                                        /*require_all_args=*/true,
13318                                        /*use_default_args=*/false)
13319                 == error_mark_node)
13320               return 1;
13321
13322             /* Deduce arguments T, i from TT<T> or TT<i>.
13323                We check each element of PARMVEC and ARGVEC individually
13324                rather than the whole TREE_VEC since they can have
13325                different number of elements.  */
13326
13327             parmvec = expand_template_argument_pack (parmvec);
13328             argvec = expand_template_argument_pack (argvec);
13329
13330             len = TREE_VEC_LENGTH (parmvec);
13331
13332             /* Check if the parameters end in a pack, making them
13333                variadic.  */
13334             if (len > 0
13335                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
13336               parm_variadic_p = 1;
13337             
13338             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
13339               return 1;
13340
13341              for (i = 0; i < len - parm_variadic_p; ++i)
13342               {
13343                 if (unify (tparms, targs,
13344                            TREE_VEC_ELT (parmvec, i),
13345                            TREE_VEC_ELT (argvec, i),
13346                            UNIFY_ALLOW_NONE))
13347                   return 1;
13348               }
13349
13350             if (parm_variadic_p
13351                 && unify_pack_expansion (tparms, targs,
13352                                          parmvec, argvec,
13353                                          UNIFY_ALLOW_NONE,
13354                                          /*call_args_p=*/false,
13355                                          /*subr=*/false))
13356               return 1;
13357           }
13358           arg = TYPE_TI_TEMPLATE (arg);
13359
13360           /* Fall through to deduce template name.  */
13361         }
13362
13363       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13364           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13365         {
13366           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
13367
13368           /* Simple cases: Value already set, does match or doesn't.  */
13369           if (targ != NULL_TREE && template_args_equal (targ, arg))
13370             return 0;
13371           else if (targ)
13372             return 1;
13373         }
13374       else
13375         {
13376           /* If PARM is `const T' and ARG is only `int', we don't have
13377              a match unless we are allowing additional qualification.
13378              If ARG is `const int' and PARM is just `T' that's OK;
13379              that binds `const int' to `T'.  */
13380           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
13381                                          arg, parm))
13382             return 1;
13383
13384           /* Consider the case where ARG is `const volatile int' and
13385              PARM is `const T'.  Then, T should be `volatile int'.  */
13386           arg = cp_build_qualified_type_real
13387             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
13388           if (arg == error_mark_node)
13389             return 1;
13390
13391           /* Simple cases: Value already set, does match or doesn't.  */
13392           if (targ != NULL_TREE && same_type_p (targ, arg))
13393             return 0;
13394           else if (targ)
13395             return 1;
13396
13397           /* Make sure that ARG is not a variable-sized array.  (Note
13398              that were talking about variable-sized arrays (like
13399              `int[n]'), rather than arrays of unknown size (like
13400              `int[]').)  We'll get very confused by such a type since
13401              the bound of the array will not be computable in an
13402              instantiation.  Besides, such types are not allowed in
13403              ISO C++, so we can do as we please here.  */
13404           if (variably_modified_type_p (arg, NULL_TREE))
13405             return 1;
13406         }
13407
13408       /* If ARG is a parameter pack or an expansion, we cannot unify
13409          against it unless PARM is also a parameter pack.  */
13410       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13411           && !template_parameter_pack_p (parm))
13412         return 1;
13413
13414       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13415       return 0;
13416
13417     case TEMPLATE_PARM_INDEX:
13418       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13419       if (tparm == error_mark_node)
13420         return 1;
13421
13422       if (TEMPLATE_PARM_LEVEL (parm)
13423           != template_decl_level (tparm))
13424         /* The PARM is not one we're trying to unify.  Just check
13425            to see if it matches ARG.  */
13426         return !(TREE_CODE (arg) == TREE_CODE (parm)
13427                  && cp_tree_equal (parm, arg));
13428
13429       idx = TEMPLATE_PARM_IDX (parm);
13430       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13431
13432       if (targ)
13433         return !cp_tree_equal (targ, arg);
13434
13435       /* [temp.deduct.type] If, in the declaration of a function template
13436          with a non-type template-parameter, the non-type
13437          template-parameter is used in an expression in the function
13438          parameter-list and, if the corresponding template-argument is
13439          deduced, the template-argument type shall match the type of the
13440          template-parameter exactly, except that a template-argument
13441          deduced from an array bound may be of any integral type.
13442          The non-type parameter might use already deduced type parameters.  */
13443       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
13444       if (!TREE_TYPE (arg))
13445         /* Template-parameter dependent expression.  Just accept it for now.
13446            It will later be processed in convert_template_argument.  */
13447         ;
13448       else if (same_type_p (TREE_TYPE (arg), tparm))
13449         /* OK */;
13450       else if ((strict & UNIFY_ALLOW_INTEGER)
13451                && (TREE_CODE (tparm) == INTEGER_TYPE
13452                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
13453         /* Convert the ARG to the type of PARM; the deduced non-type
13454            template argument must exactly match the types of the
13455            corresponding parameter.  */
13456         arg = fold (build_nop (TREE_TYPE (parm), arg));
13457       else if (uses_template_parms (tparm))
13458         /* We haven't deduced the type of this parameter yet.  Try again
13459            later.  */
13460         return 0;
13461       else
13462         return 1;
13463
13464       /* If ARG is a parameter pack or an expansion, we cannot unify
13465          against it unless PARM is also a parameter pack.  */
13466       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13467           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13468         return 1;
13469
13470       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13471       return 0;
13472
13473     case PTRMEM_CST:
13474      {
13475         /* A pointer-to-member constant can be unified only with
13476          another constant.  */
13477       if (TREE_CODE (arg) != PTRMEM_CST)
13478         return 1;
13479
13480       /* Just unify the class member. It would be useless (and possibly
13481          wrong, depending on the strict flags) to unify also
13482          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13483          arg refer to the same variable, even if through different
13484          classes. For instance:
13485
13486          struct A { int x; };
13487          struct B : A { };
13488
13489          Unification of &A::x and &B::x must succeed.  */
13490       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13491                     PTRMEM_CST_MEMBER (arg), strict);
13492      }
13493
13494     case POINTER_TYPE:
13495       {
13496         if (TREE_CODE (arg) != POINTER_TYPE)
13497           return 1;
13498
13499         /* [temp.deduct.call]
13500
13501            A can be another pointer or pointer to member type that can
13502            be converted to the deduced A via a qualification
13503            conversion (_conv.qual_).
13504
13505            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13506            This will allow for additional cv-qualification of the
13507            pointed-to types if appropriate.  */
13508
13509         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13510           /* The derived-to-base conversion only persists through one
13511              level of pointers.  */
13512           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13513
13514         return unify (tparms, targs, TREE_TYPE (parm),
13515                       TREE_TYPE (arg), strict);
13516       }
13517
13518     case REFERENCE_TYPE:
13519       if (TREE_CODE (arg) != REFERENCE_TYPE)
13520         return 1;
13521       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13522                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13523
13524     case ARRAY_TYPE:
13525       if (TREE_CODE (arg) != ARRAY_TYPE)
13526         return 1;
13527       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13528           != (TYPE_DOMAIN (arg) == NULL_TREE))
13529         return 1;
13530       if (TYPE_DOMAIN (parm) != NULL_TREE)
13531         {
13532           tree parm_max;
13533           tree arg_max;
13534           bool parm_cst;
13535           bool arg_cst;
13536
13537           /* Our representation of array types uses "N - 1" as the
13538              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13539              not an integer constant.  We cannot unify arbitrarily
13540              complex expressions, so we eliminate the MINUS_EXPRs
13541              here.  */
13542           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13543           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13544           if (!parm_cst)
13545             {
13546               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13547               parm_max = TREE_OPERAND (parm_max, 0);
13548             }
13549           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13550           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13551           if (!arg_cst)
13552             {
13553               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13554                  trying to unify the type of a variable with the type
13555                  of a template parameter.  For example:
13556
13557                    template <unsigned int N>
13558                    void f (char (&) [N]);
13559                    int g(); 
13560                    void h(int i) {
13561                      char a[g(i)];
13562                      f(a); 
13563                    }
13564
13565                 Here, the type of the ARG will be "int [g(i)]", and
13566                 may be a SAVE_EXPR, etc.  */
13567               if (TREE_CODE (arg_max) != MINUS_EXPR)
13568                 return 1;
13569               arg_max = TREE_OPERAND (arg_max, 0);
13570             }
13571
13572           /* If only one of the bounds used a MINUS_EXPR, compensate
13573              by adding one to the other bound.  */
13574           if (parm_cst && !arg_cst)
13575             parm_max = fold_build2 (PLUS_EXPR,
13576                                     integer_type_node,
13577                                     parm_max,
13578                                     integer_one_node);
13579           else if (arg_cst && !parm_cst)
13580             arg_max = fold_build2 (PLUS_EXPR,
13581                                    integer_type_node,
13582                                    arg_max,
13583                                    integer_one_node);
13584
13585           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13586             return 1;
13587         }
13588       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13589                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13590
13591     case REAL_TYPE:
13592     case COMPLEX_TYPE:
13593     case VECTOR_TYPE:
13594     case INTEGER_TYPE:
13595     case BOOLEAN_TYPE:
13596     case ENUMERAL_TYPE:
13597     case VOID_TYPE:
13598       if (TREE_CODE (arg) != TREE_CODE (parm))
13599         return 1;
13600
13601       /* We have already checked cv-qualification at the top of the
13602          function.  */
13603       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13604         return 1;
13605
13606       /* As far as unification is concerned, this wins.  Later checks
13607          will invalidate it if necessary.  */
13608       return 0;
13609
13610       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13611       /* Type INTEGER_CST can come from ordinary constant template args.  */
13612     case INTEGER_CST:
13613       while (TREE_CODE (arg) == NOP_EXPR)
13614         arg = TREE_OPERAND (arg, 0);
13615
13616       if (TREE_CODE (arg) != INTEGER_CST)
13617         return 1;
13618       return !tree_int_cst_equal (parm, arg);
13619
13620     case TREE_VEC:
13621       {
13622         int i;
13623         if (TREE_CODE (arg) != TREE_VEC)
13624           return 1;
13625         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13626           return 1;
13627         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13628           if (unify (tparms, targs,
13629                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13630                      UNIFY_ALLOW_NONE))
13631             return 1;
13632         return 0;
13633       }
13634
13635     case RECORD_TYPE:
13636     case UNION_TYPE:
13637       if (TREE_CODE (arg) != TREE_CODE (parm))
13638         return 1;
13639
13640       if (TYPE_PTRMEMFUNC_P (parm))
13641         {
13642           if (!TYPE_PTRMEMFUNC_P (arg))
13643             return 1;
13644
13645           return unify (tparms, targs,
13646                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13647                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13648                         strict);
13649         }
13650
13651       if (CLASSTYPE_TEMPLATE_INFO (parm))
13652         {
13653           tree t = NULL_TREE;
13654
13655           if (strict_in & UNIFY_ALLOW_DERIVED)
13656             {
13657               /* First, we try to unify the PARM and ARG directly.  */
13658               t = try_class_unification (tparms, targs,
13659                                          parm, arg);
13660
13661               if (!t)
13662                 {
13663                   /* Fallback to the special case allowed in
13664                      [temp.deduct.call]:
13665
13666                        If P is a class, and P has the form
13667                        template-id, then A can be a derived class of
13668                        the deduced A.  Likewise, if P is a pointer to
13669                        a class of the form template-id, A can be a
13670                        pointer to a derived class pointed to by the
13671                        deduced A.  */
13672                   t = get_template_base (tparms, targs, parm, arg);
13673
13674                   if (!t)
13675                     return 1;
13676                 }
13677             }
13678           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13679                    && (CLASSTYPE_TI_TEMPLATE (parm)
13680                        == CLASSTYPE_TI_TEMPLATE (arg)))
13681             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13682                Then, we should unify `int' and `U'.  */
13683             t = arg;
13684           else
13685             /* There's no chance of unification succeeding.  */
13686             return 1;
13687
13688           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13689                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13690         }
13691       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13692         return 1;
13693       return 0;
13694
13695     case METHOD_TYPE:
13696     case FUNCTION_TYPE:
13697       if (TREE_CODE (arg) != TREE_CODE (parm))
13698         return 1;
13699
13700       /* CV qualifications for methods can never be deduced, they must
13701          match exactly.  We need to check them explicitly here,
13702          because type_unification_real treats them as any other
13703          cv-qualified parameter.  */
13704       if (TREE_CODE (parm) == METHOD_TYPE
13705           && (!check_cv_quals_for_unify
13706               (UNIFY_ALLOW_NONE,
13707                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13708                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13709         return 1;
13710
13711       if (unify (tparms, targs, TREE_TYPE (parm),
13712                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13713         return 1;
13714       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13715                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13716                                     LOOKUP_NORMAL);
13717
13718     case OFFSET_TYPE:
13719       /* Unify a pointer to member with a pointer to member function, which
13720          deduces the type of the member as a function type. */
13721       if (TYPE_PTRMEMFUNC_P (arg))
13722         {
13723           tree method_type;
13724           tree fntype;
13725           cp_cv_quals cv_quals;
13726
13727           /* Check top-level cv qualifiers */
13728           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13729             return 1;
13730
13731           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13732                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13733             return 1;
13734
13735           /* Determine the type of the function we are unifying against. */
13736           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13737           fntype =
13738             build_function_type (TREE_TYPE (method_type),
13739                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13740
13741           /* Extract the cv-qualifiers of the member function from the
13742              implicit object parameter and place them on the function
13743              type to be restored later. */
13744           cv_quals =
13745             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13746           fntype = build_qualified_type (fntype, cv_quals);
13747           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13748         }
13749
13750       if (TREE_CODE (arg) != OFFSET_TYPE)
13751         return 1;
13752       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13753                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13754         return 1;
13755       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13756                     strict);
13757
13758     case CONST_DECL:
13759       if (DECL_TEMPLATE_PARM_P (parm))
13760         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13761       if (arg != integral_constant_value (parm))
13762         return 1;
13763       return 0;
13764
13765     case FIELD_DECL:
13766     case TEMPLATE_DECL:
13767       /* Matched cases are handled by the ARG == PARM test above.  */
13768       return 1;
13769
13770     case TYPE_ARGUMENT_PACK:
13771     case NONTYPE_ARGUMENT_PACK:
13772       {
13773         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13774         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13775         int i, len = TREE_VEC_LENGTH (packed_parms);
13776         int argslen = TREE_VEC_LENGTH (packed_args);
13777         int parm_variadic_p = 0;
13778
13779         for (i = 0; i < len; ++i)
13780           {
13781             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13782               {
13783                 if (i == len - 1)
13784                   /* We can unify against something with a trailing
13785                      parameter pack.  */
13786                   parm_variadic_p = 1;
13787                 else
13788                   /* Since there is something following the pack
13789                      expansion, we cannot unify this template argument
13790                      list.  */
13791                   return 0;
13792               }
13793           }
13794           
13795
13796         /* If we don't have enough arguments to satisfy the parameters
13797            (not counting the pack expression at the end), or we have
13798            too many arguments for a parameter list that doesn't end in
13799            a pack expression, we can't unify.  */
13800         if (argslen < (len - parm_variadic_p)
13801             || (argslen > len && !parm_variadic_p))
13802           return 1;
13803
13804         /* Unify all of the parameters that precede the (optional)
13805            pack expression.  */
13806         for (i = 0; i < len - parm_variadic_p; ++i)
13807           {
13808             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13809                        TREE_VEC_ELT (packed_args, i), strict))
13810               return 1;
13811           }
13812
13813         if (parm_variadic_p)
13814           return unify_pack_expansion (tparms, targs, 
13815                                        packed_parms, packed_args,
13816                                        strict, /*call_args_p=*/false,
13817                                        /*subr=*/false);
13818         return 0;
13819       }
13820
13821       break;
13822
13823     case TYPEOF_TYPE:
13824     case DECLTYPE_TYPE:
13825       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13826          nodes.  */
13827       return 0;
13828
13829     case ERROR_MARK:
13830       /* Unification fails if we hit an error node.  */
13831       return 1;
13832
13833     default:
13834       gcc_assert (EXPR_P (parm));
13835
13836       /* We must be looking at an expression.  This can happen with
13837          something like:
13838
13839            template <int I>
13840            void foo(S<I>, S<I + 2>);
13841
13842          This is a "nondeduced context":
13843
13844            [deduct.type]
13845
13846            The nondeduced contexts are:
13847
13848            --A type that is a template-id in which one or more of
13849              the template-arguments is an expression that references
13850              a template-parameter.
13851
13852          In these cases, we assume deduction succeeded, but don't
13853          actually infer any unifications.  */
13854
13855       if (!uses_template_parms (parm)
13856           && !template_args_equal (parm, arg))
13857         return 1;
13858       else
13859         return 0;
13860     }
13861 }
13862 \f
13863 /* Note that DECL can be defined in this translation unit, if
13864    required.  */
13865
13866 static void
13867 mark_definable (tree decl)
13868 {
13869   tree clone;
13870   DECL_NOT_REALLY_EXTERN (decl) = 1;
13871   FOR_EACH_CLONE (clone, decl)
13872     DECL_NOT_REALLY_EXTERN (clone) = 1;
13873 }
13874
13875 /* Called if RESULT is explicitly instantiated, or is a member of an
13876    explicitly instantiated class.  */
13877
13878 void
13879 mark_decl_instantiated (tree result, int extern_p)
13880 {
13881   SET_DECL_EXPLICIT_INSTANTIATION (result);
13882
13883   /* If this entity has already been written out, it's too late to
13884      make any modifications.  */
13885   if (TREE_ASM_WRITTEN (result))
13886     return;
13887
13888   if (TREE_CODE (result) != FUNCTION_DECL)
13889     /* The TREE_PUBLIC flag for function declarations will have been
13890        set correctly by tsubst.  */
13891     TREE_PUBLIC (result) = 1;
13892
13893   /* This might have been set by an earlier implicit instantiation.  */
13894   DECL_COMDAT (result) = 0;
13895
13896   if (extern_p)
13897     DECL_NOT_REALLY_EXTERN (result) = 0;
13898   else
13899     {
13900       mark_definable (result);
13901       /* Always make artificials weak.  */
13902       if (DECL_ARTIFICIAL (result) && flag_weak)
13903         comdat_linkage (result);
13904       /* For WIN32 we also want to put explicit instantiations in
13905          linkonce sections.  */
13906       else if (TREE_PUBLIC (result))
13907         maybe_make_one_only (result);
13908     }
13909
13910   /* If EXTERN_P, then this function will not be emitted -- unless
13911      followed by an explicit instantiation, at which point its linkage
13912      will be adjusted.  If !EXTERN_P, then this function will be
13913      emitted here.  In neither circumstance do we want
13914      import_export_decl to adjust the linkage.  */
13915   DECL_INTERFACE_KNOWN (result) = 1;
13916 }
13917
13918 /* Given two function templates PAT1 and PAT2, return:
13919
13920    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13921    -1 if PAT2 is more specialized than PAT1.
13922    0 if neither is more specialized.
13923
13924    LEN indicates the number of parameters we should consider
13925    (defaulted parameters should not be considered).
13926
13927    The 1998 std underspecified function template partial ordering, and
13928    DR214 addresses the issue.  We take pairs of arguments, one from
13929    each of the templates, and deduce them against each other.  One of
13930    the templates will be more specialized if all the *other*
13931    template's arguments deduce against its arguments and at least one
13932    of its arguments *does* *not* deduce against the other template's
13933    corresponding argument.  Deduction is done as for class templates.
13934    The arguments used in deduction have reference and top level cv
13935    qualifiers removed.  Iff both arguments were originally reference
13936    types *and* deduction succeeds in both directions, the template
13937    with the more cv-qualified argument wins for that pairing (if
13938    neither is more cv-qualified, they both are equal).  Unlike regular
13939    deduction, after all the arguments have been deduced in this way,
13940    we do *not* verify the deduced template argument values can be
13941    substituted into non-deduced contexts, nor do we have to verify
13942    that all template arguments have been deduced.  */
13943
13944 int
13945 more_specialized_fn (tree pat1, tree pat2, int len)
13946 {
13947   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13948   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13949   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13950   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13951   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13952   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13953   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13954   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13955   int better1 = 0;
13956   int better2 = 0;
13957
13958   /* Remove the this parameter from non-static member functions.  If
13959      one is a non-static member function and the other is not a static
13960      member function, remove the first parameter from that function
13961      also.  This situation occurs for operator functions where we
13962      locate both a member function (with this pointer) and non-member
13963      operator (with explicit first operand).  */
13964   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13965     {
13966       len--; /* LEN is the number of significant arguments for DECL1 */
13967       args1 = TREE_CHAIN (args1);
13968       if (!DECL_STATIC_FUNCTION_P (decl2))
13969         args2 = TREE_CHAIN (args2);
13970     }
13971   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13972     {
13973       args2 = TREE_CHAIN (args2);
13974       if (!DECL_STATIC_FUNCTION_P (decl1))
13975         {
13976           len--;
13977           args1 = TREE_CHAIN (args1);
13978         }
13979     }
13980
13981   /* If only one is a conversion operator, they are unordered.  */
13982   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13983     return 0;
13984
13985   /* Consider the return type for a conversion function */
13986   if (DECL_CONV_FN_P (decl1))
13987     {
13988       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13989       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13990       len++;
13991     }
13992
13993   processing_template_decl++;
13994
13995   while (len--
13996          /* Stop when an ellipsis is seen.  */
13997          && args1 != NULL_TREE && args2 != NULL_TREE)
13998     {
13999       tree arg1 = TREE_VALUE (args1);
14000       tree arg2 = TREE_VALUE (args2);
14001       int deduce1, deduce2;
14002       int quals1 = -1;
14003       int quals2 = -1;
14004
14005       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14006           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14007         {
14008           /* When both arguments are pack expansions, we need only
14009              unify the patterns themselves.  */
14010           arg1 = PACK_EXPANSION_PATTERN (arg1);
14011           arg2 = PACK_EXPANSION_PATTERN (arg2);
14012
14013           /* This is the last comparison we need to do.  */
14014           len = 0;
14015         }
14016
14017       if (TREE_CODE (arg1) == REFERENCE_TYPE)
14018         {
14019           arg1 = TREE_TYPE (arg1);
14020           quals1 = cp_type_quals (arg1);
14021         }
14022
14023       if (TREE_CODE (arg2) == REFERENCE_TYPE)
14024         {
14025           arg2 = TREE_TYPE (arg2);
14026           quals2 = cp_type_quals (arg2);
14027         }
14028
14029       if ((quals1 < 0) != (quals2 < 0))
14030         {
14031           /* Only of the args is a reference, see if we should apply
14032              array/function pointer decay to it.  This is not part of
14033              DR214, but is, IMHO, consistent with the deduction rules
14034              for the function call itself, and with our earlier
14035              implementation of the underspecified partial ordering
14036              rules.  (nathan).  */
14037           if (quals1 >= 0)
14038             {
14039               switch (TREE_CODE (arg1))
14040                 {
14041                 case ARRAY_TYPE:
14042                   arg1 = TREE_TYPE (arg1);
14043                   /* FALLTHROUGH. */
14044                 case FUNCTION_TYPE:
14045                   arg1 = build_pointer_type (arg1);
14046                   break;
14047
14048                 default:
14049                   break;
14050                 }
14051             }
14052           else
14053             {
14054               switch (TREE_CODE (arg2))
14055                 {
14056                 case ARRAY_TYPE:
14057                   arg2 = TREE_TYPE (arg2);
14058                   /* FALLTHROUGH. */
14059                 case FUNCTION_TYPE:
14060                   arg2 = build_pointer_type (arg2);
14061                   break;
14062
14063                 default:
14064                   break;
14065                 }
14066             }
14067         }
14068
14069       arg1 = TYPE_MAIN_VARIANT (arg1);
14070       arg2 = TYPE_MAIN_VARIANT (arg2);
14071
14072       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
14073         {
14074           int i, len2 = list_length (args2);
14075           tree parmvec = make_tree_vec (1);
14076           tree argvec = make_tree_vec (len2);
14077           tree ta = args2;
14078
14079           /* Setup the parameter vector, which contains only ARG1.  */
14080           TREE_VEC_ELT (parmvec, 0) = arg1;
14081
14082           /* Setup the argument vector, which contains the remaining
14083              arguments.  */
14084           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
14085             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
14086
14087           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
14088                                            argvec, UNIFY_ALLOW_NONE, 
14089                                            /*call_args_p=*/false, 
14090                                            /*subr=*/0);
14091
14092           /* We cannot deduce in the other direction, because ARG1 is
14093              a pack expansion but ARG2 is not.  */
14094           deduce2 = 0;
14095         }
14096       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14097         {
14098           int i, len1 = list_length (args1);
14099           tree parmvec = make_tree_vec (1);
14100           tree argvec = make_tree_vec (len1);
14101           tree ta = args1;
14102
14103           /* Setup the parameter vector, which contains only ARG1.  */
14104           TREE_VEC_ELT (parmvec, 0) = arg2;
14105
14106           /* Setup the argument vector, which contains the remaining
14107              arguments.  */
14108           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
14109             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
14110
14111           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
14112                                            argvec, UNIFY_ALLOW_NONE, 
14113                                            /*call_args_p=*/false, 
14114                                            /*subr=*/0);
14115
14116           /* We cannot deduce in the other direction, because ARG2 is
14117              a pack expansion but ARG1 is not.*/
14118           deduce1 = 0;
14119         }
14120
14121       else
14122         {
14123           /* The normal case, where neither argument is a pack
14124              expansion.  */
14125           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
14126           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
14127         }
14128
14129       if (!deduce1)
14130         better2 = -1;
14131       if (!deduce2)
14132         better1 = -1;
14133       if (better1 < 0 && better2 < 0)
14134         /* We've failed to deduce something in either direction.
14135            These must be unordered.  */
14136         break;
14137
14138       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
14139         {
14140           /* Deduces in both directions, see if quals can
14141              disambiguate.  Pretend the worse one failed to deduce. */
14142           if ((quals1 & quals2) == quals2)
14143             deduce1 = 0;
14144           if ((quals1 & quals2) == quals1)
14145             deduce2 = 0;
14146         }
14147       if (deduce1 && !deduce2 && !better2)
14148         better2 = 1;
14149       if (deduce2 && !deduce1 && !better1)
14150         better1 = 1;
14151
14152       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14153           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14154         /* We have already processed all of the arguments in our
14155            handing of the pack expansion type.  */
14156         len = 0;
14157
14158       args1 = TREE_CHAIN (args1);
14159       args2 = TREE_CHAIN (args2);
14160     }
14161
14162   processing_template_decl--;
14163
14164   /* All things being equal, if the next argument is a pack expansion
14165      for one function but not for the other, prefer the
14166      non-variadic function.  */
14167   if ((better1 > 0) - (better2 > 0) == 0
14168       && args1 && TREE_VALUE (args1)
14169       && args2 && TREE_VALUE (args2))
14170     {
14171       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
14172         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
14173       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
14174         return 1;
14175     }
14176
14177   return (better1 > 0) - (better2 > 0);
14178 }
14179
14180 /* Determine which of two partial specializations is more specialized.
14181
14182    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
14183    to the first partial specialization.  The TREE_VALUE is the
14184    innermost set of template parameters for the partial
14185    specialization.  PAT2 is similar, but for the second template.
14186
14187    Return 1 if the first partial specialization is more specialized;
14188    -1 if the second is more specialized; 0 if neither is more
14189    specialized.
14190
14191    See [temp.class.order] for information about determining which of
14192    two templates is more specialized.  */
14193
14194 static int
14195 more_specialized_class (tree pat1, tree pat2)
14196 {
14197   tree targs;
14198   tree tmpl1, tmpl2;
14199   int winner = 0;
14200   bool any_deductions = false;
14201
14202   tmpl1 = TREE_TYPE (pat1);
14203   tmpl2 = TREE_TYPE (pat2);
14204
14205   /* Just like what happens for functions, if we are ordering between
14206      different class template specializations, we may encounter dependent
14207      types in the arguments, and we need our dependency check functions
14208      to behave correctly.  */
14209   ++processing_template_decl;
14210   targs = get_class_bindings (TREE_VALUE (pat1),
14211                               CLASSTYPE_TI_ARGS (tmpl1),
14212                               CLASSTYPE_TI_ARGS (tmpl2));
14213   if (targs)
14214     {
14215       --winner;
14216       any_deductions = true;
14217     }
14218
14219   targs = get_class_bindings (TREE_VALUE (pat2),
14220                               CLASSTYPE_TI_ARGS (tmpl2),
14221                               CLASSTYPE_TI_ARGS (tmpl1));
14222   if (targs)
14223     {
14224       ++winner;
14225       any_deductions = true;
14226     }
14227   --processing_template_decl;
14228
14229   /* In the case of a tie where at least one of the class templates
14230      has a parameter pack at the end, the template with the most
14231      non-packed parameters wins.  */
14232   if (winner == 0
14233       && any_deductions
14234       && (template_args_variadic_p (TREE_PURPOSE (pat1))
14235           || template_args_variadic_p (TREE_PURPOSE (pat2))))
14236     {
14237       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
14238       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
14239       int len1 = TREE_VEC_LENGTH (args1);
14240       int len2 = TREE_VEC_LENGTH (args2);
14241
14242       /* We don't count the pack expansion at the end.  */
14243       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
14244         --len1;
14245       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
14246         --len2;
14247
14248       if (len1 > len2)
14249         return 1;
14250       else if (len1 < len2)
14251         return -1;
14252     }
14253
14254   return winner;
14255 }
14256
14257 /* Return the template arguments that will produce the function signature
14258    DECL from the function template FN, with the explicit template
14259    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
14260    also match.  Return NULL_TREE if no satisfactory arguments could be
14261    found.  */
14262
14263 static tree
14264 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
14265 {
14266   int ntparms = DECL_NTPARMS (fn);
14267   tree targs = make_tree_vec (ntparms);
14268   tree decl_type;
14269   tree decl_arg_types;
14270
14271   /* Substitute the explicit template arguments into the type of DECL.
14272      The call to fn_type_unification will handle substitution into the
14273      FN.  */
14274   decl_type = TREE_TYPE (decl);
14275   if (explicit_args && uses_template_parms (decl_type))
14276     {
14277       tree tmpl;
14278       tree converted_args;
14279
14280       if (DECL_TEMPLATE_INFO (decl))
14281         tmpl = DECL_TI_TEMPLATE (decl);
14282       else
14283         /* We can get here for some invalid specializations.  */
14284         return NULL_TREE;
14285
14286       converted_args
14287         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
14288                                  explicit_args, NULL_TREE,
14289                                  tf_none,
14290                                  /*require_all_args=*/false,
14291                                  /*use_default_args=*/false);
14292       if (converted_args == error_mark_node)
14293         return NULL_TREE;
14294
14295       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
14296       if (decl_type == error_mark_node)
14297         return NULL_TREE;
14298     }
14299
14300   /* Never do unification on the 'this' parameter.  */
14301   decl_arg_types = skip_artificial_parms_for (decl, 
14302                                               TYPE_ARG_TYPES (decl_type));
14303
14304   if (fn_type_unification (fn, explicit_args, targs,
14305                            decl_arg_types,
14306                            (check_rettype || DECL_CONV_FN_P (fn)
14307                             ? TREE_TYPE (decl_type) : NULL_TREE),
14308                            DEDUCE_EXACT, LOOKUP_NORMAL))
14309     return NULL_TREE;
14310
14311   return targs;
14312 }
14313
14314 /* Return the innermost template arguments that, when applied to a
14315    template specialization whose innermost template parameters are
14316    TPARMS, and whose specialization arguments are PARMS, yield the
14317    ARGS.
14318
14319    For example, suppose we have:
14320
14321      template <class T, class U> struct S {};
14322      template <class T> struct S<T*, int> {};
14323
14324    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
14325    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
14326    int}.  The resulting vector will be {double}, indicating that `T'
14327    is bound to `double'.  */
14328
14329 static tree
14330 get_class_bindings (tree tparms, tree spec_args, tree args)
14331 {
14332   int i, ntparms = TREE_VEC_LENGTH (tparms);
14333   tree deduced_args;
14334   tree innermost_deduced_args;
14335
14336   innermost_deduced_args = make_tree_vec (ntparms);
14337   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14338     {
14339       deduced_args = copy_node (args);
14340       SET_TMPL_ARGS_LEVEL (deduced_args,
14341                            TMPL_ARGS_DEPTH (deduced_args),
14342                            innermost_deduced_args);
14343     }
14344   else
14345     deduced_args = innermost_deduced_args;
14346
14347   if (unify (tparms, deduced_args,
14348              INNERMOST_TEMPLATE_ARGS (spec_args),
14349              INNERMOST_TEMPLATE_ARGS (args),
14350              UNIFY_ALLOW_NONE))
14351     return NULL_TREE;
14352
14353   for (i =  0; i < ntparms; ++i)
14354     if (! TREE_VEC_ELT (innermost_deduced_args, i))
14355       return NULL_TREE;
14356
14357   /* Verify that nondeduced template arguments agree with the type
14358      obtained from argument deduction.
14359
14360      For example:
14361
14362        struct A { typedef int X; };
14363        template <class T, class U> struct C {};
14364        template <class T> struct C<T, typename T::X> {};
14365
14366      Then with the instantiation `C<A, int>', we can deduce that
14367      `T' is `A' but unify () does not check whether `typename T::X'
14368      is `int'.  */
14369   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
14370   if (spec_args == error_mark_node
14371       /* We only need to check the innermost arguments; the other
14372          arguments will always agree.  */
14373       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
14374                               INNERMOST_TEMPLATE_ARGS (args)))
14375     return NULL_TREE;
14376
14377   /* Now that we have bindings for all of the template arguments,
14378      ensure that the arguments deduced for the template template
14379      parameters have compatible template parameter lists.  See the use
14380      of template_template_parm_bindings_ok_p in fn_type_unification
14381      for more information.  */
14382   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
14383     return NULL_TREE;
14384
14385   return deduced_args;
14386 }
14387
14388 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
14389    Return the TREE_LIST node with the most specialized template, if
14390    any.  If there is no most specialized template, the error_mark_node
14391    is returned.
14392
14393    Note that this function does not look at, or modify, the
14394    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
14395    returned is one of the elements of INSTANTIATIONS, callers may
14396    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
14397    and retrieve it from the value returned.  */
14398
14399 tree
14400 most_specialized_instantiation (tree templates)
14401 {
14402   tree fn, champ;
14403
14404   ++processing_template_decl;
14405
14406   champ = templates;
14407   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
14408     {
14409       int fate = 0;
14410
14411       if (get_bindings (TREE_VALUE (champ),
14412                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14413                         NULL_TREE, /*check_ret=*/false))
14414         fate--;
14415
14416       if (get_bindings (TREE_VALUE (fn),
14417                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14418                         NULL_TREE, /*check_ret=*/false))
14419         fate++;
14420
14421       if (fate == -1)
14422         champ = fn;
14423       else if (!fate)
14424         {
14425           /* Equally specialized, move to next function.  If there
14426              is no next function, nothing's most specialized.  */
14427           fn = TREE_CHAIN (fn);
14428           champ = fn;
14429           if (!fn)
14430             break;
14431         }
14432     }
14433
14434   if (champ)
14435     /* Now verify that champ is better than everything earlier in the
14436        instantiation list.  */
14437     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
14438       if (get_bindings (TREE_VALUE (champ),
14439                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14440                         NULL_TREE, /*check_ret=*/false)
14441           || !get_bindings (TREE_VALUE (fn),
14442                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14443                             NULL_TREE, /*check_ret=*/false))
14444         {
14445           champ = NULL_TREE;
14446           break;
14447         }
14448
14449   processing_template_decl--;
14450
14451   if (!champ)
14452     return error_mark_node;
14453
14454   return champ;
14455 }
14456
14457 /* If DECL is a specialization of some template, return the most
14458    general such template.  Otherwise, returns NULL_TREE.
14459
14460    For example, given:
14461
14462      template <class T> struct S { template <class U> void f(U); };
14463
14464    if TMPL is `template <class U> void S<int>::f(U)' this will return
14465    the full template.  This function will not trace past partial
14466    specializations, however.  For example, given in addition:
14467
14468      template <class T> struct S<T*> { template <class U> void f(U); };
14469
14470    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14471    `template <class T> template <class U> S<T*>::f(U)'.  */
14472
14473 tree
14474 most_general_template (tree decl)
14475 {
14476   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14477      an immediate specialization.  */
14478   if (TREE_CODE (decl) == FUNCTION_DECL)
14479     {
14480       if (DECL_TEMPLATE_INFO (decl)) {
14481         decl = DECL_TI_TEMPLATE (decl);
14482
14483         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14484            template friend.  */
14485         if (TREE_CODE (decl) != TEMPLATE_DECL)
14486           return NULL_TREE;
14487       } else
14488         return NULL_TREE;
14489     }
14490
14491   /* Look for more and more general templates.  */
14492   while (DECL_TEMPLATE_INFO (decl))
14493     {
14494       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14495          (See cp-tree.h for details.)  */
14496       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14497         break;
14498
14499       if (CLASS_TYPE_P (TREE_TYPE (decl))
14500           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14501         break;
14502
14503       /* Stop if we run into an explicitly specialized class template.  */
14504       if (!DECL_NAMESPACE_SCOPE_P (decl)
14505           && DECL_CONTEXT (decl)
14506           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14507         break;
14508
14509       decl = DECL_TI_TEMPLATE (decl);
14510     }
14511
14512   return decl;
14513 }
14514
14515 /* Return the most specialized of the class template partial
14516    specializations of TMPL which can produce TYPE, a specialization of
14517    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14518    a _TYPE node corresponding to the partial specialization, while the
14519    TREE_PURPOSE is the set of template arguments that must be
14520    substituted into the TREE_TYPE in order to generate TYPE.
14521
14522    If the choice of partial specialization is ambiguous, a diagnostic
14523    is issued, and the error_mark_node is returned.  If there are no
14524    partial specializations of TMPL matching TYPE, then NULL_TREE is
14525    returned.  */
14526
14527 static tree
14528 most_specialized_class (tree type, tree tmpl)
14529 {
14530   tree list = NULL_TREE;
14531   tree t;
14532   tree champ;
14533   int fate;
14534   bool ambiguous_p;
14535   tree args;
14536   tree outer_args = NULL_TREE;
14537
14538   tmpl = most_general_template (tmpl);
14539   args = CLASSTYPE_TI_ARGS (type);
14540
14541   /* For determining which partial specialization to use, only the
14542      innermost args are interesting.  */
14543   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14544     {
14545       outer_args = strip_innermost_template_args (args, 1);
14546       args = INNERMOST_TEMPLATE_ARGS (args);
14547     }
14548
14549   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14550     {
14551       tree partial_spec_args;
14552       tree spec_args;
14553       tree parms = TREE_VALUE (t);
14554
14555       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14556       if (outer_args)
14557         {
14558           int i;
14559
14560           ++processing_template_decl;
14561
14562           /* Discard the outer levels of args, and then substitute in the
14563              template args from the enclosing class.  */
14564           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14565           partial_spec_args = tsubst_template_args
14566             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14567
14568           /* PARMS already refers to just the innermost parms, but the
14569              template parms in partial_spec_args had their levels lowered
14570              by tsubst, so we need to do the same for the parm list.  We
14571              can't just tsubst the TREE_VEC itself, as tsubst wants to
14572              treat a TREE_VEC as an argument vector.  */
14573           parms = copy_node (parms);
14574           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14575             TREE_VEC_ELT (parms, i) =
14576               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14577
14578           --processing_template_decl;
14579         }
14580       spec_args = get_class_bindings (parms,
14581                                       partial_spec_args,
14582                                       args);
14583       if (spec_args)
14584         {
14585           if (outer_args)
14586             spec_args = add_to_template_args (outer_args, spec_args);
14587           list = tree_cons (spec_args, TREE_VALUE (t), list);
14588           TREE_TYPE (list) = TREE_TYPE (t);
14589         }
14590     }
14591
14592   if (! list)
14593     return NULL_TREE;
14594
14595   ambiguous_p = false;
14596   t = list;
14597   champ = t;
14598   t = TREE_CHAIN (t);
14599   for (; t; t = TREE_CHAIN (t))
14600     {
14601       fate = more_specialized_class (champ, t);
14602       if (fate == 1)
14603         ;
14604       else
14605         {
14606           if (fate == 0)
14607             {
14608               t = TREE_CHAIN (t);
14609               if (! t)
14610                 {
14611                   ambiguous_p = true;
14612                   break;
14613                 }
14614             }
14615           champ = t;
14616         }
14617     }
14618
14619   if (!ambiguous_p)
14620     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14621       {
14622         fate = more_specialized_class (champ, t);
14623         if (fate != 1)
14624           {
14625             ambiguous_p = true;
14626             break;
14627           }
14628       }
14629
14630   if (ambiguous_p)
14631     {
14632       const char *str = "candidates are:";
14633       error ("ambiguous class template instantiation for %q#T", type);
14634       for (t = list; t; t = TREE_CHAIN (t))
14635         {
14636           error ("%s %+#T", str, TREE_TYPE (t));
14637           str = "               ";
14638         }
14639       return error_mark_node;
14640     }
14641
14642   return champ;
14643 }
14644
14645 /* Explicitly instantiate DECL.  */
14646
14647 void
14648 do_decl_instantiation (tree decl, tree storage)
14649 {
14650   tree result = NULL_TREE;
14651   int extern_p = 0;
14652
14653   if (!decl || decl == error_mark_node)
14654     /* An error occurred, for which grokdeclarator has already issued
14655        an appropriate message.  */
14656     return;
14657   else if (! DECL_LANG_SPECIFIC (decl))
14658     {
14659       error ("explicit instantiation of non-template %q#D", decl);
14660       return;
14661     }
14662   else if (TREE_CODE (decl) == VAR_DECL)
14663     {
14664       /* There is an asymmetry here in the way VAR_DECLs and
14665          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14666          the latter, the DECL we get back will be marked as a
14667          template instantiation, and the appropriate
14668          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14669          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14670          should handle VAR_DECLs as it currently handles
14671          FUNCTION_DECLs.  */
14672       if (!DECL_CLASS_SCOPE_P (decl))
14673         {
14674           error ("%qD is not a static data member of a class template", decl);
14675           return;
14676         }
14677       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14678       if (!result || TREE_CODE (result) != VAR_DECL)
14679         {
14680           error ("no matching template for %qD found", decl);
14681           return;
14682         }
14683       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14684         {
14685           error ("type %qT for explicit instantiation %qD does not match "
14686                  "declared type %qT", TREE_TYPE (result), decl,
14687                  TREE_TYPE (decl));
14688           return;
14689         }
14690     }
14691   else if (TREE_CODE (decl) != FUNCTION_DECL)
14692     {
14693       error ("explicit instantiation of %q#D", decl);
14694       return;
14695     }
14696   else
14697     result = decl;
14698
14699   /* Check for various error cases.  Note that if the explicit
14700      instantiation is valid the RESULT will currently be marked as an
14701      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14702      until we get here.  */
14703
14704   if (DECL_TEMPLATE_SPECIALIZATION (result))
14705     {
14706       /* DR 259 [temp.spec].
14707
14708          Both an explicit instantiation and a declaration of an explicit
14709          specialization shall not appear in a program unless the explicit
14710          instantiation follows a declaration of the explicit specialization.
14711
14712          For a given set of template parameters, if an explicit
14713          instantiation of a template appears after a declaration of an
14714          explicit specialization for that template, the explicit
14715          instantiation has no effect.  */
14716       return;
14717     }
14718   else if (DECL_EXPLICIT_INSTANTIATION (result))
14719     {
14720       /* [temp.spec]
14721
14722          No program shall explicitly instantiate any template more
14723          than once.
14724
14725          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14726          the first instantiation was `extern' and the second is not,
14727          and EXTERN_P for the opposite case.  */
14728       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14729         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
14730       /* If an "extern" explicit instantiation follows an ordinary
14731          explicit instantiation, the template is instantiated.  */
14732       if (extern_p)
14733         return;
14734     }
14735   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14736     {
14737       error ("no matching template for %qD found", result);
14738       return;
14739     }
14740   else if (!DECL_TEMPLATE_INFO (result))
14741     {
14742       permerror (input_location, "explicit instantiation of non-template %q#D", result);
14743       return;
14744     }
14745
14746   if (storage == NULL_TREE)
14747     ;
14748   else if (storage == ridpointers[(int) RID_EXTERN])
14749     {
14750       if (!in_system_header && (cxx_dialect == cxx98))
14751         pedwarn (input_location, OPT_pedantic, 
14752                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
14753                  "instantiations");
14754       extern_p = 1;
14755     }
14756   else
14757     error ("storage class %qD applied to template instantiation", storage);
14758
14759   check_explicit_instantiation_namespace (result);
14760   mark_decl_instantiated (result, extern_p);
14761   if (! extern_p)
14762     instantiate_decl (result, /*defer_ok=*/1,
14763                       /*expl_inst_class_mem_p=*/false);
14764 }
14765
14766 static void
14767 mark_class_instantiated (tree t, int extern_p)
14768 {
14769   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14770   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14771   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14772   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14773   if (! extern_p)
14774     {
14775       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14776       rest_of_type_compilation (t, 1);
14777     }
14778 }
14779
14780 /* Called from do_type_instantiation through binding_table_foreach to
14781    do recursive instantiation for the type bound in ENTRY.  */
14782 static void
14783 bt_instantiate_type_proc (binding_entry entry, void *data)
14784 {
14785   tree storage = *(tree *) data;
14786
14787   if (MAYBE_CLASS_TYPE_P (entry->type)
14788       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14789     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14790 }
14791
14792 /* Called from do_type_instantiation to instantiate a member
14793    (a member function or a static member variable) of an
14794    explicitly instantiated class template.  */
14795 static void
14796 instantiate_class_member (tree decl, int extern_p)
14797 {
14798   mark_decl_instantiated (decl, extern_p);
14799   if (! extern_p)
14800     instantiate_decl (decl, /*defer_ok=*/1,
14801                       /*expl_inst_class_mem_p=*/true);
14802 }
14803
14804 /* Perform an explicit instantiation of template class T.  STORAGE, if
14805    non-null, is the RID for extern, inline or static.  COMPLAIN is
14806    nonzero if this is called from the parser, zero if called recursively,
14807    since the standard is unclear (as detailed below).  */
14808
14809 void
14810 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14811 {
14812   int extern_p = 0;
14813   int nomem_p = 0;
14814   int static_p = 0;
14815   int previous_instantiation_extern_p = 0;
14816
14817   if (TREE_CODE (t) == TYPE_DECL)
14818     t = TREE_TYPE (t);
14819
14820   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14821     {
14822       error ("explicit instantiation of non-template type %qT", t);
14823       return;
14824     }
14825
14826   complete_type (t);
14827
14828   if (!COMPLETE_TYPE_P (t))
14829     {
14830       if (complain & tf_error)
14831         error ("explicit instantiation of %q#T before definition of template",
14832                t);
14833       return;
14834     }
14835
14836   if (storage != NULL_TREE)
14837     {
14838       if (!in_system_header)
14839         {
14840           if (storage == ridpointers[(int) RID_EXTERN])
14841             {
14842               if (cxx_dialect == cxx98)
14843                 pedwarn (input_location, OPT_pedantic, 
14844                          "ISO C++ 1998 forbids the use of %<extern%> on "
14845                          "explicit instantiations");
14846             }
14847           else
14848             pedwarn (input_location, OPT_pedantic, 
14849                      "ISO C++ forbids the use of %qE"
14850                      " on explicit instantiations", storage);
14851         }
14852
14853       if (storage == ridpointers[(int) RID_INLINE])
14854         nomem_p = 1;
14855       else if (storage == ridpointers[(int) RID_EXTERN])
14856         extern_p = 1;
14857       else if (storage == ridpointers[(int) RID_STATIC])
14858         static_p = 1;
14859       else
14860         {
14861           error ("storage class %qD applied to template instantiation",
14862                  storage);
14863           extern_p = 0;
14864         }
14865     }
14866
14867   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14868     {
14869       /* DR 259 [temp.spec].
14870
14871          Both an explicit instantiation and a declaration of an explicit
14872          specialization shall not appear in a program unless the explicit
14873          instantiation follows a declaration of the explicit specialization.
14874
14875          For a given set of template parameters, if an explicit
14876          instantiation of a template appears after a declaration of an
14877          explicit specialization for that template, the explicit
14878          instantiation has no effect.  */
14879       return;
14880     }
14881   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14882     {
14883       /* [temp.spec]
14884
14885          No program shall explicitly instantiate any template more
14886          than once.
14887
14888          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14889          instantiation was `extern'.  If EXTERN_P then the second is.
14890          These cases are OK.  */
14891       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14892
14893       if (!previous_instantiation_extern_p && !extern_p
14894           && (complain & tf_error))
14895         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
14896
14897       /* If we've already instantiated the template, just return now.  */
14898       if (!CLASSTYPE_INTERFACE_ONLY (t))
14899         return;
14900     }
14901
14902   check_explicit_instantiation_namespace (TYPE_NAME (t));
14903   mark_class_instantiated (t, extern_p);
14904
14905   if (nomem_p)
14906     return;
14907
14908   {
14909     tree tmp;
14910
14911     /* In contrast to implicit instantiation, where only the
14912        declarations, and not the definitions, of members are
14913        instantiated, we have here:
14914
14915          [temp.explicit]
14916
14917          The explicit instantiation of a class template specialization
14918          implies the instantiation of all of its members not
14919          previously explicitly specialized in the translation unit
14920          containing the explicit instantiation.
14921
14922        Of course, we can't instantiate member template classes, since
14923        we don't have any arguments for them.  Note that the standard
14924        is unclear on whether the instantiation of the members are
14925        *explicit* instantiations or not.  However, the most natural
14926        interpretation is that it should be an explicit instantiation.  */
14927
14928     if (! static_p)
14929       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14930         if (TREE_CODE (tmp) == FUNCTION_DECL
14931             && DECL_TEMPLATE_INSTANTIATION (tmp))
14932           instantiate_class_member (tmp, extern_p);
14933
14934     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14935       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14936         instantiate_class_member (tmp, extern_p);
14937
14938     if (CLASSTYPE_NESTED_UTDS (t))
14939       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14940                              bt_instantiate_type_proc, &storage);
14941   }
14942 }
14943
14944 /* Given a function DECL, which is a specialization of TMPL, modify
14945    DECL to be a re-instantiation of TMPL with the same template
14946    arguments.  TMPL should be the template into which tsubst'ing
14947    should occur for DECL, not the most general template.
14948
14949    One reason for doing this is a scenario like this:
14950
14951      template <class T>
14952      void f(const T&, int i);
14953
14954      void g() { f(3, 7); }
14955
14956      template <class T>
14957      void f(const T& t, const int i) { }
14958
14959    Note that when the template is first instantiated, with
14960    instantiate_template, the resulting DECL will have no name for the
14961    first parameter, and the wrong type for the second.  So, when we go
14962    to instantiate the DECL, we regenerate it.  */
14963
14964 static void
14965 regenerate_decl_from_template (tree decl, tree tmpl)
14966 {
14967   /* The arguments used to instantiate DECL, from the most general
14968      template.  */
14969   tree args;
14970   tree code_pattern;
14971
14972   args = DECL_TI_ARGS (decl);
14973   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14974
14975   /* Make sure that we can see identifiers, and compute access
14976      correctly.  */
14977   push_access_scope (decl);
14978
14979   if (TREE_CODE (decl) == FUNCTION_DECL)
14980     {
14981       tree decl_parm;
14982       tree pattern_parm;
14983       tree specs;
14984       int args_depth;
14985       int parms_depth;
14986
14987       args_depth = TMPL_ARGS_DEPTH (args);
14988       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14989       if (args_depth > parms_depth)
14990         args = get_innermost_template_args (args, parms_depth);
14991
14992       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14993                                               args, tf_error, NULL_TREE);
14994       if (specs)
14995         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14996                                                     specs);
14997
14998       /* Merge parameter declarations.  */
14999       decl_parm = skip_artificial_parms_for (decl,
15000                                              DECL_ARGUMENTS (decl));
15001       pattern_parm
15002         = skip_artificial_parms_for (code_pattern,
15003                                      DECL_ARGUMENTS (code_pattern));
15004       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
15005         {
15006           tree parm_type;
15007           tree attributes;
15008           
15009           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
15010             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
15011           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
15012                               NULL_TREE);
15013           parm_type = type_decays_to (parm_type);
15014           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
15015             TREE_TYPE (decl_parm) = parm_type;
15016           attributes = DECL_ATTRIBUTES (pattern_parm);
15017           if (DECL_ATTRIBUTES (decl_parm) != attributes)
15018             {
15019               DECL_ATTRIBUTES (decl_parm) = attributes;
15020               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
15021             }
15022           decl_parm = TREE_CHAIN (decl_parm);
15023           pattern_parm = TREE_CHAIN (pattern_parm);
15024         }
15025       /* Merge any parameters that match with the function parameter
15026          pack.  */
15027       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
15028         {
15029           int i, len;
15030           tree expanded_types;
15031           /* Expand the TYPE_PACK_EXPANSION that provides the types for
15032              the parameters in this function parameter pack.  */
15033           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
15034                                                  args, tf_error, NULL_TREE);
15035           len = TREE_VEC_LENGTH (expanded_types);
15036           for (i = 0; i < len; i++)
15037             {
15038               tree parm_type;
15039               tree attributes;
15040           
15041               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
15042                 /* Rename the parameter to include the index.  */
15043                 DECL_NAME (decl_parm) = 
15044                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
15045               parm_type = TREE_VEC_ELT (expanded_types, i);
15046               parm_type = type_decays_to (parm_type);
15047               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
15048                 TREE_TYPE (decl_parm) = parm_type;
15049               attributes = DECL_ATTRIBUTES (pattern_parm);
15050               if (DECL_ATTRIBUTES (decl_parm) != attributes)
15051                 {
15052                   DECL_ATTRIBUTES (decl_parm) = attributes;
15053                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
15054                 }
15055               decl_parm = TREE_CHAIN (decl_parm);
15056             }
15057         }
15058       /* Merge additional specifiers from the CODE_PATTERN.  */
15059       if (DECL_DECLARED_INLINE_P (code_pattern)
15060           && !DECL_DECLARED_INLINE_P (decl))
15061         DECL_DECLARED_INLINE_P (decl) = 1;
15062     }
15063   else if (TREE_CODE (decl) == VAR_DECL)
15064     DECL_INITIAL (decl) =
15065       tsubst_expr (DECL_INITIAL (code_pattern), args,
15066                    tf_error, DECL_TI_TEMPLATE (decl),
15067                    /*integral_constant_expression_p=*/false);
15068   else
15069     gcc_unreachable ();
15070
15071   pop_access_scope (decl);
15072 }
15073
15074 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
15075    substituted to get DECL.  */
15076
15077 tree
15078 template_for_substitution (tree decl)
15079 {
15080   tree tmpl = DECL_TI_TEMPLATE (decl);
15081
15082   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
15083      for the instantiation.  This is not always the most general
15084      template.  Consider, for example:
15085
15086         template <class T>
15087         struct S { template <class U> void f();
15088                    template <> void f<int>(); };
15089
15090      and an instantiation of S<double>::f<int>.  We want TD to be the
15091      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
15092   while (/* An instantiation cannot have a definition, so we need a
15093             more general template.  */
15094          DECL_TEMPLATE_INSTANTIATION (tmpl)
15095            /* We must also deal with friend templates.  Given:
15096
15097                 template <class T> struct S {
15098                   template <class U> friend void f() {};
15099                 };
15100
15101               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
15102               so far as the language is concerned, but that's still
15103               where we get the pattern for the instantiation from.  On
15104               other hand, if the definition comes outside the class, say:
15105
15106                 template <class T> struct S {
15107                   template <class U> friend void f();
15108                 };
15109                 template <class U> friend void f() {}
15110
15111               we don't need to look any further.  That's what the check for
15112               DECL_INITIAL is for.  */
15113           || (TREE_CODE (decl) == FUNCTION_DECL
15114               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
15115               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
15116     {
15117       /* The present template, TD, should not be a definition.  If it
15118          were a definition, we should be using it!  Note that we
15119          cannot restructure the loop to just keep going until we find
15120          a template with a definition, since that might go too far if
15121          a specialization was declared, but not defined.  */
15122       gcc_assert (TREE_CODE (decl) != VAR_DECL
15123                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
15124
15125       /* Fetch the more general template.  */
15126       tmpl = DECL_TI_TEMPLATE (tmpl);
15127     }
15128
15129   return tmpl;
15130 }
15131
15132 /* Produce the definition of D, a _DECL generated from a template.  If
15133    DEFER_OK is nonzero, then we don't have to actually do the
15134    instantiation now; we just have to do it sometime.  Normally it is
15135    an error if this is an explicit instantiation but D is undefined.
15136    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
15137    explicitly instantiated class template.  */
15138
15139 tree
15140 instantiate_decl (tree d, int defer_ok,
15141                   bool expl_inst_class_mem_p)
15142 {
15143   tree tmpl = DECL_TI_TEMPLATE (d);
15144   tree gen_args;
15145   tree args;
15146   tree td;
15147   tree code_pattern;
15148   tree spec;
15149   tree gen_tmpl;
15150   bool pattern_defined;
15151   int need_push;
15152   location_t saved_loc = input_location;
15153   bool external_p;
15154
15155   /* This function should only be used to instantiate templates for
15156      functions and static member variables.  */
15157   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
15158               || TREE_CODE (d) == VAR_DECL);
15159
15160   /* Variables are never deferred; if instantiation is required, they
15161      are instantiated right away.  That allows for better code in the
15162      case that an expression refers to the value of the variable --
15163      if the variable has a constant value the referring expression can
15164      take advantage of that fact.  */
15165   if (TREE_CODE (d) == VAR_DECL)
15166     defer_ok = 0;
15167
15168   /* Don't instantiate cloned functions.  Instead, instantiate the
15169      functions they cloned.  */
15170   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
15171     d = DECL_CLONED_FUNCTION (d);
15172
15173   if (DECL_TEMPLATE_INSTANTIATED (d))
15174     /* D has already been instantiated.  It might seem reasonable to
15175        check whether or not D is an explicit instantiation, and, if so,
15176        stop here.  But when an explicit instantiation is deferred
15177        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
15178        is set, even though we still need to do the instantiation.  */
15179     return d;
15180
15181   /* If we already have a specialization of this declaration, then
15182      there's no reason to instantiate it.  Note that
15183      retrieve_specialization gives us both instantiations and
15184      specializations, so we must explicitly check
15185      DECL_TEMPLATE_SPECIALIZATION.  */
15186   gen_tmpl = most_general_template (tmpl);
15187   gen_args = DECL_TI_ARGS (d);
15188   spec = retrieve_specialization (gen_tmpl, gen_args,
15189                                   /*class_specializations_p=*/false);
15190   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
15191     return spec;
15192
15193   /* This needs to happen before any tsubsting.  */
15194   if (! push_tinst_level (d))
15195     return d;
15196
15197   timevar_push (TV_PARSE);
15198
15199   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
15200      for the instantiation.  */
15201   td = template_for_substitution (d);
15202   code_pattern = DECL_TEMPLATE_RESULT (td);
15203
15204   /* We should never be trying to instantiate a member of a class
15205      template or partial specialization.  */
15206   gcc_assert (d != code_pattern);
15207
15208   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
15209       || DECL_TEMPLATE_SPECIALIZATION (td))
15210     /* In the case of a friend template whose definition is provided
15211        outside the class, we may have too many arguments.  Drop the
15212        ones we don't need.  The same is true for specializations.  */
15213     args = get_innermost_template_args
15214       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
15215   else
15216     args = gen_args;
15217
15218   if (TREE_CODE (d) == FUNCTION_DECL)
15219     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
15220   else
15221     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
15222
15223   /* We may be in the middle of deferred access check.  Disable it now.  */
15224   push_deferring_access_checks (dk_no_deferred);
15225
15226   /* Unless an explicit instantiation directive has already determined
15227      the linkage of D, remember that a definition is available for
15228      this entity.  */
15229   if (pattern_defined
15230       && !DECL_INTERFACE_KNOWN (d)
15231       && !DECL_NOT_REALLY_EXTERN (d))
15232     mark_definable (d);
15233
15234   input_location = DECL_SOURCE_LOCATION (d);
15235
15236   /* If D is a member of an explicitly instantiated class template,
15237      and no definition is available, treat it like an implicit
15238      instantiation.  */
15239   if (!pattern_defined && expl_inst_class_mem_p
15240       && DECL_EXPLICIT_INSTANTIATION (d))
15241     {
15242       DECL_NOT_REALLY_EXTERN (d) = 0;
15243       DECL_INTERFACE_KNOWN (d) = 0;
15244       SET_DECL_IMPLICIT_INSTANTIATION (d);
15245     }
15246
15247   if (!defer_ok)
15248     {
15249       /* Recheck the substitutions to obtain any warning messages
15250          about ignoring cv qualifiers.  */
15251       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
15252       tree type = TREE_TYPE (gen);
15253
15254       /* Make sure that we can see identifiers, and compute access
15255          correctly.  D is already the target FUNCTION_DECL with the
15256          right context.  */
15257       push_access_scope (d);
15258
15259       if (TREE_CODE (gen) == FUNCTION_DECL)
15260         {
15261           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
15262           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
15263                                           d);
15264           /* Don't simply tsubst the function type, as that will give
15265              duplicate warnings about poor parameter qualifications.
15266              The function arguments are the same as the decl_arguments
15267              without the top level cv qualifiers.  */
15268           type = TREE_TYPE (type);
15269         }
15270       tsubst (type, gen_args, tf_warning_or_error, d);
15271
15272       pop_access_scope (d);
15273     }
15274
15275   /* Check to see whether we know that this template will be
15276      instantiated in some other file, as with "extern template"
15277      extension.  */
15278   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
15279   /* In general, we do not instantiate such templates...  */
15280   if (external_p
15281       /* ... but we instantiate inline functions so that we can inline
15282          them and ... */
15283       && ! (TREE_CODE (d) == FUNCTION_DECL
15284             && possibly_inlined_p (d))
15285       /* ... we instantiate static data members whose values are
15286          needed in integral constant expressions.  */
15287       && ! (TREE_CODE (d) == VAR_DECL
15288             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
15289     goto out;
15290   /* Defer all other templates, unless we have been explicitly
15291      forbidden from doing so.  */
15292   if (/* If there is no definition, we cannot instantiate the
15293          template.  */
15294       ! pattern_defined
15295       /* If it's OK to postpone instantiation, do so.  */
15296       || defer_ok
15297       /* If this is a static data member that will be defined
15298          elsewhere, we don't want to instantiate the entire data
15299          member, but we do want to instantiate the initializer so that
15300          we can substitute that elsewhere.  */
15301       || (external_p && TREE_CODE (d) == VAR_DECL))
15302     {
15303       /* The definition of the static data member is now required so
15304          we must substitute the initializer.  */
15305       if (TREE_CODE (d) == VAR_DECL
15306           && !DECL_INITIAL (d)
15307           && DECL_INITIAL (code_pattern))
15308         {
15309           tree ns;
15310           tree init;
15311
15312           ns = decl_namespace_context (d);
15313           push_nested_namespace (ns);
15314           push_nested_class (DECL_CONTEXT (d));
15315           init = tsubst_expr (DECL_INITIAL (code_pattern),
15316                               args,
15317                               tf_warning_or_error, NULL_TREE,
15318                               /*integral_constant_expression_p=*/false);
15319           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
15320                           /*asmspec_tree=*/NULL_TREE,
15321                           LOOKUP_ONLYCONVERTING);
15322           pop_nested_class ();
15323           pop_nested_namespace (ns);
15324         }
15325
15326       /* We restore the source position here because it's used by
15327          add_pending_template.  */
15328       input_location = saved_loc;
15329
15330       if (at_eof && !pattern_defined
15331           && DECL_EXPLICIT_INSTANTIATION (d)
15332           && DECL_NOT_REALLY_EXTERN (d))
15333         /* [temp.explicit]
15334
15335            The definition of a non-exported function template, a
15336            non-exported member function template, or a non-exported
15337            member function or static data member of a class template
15338            shall be present in every translation unit in which it is
15339            explicitly instantiated.  */
15340         permerror (input_location,  "explicit instantiation of %qD "
15341                    "but no definition available", d);
15342
15343       /* ??? Historically, we have instantiated inline functions, even
15344          when marked as "extern template".  */
15345       if (!(external_p && TREE_CODE (d) == VAR_DECL))
15346         add_pending_template (d);
15347       goto out;
15348     }
15349   /* Tell the repository that D is available in this translation unit
15350      -- and see if it is supposed to be instantiated here.  */
15351   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
15352     {
15353       /* In a PCH file, despite the fact that the repository hasn't
15354          requested instantiation in the PCH it is still possible that
15355          an instantiation will be required in a file that includes the
15356          PCH.  */
15357       if (pch_file)
15358         add_pending_template (d);
15359       /* Instantiate inline functions so that the inliner can do its
15360          job, even though we'll not be emitting a copy of this
15361          function.  */
15362       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
15363         goto out;
15364     }
15365
15366   need_push = !cfun || !global_bindings_p ();
15367   if (need_push)
15368     push_to_top_level ();
15369
15370   /* Mark D as instantiated so that recursive calls to
15371      instantiate_decl do not try to instantiate it again.  */
15372   DECL_TEMPLATE_INSTANTIATED (d) = 1;
15373
15374   /* Regenerate the declaration in case the template has been modified
15375      by a subsequent redeclaration.  */
15376   regenerate_decl_from_template (d, td);
15377
15378   /* We already set the file and line above.  Reset them now in case
15379      they changed as a result of calling regenerate_decl_from_template.  */
15380   input_location = DECL_SOURCE_LOCATION (d);
15381
15382   if (TREE_CODE (d) == VAR_DECL)
15383     {
15384       tree init;
15385
15386       /* Clear out DECL_RTL; whatever was there before may not be right
15387          since we've reset the type of the declaration.  */
15388       SET_DECL_RTL (d, NULL_RTX);
15389       DECL_IN_AGGR_P (d) = 0;
15390
15391       /* The initializer is placed in DECL_INITIAL by
15392          regenerate_decl_from_template.  Pull it out so that
15393          finish_decl can process it.  */
15394       init = DECL_INITIAL (d);
15395       DECL_INITIAL (d) = NULL_TREE;
15396       DECL_INITIALIZED_P (d) = 0;
15397
15398       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
15399          initializer.  That function will defer actual emission until
15400          we have a chance to determine linkage.  */
15401       DECL_EXTERNAL (d) = 0;
15402
15403       /* Enter the scope of D so that access-checking works correctly.  */
15404       push_nested_class (DECL_CONTEXT (d));
15405       finish_decl (d, init, NULL_TREE);
15406       pop_nested_class ();
15407     }
15408   else if (TREE_CODE (d) == FUNCTION_DECL)
15409     {
15410       htab_t saved_local_specializations;
15411       tree subst_decl;
15412       tree tmpl_parm;
15413       tree spec_parm;
15414
15415       /* Save away the current list, in case we are instantiating one
15416          template from within the body of another.  */
15417       saved_local_specializations = local_specializations;
15418
15419       /* Set up the list of local specializations.  */
15420       local_specializations = htab_create (37,
15421                                            hash_local_specialization,
15422                                            eq_local_specializations,
15423                                            NULL);
15424
15425       /* Set up context.  */
15426       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
15427
15428       /* Create substitution entries for the parameters.  */
15429       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
15430       tmpl_parm = DECL_ARGUMENTS (subst_decl);
15431       spec_parm = DECL_ARGUMENTS (d);
15432       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
15433         {
15434           register_local_specialization (spec_parm, tmpl_parm);
15435           spec_parm = skip_artificial_parms_for (d, spec_parm);
15436           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
15437         }
15438       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15439         {
15440           register_local_specialization (spec_parm, tmpl_parm);
15441           tmpl_parm = TREE_CHAIN (tmpl_parm);
15442           spec_parm = TREE_CHAIN (spec_parm);
15443         }
15444       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15445         {
15446           /* Collect all of the extra "packed" parameters into an
15447              argument pack.  */
15448           tree parmvec;
15449           tree parmtypevec;
15450           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
15451           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
15452           int i, len = 0;
15453           tree t;
15454           
15455           /* Count how many parameters remain.  */
15456           for (t = spec_parm; t; t = TREE_CHAIN (t))
15457             len++;
15458
15459           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
15460           parmvec = make_tree_vec (len);
15461           parmtypevec = make_tree_vec (len);
15462           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15463             {
15464               TREE_VEC_ELT (parmvec, i) = spec_parm;
15465               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15466             }
15467
15468           /* Build the argument packs.  */
15469           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15470           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15471           TREE_TYPE (argpack) = argtypepack;
15472           
15473           /* Register the (value) argument pack as a specialization of
15474              TMPL_PARM, then move on.  */
15475           register_local_specialization (argpack, tmpl_parm);
15476           tmpl_parm = TREE_CHAIN (tmpl_parm);
15477         }
15478       gcc_assert (!spec_parm);
15479
15480       /* Substitute into the body of the function.  */
15481       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15482                    tf_warning_or_error, tmpl,
15483                    /*integral_constant_expression_p=*/false);
15484
15485       /* Set the current input_location to the end of the function
15486          so that finish_function knows where we are.  */
15487       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15488
15489       /* We don't need the local specializations any more.  */
15490       htab_delete (local_specializations);
15491       local_specializations = saved_local_specializations;
15492
15493       /* Finish the function.  */
15494       d = finish_function (0);
15495       expand_or_defer_fn (d);
15496     }
15497
15498   /* We're not deferring instantiation any more.  */
15499   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15500
15501   if (need_push)
15502     pop_from_top_level ();
15503
15504 out:
15505   input_location = saved_loc;
15506   pop_deferring_access_checks ();
15507   pop_tinst_level ();
15508
15509   timevar_pop (TV_PARSE);
15510
15511   return d;
15512 }
15513
15514 /* Run through the list of templates that we wish we could
15515    instantiate, and instantiate any we can.  RETRIES is the
15516    number of times we retry pending template instantiation.  */
15517
15518 void
15519 instantiate_pending_templates (int retries)
15520 {
15521   int reconsider;
15522   location_t saved_loc = input_location;
15523
15524   /* Instantiating templates may trigger vtable generation.  This in turn
15525      may require further template instantiations.  We place a limit here
15526      to avoid infinite loop.  */
15527   if (pending_templates && retries >= max_tinst_depth)
15528     {
15529       tree decl = pending_templates->tinst->decl;
15530
15531       error ("template instantiation depth exceeds maximum of %d"
15532              " instantiating %q+D, possibly from virtual table generation"
15533              " (use -ftemplate-depth-NN to increase the maximum)",
15534              max_tinst_depth, decl);
15535       if (TREE_CODE (decl) == FUNCTION_DECL)
15536         /* Pretend that we defined it.  */
15537         DECL_INITIAL (decl) = error_mark_node;
15538       return;
15539     }
15540
15541   do
15542     {
15543       struct pending_template **t = &pending_templates;
15544       struct pending_template *last = NULL;
15545       reconsider = 0;
15546       while (*t)
15547         {
15548           tree instantiation = reopen_tinst_level ((*t)->tinst);
15549           bool complete = false;
15550
15551           if (TYPE_P (instantiation))
15552             {
15553               tree fn;
15554
15555               if (!COMPLETE_TYPE_P (instantiation))
15556                 {
15557                   instantiate_class_template (instantiation);
15558                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15559                     for (fn = TYPE_METHODS (instantiation);
15560                          fn;
15561                          fn = TREE_CHAIN (fn))
15562                       if (! DECL_ARTIFICIAL (fn))
15563                         instantiate_decl (fn,
15564                                           /*defer_ok=*/0,
15565                                           /*expl_inst_class_mem_p=*/false);
15566                   if (COMPLETE_TYPE_P (instantiation))
15567                     reconsider = 1;
15568                 }
15569
15570               complete = COMPLETE_TYPE_P (instantiation);
15571             }
15572           else
15573             {
15574               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15575                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15576                 {
15577                   instantiation
15578                     = instantiate_decl (instantiation,
15579                                         /*defer_ok=*/0,
15580                                         /*expl_inst_class_mem_p=*/false);
15581                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15582                     reconsider = 1;
15583                 }
15584
15585               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15586                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15587             }
15588
15589           if (complete)
15590             /* If INSTANTIATION has been instantiated, then we don't
15591                need to consider it again in the future.  */
15592             *t = (*t)->next;
15593           else
15594             {
15595               last = *t;
15596               t = &(*t)->next;
15597             }
15598           tinst_depth = 0;
15599           current_tinst_level = NULL;
15600         }
15601       last_pending_template = last;
15602     }
15603   while (reconsider);
15604
15605   input_location = saved_loc;
15606 }
15607
15608 /* Substitute ARGVEC into T, which is a list of initializers for
15609    either base class or a non-static data member.  The TREE_PURPOSEs
15610    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15611    instantiate_decl.  */
15612
15613 static tree
15614 tsubst_initializer_list (tree t, tree argvec)
15615 {
15616   tree inits = NULL_TREE;
15617
15618   for (; t; t = TREE_CHAIN (t))
15619     {
15620       tree decl;
15621       tree init;
15622       tree expanded_bases = NULL_TREE;
15623       tree expanded_arguments = NULL_TREE;
15624       int i, len = 1;
15625
15626       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15627         {
15628           tree expr;
15629           tree arg;
15630
15631           /* Expand the base class expansion type into separate base
15632              classes.  */
15633           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15634                                                  tf_warning_or_error,
15635                                                  NULL_TREE);
15636           if (expanded_bases == error_mark_node)
15637             continue;
15638           
15639           /* We'll be building separate TREE_LISTs of arguments for
15640              each base.  */
15641           len = TREE_VEC_LENGTH (expanded_bases);
15642           expanded_arguments = make_tree_vec (len);
15643           for (i = 0; i < len; i++)
15644             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15645
15646           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15647              expand each argument in the TREE_VALUE of t.  */
15648           expr = make_node (EXPR_PACK_EXPANSION);
15649           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15650             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15651
15652           if (TREE_VALUE (t) == void_type_node)
15653             /* VOID_TYPE_NODE is used to indicate
15654                value-initialization.  */
15655             {
15656               for (i = 0; i < len; i++)
15657                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
15658             }
15659           else
15660             {
15661               /* Substitute parameter packs into each argument in the
15662                  TREE_LIST.  */
15663               in_base_initializer = 1;
15664               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15665                 {
15666                   tree expanded_exprs;
15667
15668                   /* Expand the argument.  */
15669                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15670                   expanded_exprs 
15671                     = tsubst_pack_expansion (expr, argvec,
15672                                              tf_warning_or_error,
15673                                              NULL_TREE);
15674                   if (expanded_exprs == error_mark_node)
15675                     continue;
15676
15677                   /* Prepend each of the expanded expressions to the
15678                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15679                   for (i = 0; i < len; i++)
15680                     {
15681                       TREE_VEC_ELT (expanded_arguments, i) = 
15682                         tree_cons (NULL_TREE, 
15683                                    TREE_VEC_ELT (expanded_exprs, i),
15684                                    TREE_VEC_ELT (expanded_arguments, i));
15685                     }
15686                 }
15687               in_base_initializer = 0;
15688
15689               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15690                  since we built them backwards.  */
15691               for (i = 0; i < len; i++)
15692                 {
15693                   TREE_VEC_ELT (expanded_arguments, i) = 
15694                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
15695                 }
15696             }
15697         }
15698
15699       for (i = 0; i < len; ++i)
15700         {
15701           if (expanded_bases)
15702             {
15703               decl = TREE_VEC_ELT (expanded_bases, i);
15704               decl = expand_member_init (decl);
15705               init = TREE_VEC_ELT (expanded_arguments, i);
15706             }
15707           else
15708             {
15709               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15710                                   tf_warning_or_error, NULL_TREE);
15711
15712               decl = expand_member_init (decl);
15713               if (decl && !DECL_P (decl))
15714                 in_base_initializer = 1;
15715
15716               init = tsubst_expr (TREE_VALUE (t), argvec, 
15717                                   tf_warning_or_error, NULL_TREE,
15718                                   /*integral_constant_expression_p=*/false);
15719               in_base_initializer = 0;
15720             }
15721
15722           if (decl)
15723             {
15724               init = build_tree_list (decl, init);
15725               TREE_CHAIN (init) = inits;
15726               inits = init;
15727             }
15728         }
15729     }
15730   return inits;
15731 }
15732
15733 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15734
15735 static void
15736 set_current_access_from_decl (tree decl)
15737 {
15738   if (TREE_PRIVATE (decl))
15739     current_access_specifier = access_private_node;
15740   else if (TREE_PROTECTED (decl))
15741     current_access_specifier = access_protected_node;
15742   else
15743     current_access_specifier = access_public_node;
15744 }
15745
15746 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15747    is the instantiation (which should have been created with
15748    start_enum) and ARGS are the template arguments to use.  */
15749
15750 static void
15751 tsubst_enum (tree tag, tree newtag, tree args)
15752 {
15753   tree e;
15754
15755   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15756     {
15757       tree value;
15758       tree decl;
15759
15760       decl = TREE_VALUE (e);
15761       /* Note that in a template enum, the TREE_VALUE is the
15762          CONST_DECL, not the corresponding INTEGER_CST.  */
15763       value = tsubst_expr (DECL_INITIAL (decl),
15764                            args, tf_warning_or_error, NULL_TREE,
15765                            /*integral_constant_expression_p=*/true);
15766
15767       /* Give this enumeration constant the correct access.  */
15768       set_current_access_from_decl (decl);
15769
15770       /* Actually build the enumerator itself.  */
15771       build_enumerator (DECL_NAME (decl), value, newtag);
15772     }
15773
15774   finish_enum (newtag);
15775   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15776     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15777 }
15778
15779 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15780    its type -- but without substituting the innermost set of template
15781    arguments.  So, innermost set of template parameters will appear in
15782    the type.  */
15783
15784 tree
15785 get_mostly_instantiated_function_type (tree decl)
15786 {
15787   tree fn_type;
15788   tree tmpl;
15789   tree targs;
15790   tree tparms;
15791   int parm_depth;
15792
15793   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15794   targs = DECL_TI_ARGS (decl);
15795   tparms = DECL_TEMPLATE_PARMS (tmpl);
15796   parm_depth = TMPL_PARMS_DEPTH (tparms);
15797
15798   /* There should be as many levels of arguments as there are levels
15799      of parameters.  */
15800   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15801
15802   fn_type = TREE_TYPE (tmpl);
15803
15804   if (parm_depth == 1)
15805     /* No substitution is necessary.  */
15806     ;
15807   else
15808     {
15809       int i, save_access_control;
15810       tree partial_args;
15811
15812       /* Replace the innermost level of the TARGS with NULL_TREEs to
15813          let tsubst know not to substitute for those parameters.  */
15814       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15815       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15816         SET_TMPL_ARGS_LEVEL (partial_args, i,
15817                              TMPL_ARGS_LEVEL (targs, i));
15818       SET_TMPL_ARGS_LEVEL (partial_args,
15819                            TMPL_ARGS_DEPTH (targs),
15820                            make_tree_vec (DECL_NTPARMS (tmpl)));
15821
15822       /* Disable access control as this function is used only during
15823          name-mangling.  */
15824       save_access_control = flag_access_control;
15825       flag_access_control = 0;
15826
15827       ++processing_template_decl;
15828       /* Now, do the (partial) substitution to figure out the
15829          appropriate function type.  */
15830       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15831       --processing_template_decl;
15832
15833       /* Substitute into the template parameters to obtain the real
15834          innermost set of parameters.  This step is important if the
15835          innermost set of template parameters contains value
15836          parameters whose types depend on outer template parameters.  */
15837       TREE_VEC_LENGTH (partial_args)--;
15838       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15839
15840       flag_access_control = save_access_control;
15841     }
15842
15843   return fn_type;
15844 }
15845
15846 /* Return truthvalue if we're processing a template different from
15847    the last one involved in diagnostics.  */
15848 int
15849 problematic_instantiation_changed (void)
15850 {
15851   return last_template_error_tick != tinst_level_tick;
15852 }
15853
15854 /* Remember current template involved in diagnostics.  */
15855 void
15856 record_last_problematic_instantiation (void)
15857 {
15858   last_template_error_tick = tinst_level_tick;
15859 }
15860
15861 struct tinst_level *
15862 current_instantiation (void)
15863 {
15864   return current_tinst_level;
15865 }
15866
15867 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15868    type. Return zero for ok, nonzero for disallowed. Issue error and
15869    warning messages under control of COMPLAIN.  */
15870
15871 static int
15872 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15873 {
15874   if (INTEGRAL_TYPE_P (type))
15875     return 0;
15876   else if (POINTER_TYPE_P (type))
15877     return 0;
15878   else if (TYPE_PTR_TO_MEMBER_P (type))
15879     return 0;
15880   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15881     return 0;
15882   else if (TREE_CODE (type) == TYPENAME_TYPE)
15883     return 0;
15884
15885   if (complain & tf_error)
15886     error ("%q#T is not a valid type for a template constant parameter", type);
15887   return 1;
15888 }
15889
15890 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15891    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15892
15893 static bool
15894 dependent_type_p_r (tree type)
15895 {
15896   tree scope;
15897
15898   /* [temp.dep.type]
15899
15900      A type is dependent if it is:
15901
15902      -- a template parameter. Template template parameters are types
15903         for us (since TYPE_P holds true for them) so we handle
15904         them here.  */
15905   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15906       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15907     return true;
15908   /* -- a qualified-id with a nested-name-specifier which contains a
15909         class-name that names a dependent type or whose unqualified-id
15910         names a dependent type.  */
15911   if (TREE_CODE (type) == TYPENAME_TYPE)
15912     return true;
15913   /* -- a cv-qualified type where the cv-unqualified type is
15914         dependent.  */
15915   type = TYPE_MAIN_VARIANT (type);
15916   /* -- a compound type constructed from any dependent type.  */
15917   if (TYPE_PTR_TO_MEMBER_P (type))
15918     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15919             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15920                                            (type)));
15921   else if (TREE_CODE (type) == POINTER_TYPE
15922            || TREE_CODE (type) == REFERENCE_TYPE)
15923     return dependent_type_p (TREE_TYPE (type));
15924   else if (TREE_CODE (type) == FUNCTION_TYPE
15925            || TREE_CODE (type) == METHOD_TYPE)
15926     {
15927       tree arg_type;
15928
15929       if (dependent_type_p (TREE_TYPE (type)))
15930         return true;
15931       for (arg_type = TYPE_ARG_TYPES (type);
15932            arg_type;
15933            arg_type = TREE_CHAIN (arg_type))
15934         if (dependent_type_p (TREE_VALUE (arg_type)))
15935           return true;
15936       return false;
15937     }
15938   /* -- an array type constructed from any dependent type or whose
15939         size is specified by a constant expression that is
15940         value-dependent.  */
15941   if (TREE_CODE (type) == ARRAY_TYPE)
15942     {
15943       if (TYPE_DOMAIN (type)
15944           && dependent_type_p (TYPE_DOMAIN (type)))
15945         return true;
15946       return dependent_type_p (TREE_TYPE (type));
15947     }
15948   else if (TREE_CODE (type) == INTEGER_TYPE
15949            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15950     {
15951       /* If this is the TYPE_DOMAIN of an array type, consider it
15952          dependent.  */
15953       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15954               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15955     }
15956
15957   /* -- a template-id in which either the template name is a template
15958      parameter ...  */
15959   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15960     return true;
15961   /* ... or any of the template arguments is a dependent type or
15962         an expression that is type-dependent or value-dependent.  */
15963   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15964            && (any_dependent_template_arguments_p
15965                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15966     return true;
15967
15968   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15969      argument of the `typeof' expression is not type-dependent, then
15970      it should already been have resolved.  */
15971   if (TREE_CODE (type) == TYPEOF_TYPE
15972       || TREE_CODE (type) == DECLTYPE_TYPE)
15973     return true;
15974
15975   /* A template argument pack is dependent if any of its packed
15976      arguments are.  */
15977   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15978     {
15979       tree args = ARGUMENT_PACK_ARGS (type);
15980       int i, len = TREE_VEC_LENGTH (args);
15981       for (i = 0; i < len; ++i)
15982         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15983           return true;
15984     }
15985
15986   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15987      be template parameters.  */
15988   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15989     return true;
15990
15991   /* The standard does not specifically mention types that are local
15992      to template functions or local classes, but they should be
15993      considered dependent too.  For example:
15994
15995        template <int I> void f() {
15996          enum E { a = I };
15997          S<sizeof (E)> s;
15998        }
15999
16000      The size of `E' cannot be known until the value of `I' has been
16001      determined.  Therefore, `E' must be considered dependent.  */
16002   scope = TYPE_CONTEXT (type);
16003   if (scope && TYPE_P (scope))
16004     return dependent_type_p (scope);
16005   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
16006     return type_dependent_expression_p (scope);
16007
16008   /* Other types are non-dependent.  */
16009   return false;
16010 }
16011
16012 /* Returns TRUE if TYPE is dependent, in the sense of
16013    [temp.dep.type].  */
16014
16015 bool
16016 dependent_type_p (tree type)
16017 {
16018   /* If there are no template parameters in scope, then there can't be
16019      any dependent types.  */
16020   if (!processing_template_decl)
16021     {
16022       /* If we are not processing a template, then nobody should be
16023          providing us with a dependent type.  */
16024       gcc_assert (type);
16025       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
16026       return false;
16027     }
16028
16029   /* If the type is NULL, we have not computed a type for the entity
16030      in question; in that case, the type is dependent.  */
16031   if (!type)
16032     return true;
16033
16034   /* Erroneous types can be considered non-dependent.  */
16035   if (type == error_mark_node)
16036     return false;
16037
16038   /* If we have not already computed the appropriate value for TYPE,
16039      do so now.  */
16040   if (!TYPE_DEPENDENT_P_VALID (type))
16041     {
16042       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
16043       TYPE_DEPENDENT_P_VALID (type) = 1;
16044     }
16045
16046   return TYPE_DEPENDENT_P (type);
16047 }
16048
16049 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
16050
16051 static bool
16052 dependent_scope_ref_p (tree expression, bool criterion (tree))
16053 {
16054   tree scope;
16055   tree name;
16056
16057   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
16058
16059   if (!TYPE_P (TREE_OPERAND (expression, 0)))
16060     return true;
16061
16062   scope = TREE_OPERAND (expression, 0);
16063   name = TREE_OPERAND (expression, 1);
16064
16065   /* [temp.dep.expr]
16066
16067      An id-expression is type-dependent if it contains a
16068      nested-name-specifier that contains a class-name that names a
16069      dependent type.  */
16070   /* The suggested resolution to Core Issue 2 implies that if the
16071      qualifying type is the current class, then we must peek
16072      inside it.  */
16073   if (DECL_P (name)
16074       && currently_open_class (scope)
16075       && !criterion (name))
16076     return false;
16077   if (dependent_type_p (scope))
16078     return true;
16079
16080   return false;
16081 }
16082
16083 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
16084    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
16085    expression.  */
16086
16087 bool
16088 value_dependent_expression_p (tree expression)
16089 {
16090   if (!processing_template_decl)
16091     return false;
16092
16093   /* A name declared with a dependent type.  */
16094   if (DECL_P (expression) && type_dependent_expression_p (expression))
16095     return true;
16096
16097   switch (TREE_CODE (expression))
16098     {
16099     case IDENTIFIER_NODE:
16100       /* A name that has not been looked up -- must be dependent.  */
16101       return true;
16102
16103     case TEMPLATE_PARM_INDEX:
16104       /* A non-type template parm.  */
16105       return true;
16106
16107     case CONST_DECL:
16108       /* A non-type template parm.  */
16109       if (DECL_TEMPLATE_PARM_P (expression))
16110         return true;
16111       return value_dependent_expression_p (DECL_INITIAL (expression));
16112
16113     case VAR_DECL:
16114        /* A constant with integral or enumeration type and is initialized
16115           with an expression that is value-dependent.  */
16116       if (DECL_INITIAL (expression)
16117           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
16118           && value_dependent_expression_p (DECL_INITIAL (expression)))
16119         return true;
16120       return false;
16121
16122     case DYNAMIC_CAST_EXPR:
16123     case STATIC_CAST_EXPR:
16124     case CONST_CAST_EXPR:
16125     case REINTERPRET_CAST_EXPR:
16126     case CAST_EXPR:
16127       /* These expressions are value-dependent if the type to which
16128          the cast occurs is dependent or the expression being casted
16129          is value-dependent.  */
16130       {
16131         tree type = TREE_TYPE (expression);
16132
16133         if (dependent_type_p (type))
16134           return true;
16135
16136         /* A functional cast has a list of operands.  */
16137         expression = TREE_OPERAND (expression, 0);
16138         if (!expression)
16139           {
16140             /* If there are no operands, it must be an expression such
16141                as "int()". This should not happen for aggregate types
16142                because it would form non-constant expressions.  */
16143             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
16144
16145             return false;
16146           }
16147
16148         if (TREE_CODE (expression) == TREE_LIST)
16149           return any_value_dependent_elements_p (expression);
16150
16151         return value_dependent_expression_p (expression);
16152       }
16153
16154     case SIZEOF_EXPR:
16155     case ALIGNOF_EXPR:
16156       /* A `sizeof' expression is value-dependent if the operand is
16157          type-dependent or is a pack expansion.  */
16158       expression = TREE_OPERAND (expression, 0);
16159       if (PACK_EXPANSION_P (expression))
16160         return true;
16161       else if (TYPE_P (expression))
16162         return dependent_type_p (expression);
16163       return type_dependent_expression_p (expression);
16164
16165     case SCOPE_REF:
16166       return dependent_scope_ref_p (expression, value_dependent_expression_p);
16167
16168     case COMPONENT_REF:
16169       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
16170               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
16171
16172     case CALL_EXPR:
16173       /* A CALL_EXPR may appear in a constant expression if it is a
16174          call to a builtin function, e.g., __builtin_constant_p.  All
16175          such calls are value-dependent.  */
16176       return true;
16177
16178     case NONTYPE_ARGUMENT_PACK:
16179       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
16180          is value-dependent.  */
16181       {
16182         tree values = ARGUMENT_PACK_ARGS (expression);
16183         int i, len = TREE_VEC_LENGTH (values);
16184         
16185         for (i = 0; i < len; ++i)
16186           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
16187             return true;
16188         
16189         return false;
16190       }
16191
16192     case TRAIT_EXPR:
16193       {
16194         tree type2 = TRAIT_EXPR_TYPE2 (expression);
16195         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
16196                 || (type2 ? dependent_type_p (type2) : false));
16197       }
16198
16199     case MODOP_EXPR:
16200       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
16201               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
16202
16203     default:
16204       /* A constant expression is value-dependent if any subexpression is
16205          value-dependent.  */
16206       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
16207         {
16208         case tcc_reference:
16209         case tcc_unary:
16210           return (value_dependent_expression_p
16211                   (TREE_OPERAND (expression, 0)));
16212
16213         case tcc_comparison:
16214         case tcc_binary:
16215           return ((value_dependent_expression_p
16216                    (TREE_OPERAND (expression, 0)))
16217                   || (value_dependent_expression_p
16218                       (TREE_OPERAND (expression, 1))));
16219
16220         case tcc_expression:
16221         case tcc_vl_exp:
16222           {
16223             int i;
16224             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
16225               /* In some cases, some of the operands may be missing.
16226                  (For example, in the case of PREDECREMENT_EXPR, the
16227                  amount to increment by may be missing.)  That doesn't
16228                  make the expression dependent.  */
16229               if (TREE_OPERAND (expression, i)
16230                   && (value_dependent_expression_p
16231                       (TREE_OPERAND (expression, i))))
16232                 return true;
16233             return false;
16234           }
16235
16236         default:
16237           break;
16238         }
16239     }
16240
16241   /* The expression is not value-dependent.  */
16242   return false;
16243 }
16244
16245 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
16246    [temp.dep.expr].  */
16247
16248 bool
16249 type_dependent_expression_p (tree expression)
16250 {
16251   if (!processing_template_decl)
16252     return false;
16253
16254   if (expression == error_mark_node)
16255     return false;
16256
16257   /* An unresolved name is always dependent.  */
16258   if (TREE_CODE (expression) == IDENTIFIER_NODE
16259       || TREE_CODE (expression) == USING_DECL)
16260     return true;
16261
16262   /* Some expression forms are never type-dependent.  */
16263   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
16264       || TREE_CODE (expression) == SIZEOF_EXPR
16265       || TREE_CODE (expression) == ALIGNOF_EXPR
16266       || TREE_CODE (expression) == TRAIT_EXPR
16267       || TREE_CODE (expression) == TYPEID_EXPR
16268       || TREE_CODE (expression) == DELETE_EXPR
16269       || TREE_CODE (expression) == VEC_DELETE_EXPR
16270       || TREE_CODE (expression) == THROW_EXPR)
16271     return false;
16272
16273   /* The types of these expressions depends only on the type to which
16274      the cast occurs.  */
16275   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
16276       || TREE_CODE (expression) == STATIC_CAST_EXPR
16277       || TREE_CODE (expression) == CONST_CAST_EXPR
16278       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
16279       || TREE_CODE (expression) == CAST_EXPR)
16280     return dependent_type_p (TREE_TYPE (expression));
16281
16282   /* The types of these expressions depends only on the type created
16283      by the expression.  */
16284   if (TREE_CODE (expression) == NEW_EXPR
16285       || TREE_CODE (expression) == VEC_NEW_EXPR)
16286     {
16287       /* For NEW_EXPR tree nodes created inside a template, either
16288          the object type itself or a TREE_LIST may appear as the
16289          operand 1.  */
16290       tree type = TREE_OPERAND (expression, 1);
16291       if (TREE_CODE (type) == TREE_LIST)
16292         /* This is an array type.  We need to check array dimensions
16293            as well.  */
16294         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
16295                || value_dependent_expression_p
16296                     (TREE_OPERAND (TREE_VALUE (type), 1));
16297       else
16298         return dependent_type_p (type);
16299     }
16300
16301   if (TREE_CODE (expression) == SCOPE_REF
16302       && dependent_scope_ref_p (expression,
16303                                 type_dependent_expression_p))
16304     return true;
16305
16306   if (TREE_CODE (expression) == FUNCTION_DECL
16307       && DECL_LANG_SPECIFIC (expression)
16308       && DECL_TEMPLATE_INFO (expression)
16309       && (any_dependent_template_arguments_p
16310           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
16311     return true;
16312
16313   if (TREE_CODE (expression) == TEMPLATE_DECL
16314       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
16315     return false;
16316
16317   if (TREE_CODE (expression) == STMT_EXPR)
16318     expression = stmt_expr_value_expr (expression);
16319
16320   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
16321     {
16322       tree elt;
16323       unsigned i;
16324
16325       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
16326         {
16327           if (type_dependent_expression_p (elt))
16328             return true;
16329         }
16330       return false;
16331     }
16332
16333   if (TREE_TYPE (expression) == unknown_type_node)
16334     {
16335       if (TREE_CODE (expression) == ADDR_EXPR)
16336         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
16337       if (TREE_CODE (expression) == COMPONENT_REF
16338           || TREE_CODE (expression) == OFFSET_REF)
16339         {
16340           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
16341             return true;
16342           expression = TREE_OPERAND (expression, 1);
16343           if (TREE_CODE (expression) == IDENTIFIER_NODE)
16344             return false;
16345         }
16346       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
16347       if (TREE_CODE (expression) == SCOPE_REF)
16348         return false;
16349
16350       if (TREE_CODE (expression) == BASELINK)
16351         expression = BASELINK_FUNCTIONS (expression);
16352
16353       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
16354         {
16355           if (any_dependent_template_arguments_p
16356               (TREE_OPERAND (expression, 1)))
16357             return true;
16358           expression = TREE_OPERAND (expression, 0);
16359         }
16360       gcc_assert (TREE_CODE (expression) == OVERLOAD
16361                   || TREE_CODE (expression) == FUNCTION_DECL);
16362
16363       while (expression)
16364         {
16365           if (type_dependent_expression_p (OVL_CURRENT (expression)))
16366             return true;
16367           expression = OVL_NEXT (expression);
16368         }
16369       return false;
16370     }
16371
16372   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
16373
16374   return (dependent_type_p (TREE_TYPE (expression)));
16375 }
16376
16377 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
16378    contains a type-dependent expression.  */
16379
16380 bool
16381 any_type_dependent_arguments_p (const_tree args)
16382 {
16383   while (args)
16384     {
16385       tree arg = TREE_VALUE (args);
16386
16387       if (type_dependent_expression_p (arg))
16388         return true;
16389       args = TREE_CHAIN (args);
16390     }
16391   return false;
16392 }
16393
16394 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
16395    expressions) contains any value-dependent expressions.  */
16396
16397 bool
16398 any_value_dependent_elements_p (const_tree list)
16399 {
16400   for (; list; list = TREE_CHAIN (list))
16401     if (value_dependent_expression_p (TREE_VALUE (list)))
16402       return true;
16403
16404   return false;
16405 }
16406
16407 /* Returns TRUE if the ARG (a template argument) is dependent.  */
16408
16409 bool
16410 dependent_template_arg_p (tree arg)
16411 {
16412   if (!processing_template_decl)
16413     return false;
16414
16415   if (TREE_CODE (arg) == TEMPLATE_DECL
16416       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16417     return dependent_template_p (arg);
16418   else if (ARGUMENT_PACK_P (arg))
16419     {
16420       tree args = ARGUMENT_PACK_ARGS (arg);
16421       int i, len = TREE_VEC_LENGTH (args);
16422       for (i = 0; i < len; ++i)
16423         {
16424           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16425             return true;
16426         }
16427
16428       return false;
16429     }
16430   else if (TYPE_P (arg))
16431     return dependent_type_p (arg);
16432   else
16433     return (type_dependent_expression_p (arg)
16434             || value_dependent_expression_p (arg));
16435 }
16436
16437 /* Returns true if ARGS (a collection of template arguments) contains
16438    any types that require structural equality testing.  */
16439
16440 bool
16441 any_template_arguments_need_structural_equality_p (tree args)
16442 {
16443   int i;
16444   int j;
16445
16446   if (!args)
16447     return false;
16448   if (args == error_mark_node)
16449     return true;
16450
16451   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16452     {
16453       tree level = TMPL_ARGS_LEVEL (args, i + 1);
16454       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16455         {
16456           tree arg = TREE_VEC_ELT (level, j);
16457           tree packed_args = NULL_TREE;
16458           int k, len = 1;
16459
16460           if (ARGUMENT_PACK_P (arg))
16461             {
16462               /* Look inside the argument pack.  */
16463               packed_args = ARGUMENT_PACK_ARGS (arg);
16464               len = TREE_VEC_LENGTH (packed_args);
16465             }
16466
16467           for (k = 0; k < len; ++k)
16468             {
16469               if (packed_args)
16470                 arg = TREE_VEC_ELT (packed_args, k);
16471
16472               if (error_operand_p (arg))
16473                 return true;
16474               else if (TREE_CODE (arg) == TEMPLATE_DECL
16475                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16476                 continue;
16477               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
16478                 return true;
16479               else if (!TYPE_P (arg) && TREE_TYPE (arg)
16480                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
16481                 return true;
16482             }
16483         }
16484     }
16485
16486   return false;
16487 }
16488
16489 /* Returns true if ARGS (a collection of template arguments) contains
16490    any dependent arguments.  */
16491
16492 bool
16493 any_dependent_template_arguments_p (const_tree args)
16494 {
16495   int i;
16496   int j;
16497
16498   if (!args)
16499     return false;
16500   if (args == error_mark_node)
16501     return true;
16502
16503   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16504     {
16505       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16506       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16507         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16508           return true;
16509     }
16510
16511   return false;
16512 }
16513
16514 /* Returns TRUE if the template TMPL is dependent.  */
16515
16516 bool
16517 dependent_template_p (tree tmpl)
16518 {
16519   if (TREE_CODE (tmpl) == OVERLOAD)
16520     {
16521       while (tmpl)
16522         {
16523           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16524             return true;
16525           tmpl = OVL_CHAIN (tmpl);
16526         }
16527       return false;
16528     }
16529
16530   /* Template template parameters are dependent.  */
16531   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16532       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16533     return true;
16534   /* So are names that have not been looked up.  */
16535   if (TREE_CODE (tmpl) == SCOPE_REF
16536       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16537     return true;
16538   /* So are member templates of dependent classes.  */
16539   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16540     return dependent_type_p (DECL_CONTEXT (tmpl));
16541   return false;
16542 }
16543
16544 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16545
16546 bool
16547 dependent_template_id_p (tree tmpl, tree args)
16548 {
16549   return (dependent_template_p (tmpl)
16550           || any_dependent_template_arguments_p (args));
16551 }
16552
16553 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
16554    is dependent.  */
16555
16556 bool
16557 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
16558 {
16559   int i;
16560
16561   if (!processing_template_decl)
16562     return false;
16563
16564   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
16565     {
16566       tree decl = TREE_VEC_ELT (declv, i);
16567       tree init = TREE_VEC_ELT (initv, i);
16568       tree cond = TREE_VEC_ELT (condv, i);
16569       tree incr = TREE_VEC_ELT (incrv, i);
16570
16571       if (type_dependent_expression_p (decl))
16572         return true;
16573
16574       if (init && type_dependent_expression_p (init))
16575         return true;
16576
16577       if (type_dependent_expression_p (cond))
16578         return true;
16579
16580       if (COMPARISON_CLASS_P (cond)
16581           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
16582               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
16583         return true;
16584
16585       if (TREE_CODE (incr) == MODOP_EXPR)
16586         {
16587           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
16588               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
16589             return true;
16590         }
16591       else if (type_dependent_expression_p (incr))
16592         return true;
16593       else if (TREE_CODE (incr) == MODIFY_EXPR)
16594         {
16595           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
16596             return true;
16597           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
16598             {
16599               tree t = TREE_OPERAND (incr, 1);
16600               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
16601                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
16602                 return true;
16603             }
16604         }
16605     }
16606
16607   return false;
16608 }
16609
16610 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16611    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16612    no such TYPE can be found.  Note that this function peers inside
16613    uninstantiated templates and therefore should be used only in
16614    extremely limited situations.  ONLY_CURRENT_P restricts this
16615    peering to the currently open classes hierarchy (which is required
16616    when comparing types).  */
16617
16618 tree
16619 resolve_typename_type (tree type, bool only_current_p)
16620 {
16621   tree scope;
16622   tree name;
16623   tree decl;
16624   int quals;
16625   tree pushed_scope;
16626   tree result;
16627
16628   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16629
16630   scope = TYPE_CONTEXT (type);
16631   name = TYPE_IDENTIFIER (type);
16632
16633   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16634      it first before we can figure out what NAME refers to.  */
16635   if (TREE_CODE (scope) == TYPENAME_TYPE)
16636     scope = resolve_typename_type (scope, only_current_p);
16637   /* If we don't know what SCOPE refers to, then we cannot resolve the
16638      TYPENAME_TYPE.  */
16639   if (TREE_CODE (scope) == TYPENAME_TYPE)
16640     return type;
16641   /* If the SCOPE is a template type parameter, we have no way of
16642      resolving the name.  */
16643   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16644     return type;
16645   /* If the SCOPE is not the current instantiation, there's no reason
16646      to look inside it.  */
16647   if (only_current_p && !currently_open_class (scope))
16648     return type;
16649   /* If SCOPE isn't the template itself, it will not have a valid
16650      TYPE_FIELDS list.  */
16651   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16652     /* scope is either the template itself or a compatible instantiation
16653        like X<T>, so look up the name in the original template.  */
16654     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16655   else
16656     /* scope is a partial instantiation, so we can't do the lookup or we
16657        will lose the template arguments.  */
16658     return type;
16659   /* Enter the SCOPE so that name lookup will be resolved as if we
16660      were in the class definition.  In particular, SCOPE will no
16661      longer be considered a dependent type.  */
16662   pushed_scope = push_scope (scope);
16663   /* Look up the declaration.  */
16664   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16665
16666   result = NULL_TREE;
16667   
16668   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16669      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16670   if (!decl)
16671     /*nop*/;
16672   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16673            && TREE_CODE (decl) == TYPE_DECL)
16674     {
16675       result = TREE_TYPE (decl);
16676       if (result == error_mark_node)
16677         result = NULL_TREE;
16678     }
16679   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16680            && DECL_CLASS_TEMPLATE_P (decl))
16681     {
16682       tree tmpl;
16683       tree args;
16684       /* Obtain the template and the arguments.  */
16685       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16686       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16687       /* Instantiate the template.  */
16688       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16689                                       /*entering_scope=*/0,
16690                                       tf_error | tf_user);
16691       if (result == error_mark_node)
16692         result = NULL_TREE;
16693     }
16694   
16695   /* Leave the SCOPE.  */
16696   if (pushed_scope)
16697     pop_scope (pushed_scope);
16698
16699   /* If we failed to resolve it, return the original typename.  */
16700   if (!result)
16701     return type;
16702   
16703   /* If lookup found a typename type, resolve that too.  */
16704   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16705     {
16706       /* Ill-formed programs can cause infinite recursion here, so we
16707          must catch that.  */
16708       TYPENAME_IS_RESOLVING_P (type) = 1;
16709       result = resolve_typename_type (result, only_current_p);
16710       TYPENAME_IS_RESOLVING_P (type) = 0;
16711     }
16712   
16713   /* Qualify the resulting type.  */
16714   quals = cp_type_quals (type);
16715   if (quals)
16716     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16717
16718   return result;
16719 }
16720
16721 /* EXPR is an expression which is not type-dependent.  Return a proxy
16722    for EXPR that can be used to compute the types of larger
16723    expressions containing EXPR.  */
16724
16725 tree
16726 build_non_dependent_expr (tree expr)
16727 {
16728   tree inner_expr;
16729
16730   /* Preserve null pointer constants so that the type of things like
16731      "p == 0" where "p" is a pointer can be determined.  */
16732   if (null_ptr_cst_p (expr))
16733     return expr;
16734   /* Preserve OVERLOADs; the functions must be available to resolve
16735      types.  */
16736   inner_expr = expr;
16737   if (TREE_CODE (inner_expr) == STMT_EXPR)
16738     inner_expr = stmt_expr_value_expr (inner_expr);
16739   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16740     inner_expr = TREE_OPERAND (inner_expr, 0);
16741   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16742     inner_expr = TREE_OPERAND (inner_expr, 1);
16743   if (is_overloaded_fn (inner_expr)
16744       || TREE_CODE (inner_expr) == OFFSET_REF)
16745     return expr;
16746   /* There is no need to return a proxy for a variable.  */
16747   if (TREE_CODE (expr) == VAR_DECL)
16748     return expr;
16749   /* Preserve string constants; conversions from string constants to
16750      "char *" are allowed, even though normally a "const char *"
16751      cannot be used to initialize a "char *".  */
16752   if (TREE_CODE (expr) == STRING_CST)
16753     return expr;
16754   /* Preserve arithmetic constants, as an optimization -- there is no
16755      reason to create a new node.  */
16756   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16757     return expr;
16758   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16759      There is at least one place where we want to know that a
16760      particular expression is a throw-expression: when checking a ?:
16761      expression, there are special rules if the second or third
16762      argument is a throw-expression.  */
16763   if (TREE_CODE (expr) == THROW_EXPR)
16764     return expr;
16765
16766   if (TREE_CODE (expr) == COND_EXPR)
16767     return build3 (COND_EXPR,
16768                    TREE_TYPE (expr),
16769                    TREE_OPERAND (expr, 0),
16770                    (TREE_OPERAND (expr, 1)
16771                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16772                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16773                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16774   if (TREE_CODE (expr) == COMPOUND_EXPR
16775       && !COMPOUND_EXPR_OVERLOADED (expr))
16776     return build2 (COMPOUND_EXPR,
16777                    TREE_TYPE (expr),
16778                    TREE_OPERAND (expr, 0),
16779                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16780
16781   /* If the type is unknown, it can't really be non-dependent */
16782   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16783
16784   /* Otherwise, build a NON_DEPENDENT_EXPR.
16785
16786      REFERENCE_TYPEs are not stripped for expressions in templates
16787      because doing so would play havoc with mangling.  Consider, for
16788      example:
16789
16790        template <typename T> void f<T& g>() { g(); }
16791
16792      In the body of "f", the expression for "g" will have
16793      REFERENCE_TYPE, even though the standard says that it should
16794      not.  The reason is that we must preserve the syntactic form of
16795      the expression so that mangling (say) "f<g>" inside the body of
16796      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16797      stripped here.  */
16798   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16799 }
16800
16801 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16802    Return a new TREE_LIST with the various arguments replaced with
16803    equivalent non-dependent expressions.  */
16804
16805 tree
16806 build_non_dependent_args (tree args)
16807 {
16808   tree a;
16809   tree new_args;
16810
16811   new_args = NULL_TREE;
16812   for (a = args; a; a = TREE_CHAIN (a))
16813     new_args = tree_cons (NULL_TREE,
16814                           build_non_dependent_expr (TREE_VALUE (a)),
16815                           new_args);
16816   return nreverse (new_args);
16817 }
16818
16819 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
16820    with a level one deeper than the actual template parms.  */
16821
16822 tree
16823 make_auto (void)
16824 {
16825   tree au;
16826
16827   /* ??? Is it worth caching this for multiple autos at the same level?  */
16828   au = cxx_make_type (TEMPLATE_TYPE_PARM);
16829   TYPE_NAME (au) = build_decl (TYPE_DECL, get_identifier ("auto"), au);
16830   TYPE_STUB_DECL (au) = TYPE_NAME (au);
16831   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
16832     (0, processing_template_decl + 1, processing_template_decl + 1,
16833      TYPE_NAME (au), NULL_TREE);
16834   TYPE_CANONICAL (au) = canonical_type_parameter (au);
16835   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
16836   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
16837
16838   return au;
16839 }
16840
16841 /* Replace auto in TYPE with std::initializer_list<auto>.  */
16842
16843 static tree
16844 listify_autos (tree type, tree auto_node)
16845 {
16846   tree std_init_list = namespace_binding
16847     (get_identifier ("initializer_list"), std_node);
16848   tree argvec;
16849   tree init_auto;
16850   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
16851     {    
16852       error ("deducing auto from brace-enclosed initializer list requires "
16853              "#include <initializer_list>");
16854       return error_mark_node;
16855     }
16856   argvec = make_tree_vec (1);
16857   TREE_VEC_ELT (argvec, 0) = auto_node;
16858   init_auto = lookup_template_class (std_init_list, argvec, NULL_TREE,
16859                                      NULL_TREE, 0, tf_warning_or_error);
16860
16861   TREE_VEC_ELT (argvec, 0) = init_auto;
16862   if (processing_template_decl)
16863     argvec = add_to_template_args (current_template_args (), argvec);
16864   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
16865 }
16866
16867 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
16868    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
16869
16870 tree
16871 do_auto_deduction (tree type, tree init, tree auto_node)
16872 {
16873   tree parms, args, tparms, targs;
16874   int val;
16875
16876   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
16877      with either a new invented type template parameter U or, if the
16878      initializer is a braced-init-list (8.5.4), with
16879      std::initializer_list<U>.  */
16880   if (BRACE_ENCLOSED_INITIALIZER_P (init))
16881     type = listify_autos (type, auto_node);
16882
16883   parms = build_tree_list (NULL_TREE, type);
16884   args = build_tree_list (NULL_TREE, init);
16885   tparms = make_tree_vec (1);
16886   targs = make_tree_vec (1);
16887   TREE_VEC_ELT (tparms, 0)
16888     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
16889   val = type_unification_real (tparms, targs, parms, args, 0,
16890                                DEDUCE_CALL, LOOKUP_NORMAL);
16891   if (val > 0)
16892     {
16893       error ("unable to deduce %qT from %qE", type, init);
16894       return error_mark_node;
16895     }
16896
16897   if (processing_template_decl)
16898     targs = add_to_template_args (current_template_args (), targs);
16899   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
16900 }
16901
16902 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
16903    result.  */
16904
16905 tree
16906 splice_late_return_type (tree type, tree late_return_type)
16907 {
16908   tree argvec;
16909
16910   if (late_return_type == NULL_TREE)
16911     return type;
16912   argvec = make_tree_vec (1);
16913   TREE_VEC_ELT (argvec, 0) = late_return_type;
16914   if (processing_template_decl)
16915     argvec = add_to_template_args (current_template_args (), argvec);
16916   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
16917 }
16918
16919 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
16920
16921 bool
16922 is_auto (const_tree type)
16923 {
16924   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16925       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
16926     return true;
16927   else
16928     return false;
16929 }
16930
16931 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
16932    appear as a type-specifier for the declaration in question, we don't
16933    have to look through the whole type.  */
16934
16935 tree
16936 type_uses_auto (tree type)
16937 {
16938   enum tree_code code;
16939   if (is_auto (type))
16940     return type;
16941
16942   code = TREE_CODE (type);
16943
16944   if (code == POINTER_TYPE || code == REFERENCE_TYPE
16945       || code == OFFSET_TYPE || code == FUNCTION_TYPE
16946       || code == METHOD_TYPE || code == ARRAY_TYPE)
16947     return type_uses_auto (TREE_TYPE (type));
16948
16949   if (TYPE_PTRMEMFUNC_P (type))
16950     return type_uses_auto (TREE_TYPE (TREE_TYPE
16951                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
16952
16953   return NULL_TREE;
16954 }
16955
16956 #include "gt-cp-pt.h"