OSDN Git Service

2008-08-26 Douglas Gregor <doug.gregor@gmail.com>
[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 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3296   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3297   int nargs = TREE_VEC_LENGTH (inner_args);
3298   int ntparms = TREE_VEC_LENGTH (inner_parms);
3299   int  i;
3300   int did_error_intro = 0;
3301   struct template_parm_data tpd;
3302   struct template_parm_data tpd2;
3303
3304   /* We check that each of the template parameters given in the
3305      partial specialization is used in the argument list to the
3306      specialization.  For example:
3307
3308        template <class T> struct S;
3309        template <class T> struct S<T*>;
3310
3311      The second declaration is OK because `T*' uses the template
3312      parameter T, whereas
3313
3314        template <class T> struct S<int>;
3315
3316      is no good.  Even trickier is:
3317
3318        template <class T>
3319        struct S1
3320        {
3321           template <class U>
3322           struct S2;
3323           template <class U>
3324           struct S2<T>;
3325        };
3326
3327      The S2<T> declaration is actually invalid; it is a
3328      full-specialization.  Of course,
3329
3330           template <class U>
3331           struct S2<T (*)(U)>;
3332
3333      or some such would have been OK.  */
3334   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3335   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3336   memset (tpd.parms, 0, sizeof (int) * ntparms);
3337
3338   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3339   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3340   for (i = 0; i < nargs; ++i)
3341     {
3342       tpd.current_arg = i;
3343       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3344                               &mark_template_parm,
3345                               &tpd,
3346                               NULL,
3347                               /*include_nondeduced_p=*/false);
3348     }
3349   for (i = 0; i < ntparms; ++i)
3350     if (tpd.parms[i] == 0)
3351       {
3352         /* One of the template parms was not used in the
3353            specialization.  */
3354         if (!did_error_intro)
3355           {
3356             error ("template parameters not used in partial specialization:");
3357             did_error_intro = 1;
3358           }
3359
3360         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3361       }
3362
3363   /* [temp.class.spec]
3364
3365      The argument list of the specialization shall not be identical to
3366      the implicit argument list of the primary template.  */
3367   if (comp_template_args
3368       (inner_args,
3369        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3370                                                    (maintmpl)))))
3371     error ("partial specialization %qT does not specialize any template arguments", type);
3372
3373   /* [temp.class.spec]
3374
3375      A partially specialized non-type argument expression shall not
3376      involve template parameters of the partial specialization except
3377      when the argument expression is a simple identifier.
3378
3379      The type of a template parameter corresponding to a specialized
3380      non-type argument shall not be dependent on a parameter of the
3381      specialization. 
3382
3383      Also, we verify that pack expansions only occur at the
3384      end of the argument list.  */
3385   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3386   tpd2.parms = 0;
3387   for (i = 0; i < nargs; ++i)
3388     {
3389       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3390       tree arg = TREE_VEC_ELT (inner_args, i);
3391       tree packed_args = NULL_TREE;
3392       int j, len = 1;
3393
3394       if (ARGUMENT_PACK_P (arg))
3395         {
3396           /* Extract the arguments from the argument pack. We'll be
3397              iterating over these in the following loop.  */
3398           packed_args = ARGUMENT_PACK_ARGS (arg);
3399           len = TREE_VEC_LENGTH (packed_args);
3400         }
3401
3402       for (j = 0; j < len; j++)
3403         {
3404           if (packed_args)
3405             /* Get the Jth argument in the parameter pack.  */
3406             arg = TREE_VEC_ELT (packed_args, j);
3407
3408           if (PACK_EXPANSION_P (arg))
3409             {
3410               /* Pack expansions must come at the end of the
3411                  argument list.  */
3412               if ((packed_args && j < len - 1)
3413                   || (!packed_args && i < nargs - 1))
3414                 {
3415                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3416                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3417                   else
3418                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3419
3420                   if (packed_args)
3421                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3422                 }
3423             }
3424
3425           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3426             /* We only care about the pattern.  */
3427             arg = PACK_EXPANSION_PATTERN (arg);
3428
3429           if (/* These first two lines are the `non-type' bit.  */
3430               !TYPE_P (arg)
3431               && TREE_CODE (arg) != TEMPLATE_DECL
3432               /* This next line is the `argument expression is not just a
3433                  simple identifier' condition and also the `specialized
3434                  non-type argument' bit.  */
3435               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3436             {
3437               if ((!packed_args && tpd.arg_uses_template_parms[i])
3438                   || (packed_args && uses_template_parms (arg)))
3439                 error ("template argument %qE involves template parameter(s)",
3440                        arg);
3441               else 
3442                 {
3443                   /* Look at the corresponding template parameter,
3444                      marking which template parameters its type depends
3445                      upon.  */
3446                   tree type = TREE_TYPE (parm);
3447
3448                   if (!tpd2.parms)
3449                     {
3450                       /* We haven't yet initialized TPD2.  Do so now.  */
3451                       tpd2.arg_uses_template_parms 
3452                         = (int *) alloca (sizeof (int) * nargs);
3453                       /* The number of parameters here is the number in the
3454                          main template, which, as checked in the assertion
3455                          above, is NARGS.  */
3456                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3457                       tpd2.level = 
3458                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3459                     }
3460
3461                   /* Mark the template parameters.  But this time, we're
3462                      looking for the template parameters of the main
3463                      template, not in the specialization.  */
3464                   tpd2.current_arg = i;
3465                   tpd2.arg_uses_template_parms[i] = 0;
3466                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3467                   for_each_template_parm (type,
3468                                           &mark_template_parm,
3469                                           &tpd2,
3470                                           NULL,
3471                                           /*include_nondeduced_p=*/false);
3472
3473                   if (tpd2.arg_uses_template_parms [i])
3474                     {
3475                       /* The type depended on some template parameters.
3476                          If they are fully specialized in the
3477                          specialization, that's OK.  */
3478                       int j;
3479                       for (j = 0; j < nargs; ++j)
3480                         if (tpd2.parms[j] != 0
3481                             && tpd.arg_uses_template_parms [j])
3482                           {
3483                             error ("type %qT of template argument %qE depends "
3484                                    "on template parameter(s)", 
3485                                    type,
3486                                    arg);
3487                             break;
3488                           }
3489                     }
3490                 }
3491             }
3492         }
3493     }
3494
3495   if (retrieve_specialization (maintmpl, specargs,
3496                                /*class_specializations_p=*/true))
3497     /* We've already got this specialization.  */
3498     return decl;
3499
3500   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3501     = tree_cons (specargs, inner_parms,
3502                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3503   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3504   return decl;
3505 }
3506
3507 /* Check that a template declaration's use of default arguments and
3508    parameter packs is not invalid.  Here, PARMS are the template
3509    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
3510    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
3511    specialization.
3512    
3513
3514    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3515    declaration (but not a definition); 1 indicates a declaration, 2
3516    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3517    emitted for extraneous default arguments.
3518
3519    Returns TRUE if there were no errors found, FALSE otherwise. */
3520
3521 bool
3522 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3523                          int is_partial, int is_friend_decl)
3524 {
3525   const char *msg;
3526   int last_level_to_check;
3527   tree parm_level;
3528   bool no_errors = true;
3529
3530   /* [temp.param]
3531
3532      A default template-argument shall not be specified in a
3533      function template declaration or a function template definition, nor
3534      in the template-parameter-list of the definition of a member of a
3535      class template.  */
3536
3537   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3538     /* You can't have a function template declaration in a local
3539        scope, nor you can you define a member of a class template in a
3540        local scope.  */
3541     return true;
3542
3543   if (current_class_type
3544       && !TYPE_BEING_DEFINED (current_class_type)
3545       && DECL_LANG_SPECIFIC (decl)
3546       /* If this is either a friend defined in the scope of the class
3547          or a member function.  */
3548       && (DECL_FUNCTION_MEMBER_P (decl)
3549           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3550           : DECL_FRIEND_CONTEXT (decl)
3551           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3552           : false)
3553       /* And, if it was a member function, it really was defined in
3554          the scope of the class.  */
3555       && (!DECL_FUNCTION_MEMBER_P (decl)
3556           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3557     /* We already checked these parameters when the template was
3558        declared, so there's no need to do it again now.  This function
3559        was defined in class scope, but we're processing it's body now
3560        that the class is complete.  */
3561     return true;
3562
3563   /* Core issue 226 (C++0x only): the following only applies to class
3564      templates.  */
3565   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3566     {
3567       /* [temp.param]
3568
3569          If a template-parameter has a default template-argument, all
3570          subsequent template-parameters shall have a default
3571          template-argument supplied.  */
3572       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3573         {
3574           tree inner_parms = TREE_VALUE (parm_level);
3575           int ntparms = TREE_VEC_LENGTH (inner_parms);
3576           int seen_def_arg_p = 0;
3577           int i;
3578
3579           for (i = 0; i < ntparms; ++i)
3580             {
3581               tree parm = TREE_VEC_ELT (inner_parms, i);
3582
3583               if (parm == error_mark_node)
3584                 continue;
3585
3586               if (TREE_PURPOSE (parm))
3587                 seen_def_arg_p = 1;
3588               else if (seen_def_arg_p)
3589                 {
3590                   error ("no default argument for %qD", TREE_VALUE (parm));
3591                   /* For better subsequent error-recovery, we indicate that
3592                      there should have been a default argument.  */
3593                   TREE_PURPOSE (parm) = error_mark_node;
3594                   no_errors = false;
3595                 }
3596               else if (is_primary
3597                        && !is_partial
3598                        && !is_friend_decl
3599                        && TREE_CODE (decl) == TYPE_DECL
3600                        && i < ntparms - 1
3601                        && template_parameter_pack_p (TREE_VALUE (parm)))
3602                 {
3603                   /* A primary class template can only have one
3604                      parameter pack, at the end of the template
3605                      parameter list.  */
3606
3607                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3608                     error ("parameter pack %qE must be at the end of the"
3609                            " template parameter list", TREE_VALUE (parm));
3610                   else
3611                     error ("parameter pack %qT must be at the end of the"
3612                            " template parameter list", 
3613                            TREE_TYPE (TREE_VALUE (parm)));
3614
3615                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
3616                     = error_mark_node;
3617                   no_errors = false;
3618                 }
3619             }
3620         }
3621     }
3622
3623   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3624       || is_partial 
3625       || !is_primary
3626       || is_friend_decl)
3627     /* For an ordinary class template, default template arguments are
3628        allowed at the innermost level, e.g.:
3629          template <class T = int>
3630          struct S {};
3631        but, in a partial specialization, they're not allowed even
3632        there, as we have in [temp.class.spec]:
3633
3634          The template parameter list of a specialization shall not
3635          contain default template argument values.
3636
3637        So, for a partial specialization, or for a function template
3638        (in C++98/C++03), we look at all of them.  */
3639     ;
3640   else
3641     /* But, for a primary class template that is not a partial
3642        specialization we look at all template parameters except the
3643        innermost ones.  */
3644     parms = TREE_CHAIN (parms);
3645
3646   /* Figure out what error message to issue.  */
3647   if (is_friend_decl == 2)
3648     msg = "default template arguments may not be used in function template friend re-declaration";
3649   else if (is_friend_decl)
3650     msg = "default template arguments may not be used in function template friend declarations";
3651   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3652     msg = "default template arguments may not be used in function templates";
3653   else if (is_partial)
3654     msg = "default template arguments may not be used in partial specializations";
3655   else
3656     msg = "default argument for template parameter for class enclosing %qD";
3657
3658   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3659     /* If we're inside a class definition, there's no need to
3660        examine the parameters to the class itself.  On the one
3661        hand, they will be checked when the class is defined, and,
3662        on the other, default arguments are valid in things like:
3663          template <class T = double>
3664          struct S { template <class U> void f(U); };
3665        Here the default argument for `S' has no bearing on the
3666        declaration of `f'.  */
3667     last_level_to_check = template_class_depth (current_class_type) + 1;
3668   else
3669     /* Check everything.  */
3670     last_level_to_check = 0;
3671
3672   for (parm_level = parms;
3673        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3674        parm_level = TREE_CHAIN (parm_level))
3675     {
3676       tree inner_parms = TREE_VALUE (parm_level);
3677       int i;
3678       int ntparms;
3679
3680       ntparms = TREE_VEC_LENGTH (inner_parms);
3681       for (i = 0; i < ntparms; ++i)
3682         {
3683           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3684             continue;
3685
3686           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3687             {
3688               if (msg)
3689                 {
3690                   no_errors = false;
3691                   if (is_friend_decl == 2)
3692                     return no_errors;
3693
3694                   error (msg, decl);
3695                   msg = 0;
3696                 }
3697
3698               /* Clear out the default argument so that we are not
3699                  confused later.  */
3700               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3701             }
3702         }
3703
3704       /* At this point, if we're still interested in issuing messages,
3705          they must apply to classes surrounding the object declared.  */
3706       if (msg)
3707         msg = "default argument for template parameter for class enclosing %qD";
3708     }
3709
3710   return no_errors;
3711 }
3712
3713 /* Worker for push_template_decl_real, called via
3714    for_each_template_parm.  DATA is really an int, indicating the
3715    level of the parameters we are interested in.  If T is a template
3716    parameter of that level, return nonzero.  */
3717
3718 static int
3719 template_parm_this_level_p (tree t, void* data)
3720 {
3721   int this_level = *(int *)data;
3722   int level;
3723
3724   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3725     level = TEMPLATE_PARM_LEVEL (t);
3726   else
3727     level = TEMPLATE_TYPE_LEVEL (t);
3728   return level == this_level;
3729 }
3730
3731 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3732    parameters given by current_template_args, or reuses a
3733    previously existing one, if appropriate.  Returns the DECL, or an
3734    equivalent one, if it is replaced via a call to duplicate_decls.
3735
3736    If IS_FRIEND is true, DECL is a friend declaration.  */
3737
3738 tree
3739 push_template_decl_real (tree decl, bool is_friend)
3740 {
3741   tree tmpl;
3742   tree args;
3743   tree info;
3744   tree ctx;
3745   int primary;
3746   int is_partial;
3747   int new_template_p = 0;
3748   /* True if the template is a member template, in the sense of
3749      [temp.mem].  */
3750   bool member_template_p = false;
3751
3752   if (decl == error_mark_node)
3753     return decl;
3754
3755   /* See if this is a partial specialization.  */
3756   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3757                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3758                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3759
3760   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3761     is_friend = true;
3762
3763   if (is_friend)
3764     /* For a friend, we want the context of the friend function, not
3765        the type of which it is a friend.  */
3766     ctx = DECL_CONTEXT (decl);
3767   else if (CP_DECL_CONTEXT (decl)
3768            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3769     /* In the case of a virtual function, we want the class in which
3770        it is defined.  */
3771     ctx = CP_DECL_CONTEXT (decl);
3772   else
3773     /* Otherwise, if we're currently defining some class, the DECL
3774        is assumed to be a member of the class.  */
3775     ctx = current_scope ();
3776
3777   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3778     ctx = NULL_TREE;
3779
3780   if (!DECL_CONTEXT (decl))
3781     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3782
3783   /* See if this is a primary template.  */
3784   if (is_friend && ctx)
3785     /* A friend template that specifies a class context, i.e.
3786          template <typename T> friend void A<T>::f();
3787        is not primary.  */
3788     primary = 0;
3789   else
3790     primary = template_parm_scope_p ();
3791
3792   if (primary)
3793     {
3794       if (DECL_CLASS_SCOPE_P (decl))
3795         member_template_p = true;
3796       if (TREE_CODE (decl) == TYPE_DECL
3797           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3798         {
3799           error ("template class without a name");
3800           return error_mark_node;
3801         }
3802       else if (TREE_CODE (decl) == FUNCTION_DECL)
3803         {
3804           if (DECL_DESTRUCTOR_P (decl))
3805             {
3806               /* [temp.mem]
3807
3808                  A destructor shall not be a member template.  */
3809               error ("destructor %qD declared as member template", decl);
3810               return error_mark_node;
3811             }
3812           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3813               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3814                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3815                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3816                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3817                       == void_list_node)))
3818             {
3819               /* [basic.stc.dynamic.allocation]
3820
3821                  An allocation function can be a function
3822                  template. ... Template allocation functions shall
3823                  have two or more parameters.  */
3824               error ("invalid template declaration of %qD", decl);
3825               return error_mark_node;
3826             }
3827         }
3828       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3829                && CLASS_TYPE_P (TREE_TYPE (decl)))
3830         /* OK */;
3831       else
3832         {
3833           error ("template declaration of %q#D", decl);
3834           return error_mark_node;
3835         }
3836     }
3837
3838   /* Check to see that the rules regarding the use of default
3839      arguments are not being violated.  */
3840   check_default_tmpl_args (decl, current_template_parms,
3841                            primary, is_partial, /*is_friend_decl=*/0);
3842
3843   /* Ensure that there are no parameter packs in the type of this
3844      declaration that have not been expanded.  */
3845   if (TREE_CODE (decl) == FUNCTION_DECL)
3846     {
3847       /* Check each of the arguments individually to see if there are
3848          any bare parameter packs.  */
3849       tree type = TREE_TYPE (decl);
3850       tree arg = DECL_ARGUMENTS (decl);
3851       tree argtype = TYPE_ARG_TYPES (type);
3852
3853       while (arg && argtype)
3854         {
3855           if (!FUNCTION_PARAMETER_PACK_P (arg)
3856               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
3857             {
3858             /* This is a PARM_DECL that contains unexpanded parameter
3859                packs. We have already complained about this in the
3860                check_for_bare_parameter_packs call, so just replace
3861                these types with ERROR_MARK_NODE.  */
3862               TREE_TYPE (arg) = error_mark_node;
3863               TREE_VALUE (argtype) = error_mark_node;
3864             }
3865
3866           arg = TREE_CHAIN (arg);
3867           argtype = TREE_CHAIN (argtype);
3868         }
3869
3870       /* Check for bare parameter packs in the return type and the
3871          exception specifiers.  */
3872       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
3873         /* Errors were already issued, set return type to int
3874            as the frontend doesn't expect error_mark_node as
3875            the return type.  */
3876         TREE_TYPE (type) = integer_type_node;
3877       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
3878         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
3879     }
3880   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
3881     {
3882       TREE_TYPE (decl) = error_mark_node;
3883       return error_mark_node;
3884     }
3885
3886   if (is_partial)
3887     return process_partial_specialization (decl);
3888
3889   args = current_template_args ();
3890
3891   if (!ctx
3892       || TREE_CODE (ctx) == FUNCTION_DECL
3893       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3894       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3895     {
3896       if (DECL_LANG_SPECIFIC (decl)
3897           && DECL_TEMPLATE_INFO (decl)
3898           && DECL_TI_TEMPLATE (decl))
3899         tmpl = DECL_TI_TEMPLATE (decl);
3900       /* If DECL is a TYPE_DECL for a class-template, then there won't
3901          be DECL_LANG_SPECIFIC.  The information equivalent to
3902          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3903       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3904                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3905                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3906         {
3907           /* Since a template declaration already existed for this
3908              class-type, we must be redeclaring it here.  Make sure
3909              that the redeclaration is valid.  */
3910           redeclare_class_template (TREE_TYPE (decl),
3911                                     current_template_parms);
3912           /* We don't need to create a new TEMPLATE_DECL; just use the
3913              one we already had.  */
3914           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3915         }
3916       else
3917         {
3918           tmpl = build_template_decl (decl, current_template_parms,
3919                                       member_template_p);
3920           new_template_p = 1;
3921
3922           if (DECL_LANG_SPECIFIC (decl)
3923               && DECL_TEMPLATE_SPECIALIZATION (decl))
3924             {
3925               /* A specialization of a member template of a template
3926                  class.  */
3927               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3928               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3929               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3930             }
3931         }
3932     }
3933   else
3934     {
3935       tree a, t, current, parms;
3936       int i;
3937       tree tinfo = get_template_info (decl);
3938
3939       if (!tinfo)
3940         {
3941           error ("template definition of non-template %q#D", decl);
3942           return error_mark_node;
3943         }
3944
3945       tmpl = TI_TEMPLATE (tinfo);
3946
3947       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3948           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3949           && DECL_TEMPLATE_SPECIALIZATION (decl)
3950           && DECL_MEMBER_TEMPLATE_P (tmpl))
3951         {
3952           tree new_tmpl;
3953
3954           /* The declaration is a specialization of a member
3955              template, declared outside the class.  Therefore, the
3956              innermost template arguments will be NULL, so we
3957              replace them with the arguments determined by the
3958              earlier call to check_explicit_specialization.  */
3959           args = DECL_TI_ARGS (decl);
3960
3961           new_tmpl
3962             = build_template_decl (decl, current_template_parms,
3963                                    member_template_p);
3964           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3965           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3966           DECL_TI_TEMPLATE (decl) = new_tmpl;
3967           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3968           DECL_TEMPLATE_INFO (new_tmpl)
3969             = tree_cons (tmpl, args, NULL_TREE);
3970
3971           register_specialization (new_tmpl,
3972                                    most_general_template (tmpl),
3973                                    args,
3974                                    is_friend);
3975           return decl;
3976         }
3977
3978       /* Make sure the template headers we got make sense.  */
3979
3980       parms = DECL_TEMPLATE_PARMS (tmpl);
3981       i = TMPL_PARMS_DEPTH (parms);
3982       if (TMPL_ARGS_DEPTH (args) != i)
3983         {
3984           error ("expected %d levels of template parms for %q#D, got %d",
3985                  i, decl, TMPL_ARGS_DEPTH (args));
3986         }
3987       else
3988         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3989           {
3990             a = TMPL_ARGS_LEVEL (args, i);
3991             t = INNERMOST_TEMPLATE_PARMS (parms);
3992
3993             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3994               {
3995                 if (current == decl)
3996                   error ("got %d template parameters for %q#D",
3997                          TREE_VEC_LENGTH (a), decl);
3998                 else
3999                   error ("got %d template parameters for %q#T",
4000                          TREE_VEC_LENGTH (a), current);
4001                 error ("  but %d required", TREE_VEC_LENGTH (t));
4002                 return error_mark_node;
4003               }
4004
4005             if (current == decl)
4006               current = ctx;
4007             else
4008               current = (TYPE_P (current)
4009                          ? TYPE_CONTEXT (current)
4010                          : DECL_CONTEXT (current));
4011           }
4012
4013       /* Check that the parms are used in the appropriate qualifying scopes
4014          in the declarator.  */
4015       if (!comp_template_args
4016           (TI_ARGS (tinfo),
4017            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4018         {
4019           error ("\
4020 template arguments to %qD do not match original template %qD",
4021                  decl, DECL_TEMPLATE_RESULT (tmpl));
4022           if (!uses_template_parms (TI_ARGS (tinfo)))
4023             inform (input_location, "use template<> for an explicit specialization");
4024           /* Avoid crash in import_export_decl.  */
4025           DECL_INTERFACE_KNOWN (decl) = 1;
4026           return error_mark_node;
4027         }
4028     }
4029
4030   DECL_TEMPLATE_RESULT (tmpl) = decl;
4031   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4032
4033   /* Push template declarations for global functions and types.  Note
4034      that we do not try to push a global template friend declared in a
4035      template class; such a thing may well depend on the template
4036      parameters of the class.  */
4037   if (new_template_p && !ctx
4038       && !(is_friend && template_class_depth (current_class_type) > 0))
4039     {
4040       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4041       if (tmpl == error_mark_node)
4042         return error_mark_node;
4043
4044       /* Hide template friend classes that haven't been declared yet.  */
4045       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4046         {
4047           DECL_ANTICIPATED (tmpl) = 1;
4048           DECL_FRIEND_P (tmpl) = 1;
4049         }
4050     }
4051
4052   if (primary)
4053     {
4054       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4055       int i;
4056
4057       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4058       if (DECL_CONV_FN_P (tmpl))
4059         {
4060           int depth = TMPL_PARMS_DEPTH (parms);
4061
4062           /* It is a conversion operator. See if the type converted to
4063              depends on innermost template operands.  */
4064
4065           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4066                                          depth))
4067             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4068         }
4069
4070       /* Give template template parms a DECL_CONTEXT of the template
4071          for which they are a parameter.  */
4072       parms = INNERMOST_TEMPLATE_PARMS (parms);
4073       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4074         {
4075           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4076           if (TREE_CODE (parm) == TEMPLATE_DECL)
4077             DECL_CONTEXT (parm) = tmpl;
4078         }
4079     }
4080
4081   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4082      back to its most general template.  If TMPL is a specialization,
4083      ARGS may only have the innermost set of arguments.  Add the missing
4084      argument levels if necessary.  */
4085   if (DECL_TEMPLATE_INFO (tmpl))
4086     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4087
4088   info = tree_cons (tmpl, args, NULL_TREE);
4089
4090   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4091     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4092   else if (DECL_LANG_SPECIFIC (decl))
4093     DECL_TEMPLATE_INFO (decl) = info;
4094
4095   return DECL_TEMPLATE_RESULT (tmpl);
4096 }
4097
4098 tree
4099 push_template_decl (tree decl)
4100 {
4101   return push_template_decl_real (decl, false);
4102 }
4103
4104 /* Called when a class template TYPE is redeclared with the indicated
4105    template PARMS, e.g.:
4106
4107      template <class T> struct S;
4108      template <class T> struct S {};  */
4109
4110 bool
4111 redeclare_class_template (tree type, tree parms)
4112 {
4113   tree tmpl;
4114   tree tmpl_parms;
4115   int i;
4116
4117   if (!TYPE_TEMPLATE_INFO (type))
4118     {
4119       error ("%qT is not a template type", type);
4120       return false;
4121     }
4122
4123   tmpl = TYPE_TI_TEMPLATE (type);
4124   if (!PRIMARY_TEMPLATE_P (tmpl))
4125     /* The type is nested in some template class.  Nothing to worry
4126        about here; there are no new template parameters for the nested
4127        type.  */
4128     return true;
4129
4130   if (!parms)
4131     {
4132       error ("template specifiers not specified in declaration of %qD",
4133              tmpl);
4134       return false;
4135     }
4136
4137   parms = INNERMOST_TEMPLATE_PARMS (parms);
4138   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4139
4140   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4141     {
4142       error ("redeclared with %d template parameter(s)", 
4143              TREE_VEC_LENGTH (parms));
4144       inform (input_location, "previous declaration %q+D used %d template parameter(s)", 
4145              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4146       return false;
4147     }
4148
4149   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4150     {
4151       tree tmpl_parm;
4152       tree parm;
4153       tree tmpl_default;
4154       tree parm_default;
4155
4156       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4157           || TREE_VEC_ELT (parms, i) == error_mark_node)
4158         continue;
4159
4160       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4161       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4162       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4163       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4164
4165       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4166          TEMPLATE_DECL.  */
4167       if (tmpl_parm != error_mark_node
4168           && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4169               || (TREE_CODE (tmpl_parm) != TYPE_DECL
4170                   && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4171               || (TREE_CODE (tmpl_parm) != PARM_DECL
4172                   && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4173                       != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4174               || (TREE_CODE (tmpl_parm) == PARM_DECL
4175                   && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4176                       != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4177         {
4178           error ("template parameter %q+#D", tmpl_parm);
4179           error ("redeclared here as %q#D", parm);
4180           return false;
4181         }
4182
4183       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4184         {
4185           /* We have in [temp.param]:
4186
4187              A template-parameter may not be given default arguments
4188              by two different declarations in the same scope.  */
4189           error ("redefinition of default argument for %q#D", parm);
4190           inform (input_location, "%Joriginal definition appeared here", tmpl_parm);
4191           return false;
4192         }
4193
4194       if (parm_default != NULL_TREE)
4195         /* Update the previous template parameters (which are the ones
4196            that will really count) with the new default value.  */
4197         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4198       else if (tmpl_default != NULL_TREE)
4199         /* Update the new parameters, too; they'll be used as the
4200            parameters for any members.  */
4201         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4202     }
4203
4204     return true;
4205 }
4206
4207 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4208    (possibly simplified) expression.  */
4209
4210 tree
4211 fold_non_dependent_expr (tree expr)
4212 {
4213   if (expr == NULL_TREE)
4214     return NULL_TREE;
4215
4216   /* If we're in a template, but EXPR isn't value dependent, simplify
4217      it.  We're supposed to treat:
4218
4219        template <typename T> void f(T[1 + 1]);
4220        template <typename T> void f(T[2]);
4221
4222      as two declarations of the same function, for example.  */
4223   if (processing_template_decl
4224       && !type_dependent_expression_p (expr)
4225       && !value_dependent_expression_p (expr))
4226     {
4227       HOST_WIDE_INT saved_processing_template_decl;
4228
4229       saved_processing_template_decl = processing_template_decl;
4230       processing_template_decl = 0;
4231       expr = tsubst_copy_and_build (expr,
4232                                     /*args=*/NULL_TREE,
4233                                     tf_error,
4234                                     /*in_decl=*/NULL_TREE,
4235                                     /*function_p=*/false,
4236                                     /*integral_constant_expression_p=*/true);
4237       processing_template_decl = saved_processing_template_decl;
4238     }
4239   return expr;
4240 }
4241
4242 /* EXPR is an expression which is used in a constant-expression context.
4243    For instance, it could be a VAR_DECL with a constant initializer.
4244    Extract the innermost constant expression.
4245
4246    This is basically a more powerful version of
4247    integral_constant_value, which can be used also in templates where
4248    initializers can maintain a syntactic rather than semantic form
4249    (even if they are non-dependent, for access-checking purposes).  */
4250
4251 static tree
4252 fold_decl_constant_value (tree expr)
4253 {
4254   tree const_expr = expr;
4255   do
4256     {
4257       expr = fold_non_dependent_expr (const_expr);
4258       const_expr = integral_constant_value (expr);
4259     }
4260   while (expr != const_expr);
4261
4262   return expr;
4263 }
4264
4265 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4266    must be a function or a pointer-to-function type, as specified
4267    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4268    and check that the resulting function has external linkage.  */
4269
4270 static tree
4271 convert_nontype_argument_function (tree type, tree expr)
4272 {
4273   tree fns = expr;
4274   tree fn, fn_no_ptr;
4275
4276   fn = instantiate_type (type, fns, tf_none);
4277   if (fn == error_mark_node)
4278     return error_mark_node;
4279
4280   fn_no_ptr = fn;
4281   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4282     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4283   if (TREE_CODE (fn_no_ptr) == BASELINK)
4284     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4285  
4286   /* [temp.arg.nontype]/1
4287
4288      A template-argument for a non-type, non-template template-parameter
4289      shall be one of:
4290      [...]
4291      -- the address of an object or function with external linkage.  */
4292   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4293     {
4294       error ("%qE is not a valid template argument for type %qT "
4295              "because function %qD has not external linkage",
4296              expr, type, fn_no_ptr);
4297       return NULL_TREE;
4298     }
4299
4300   return fn;
4301 }
4302
4303 /* Attempt to convert the non-type template parameter EXPR to the
4304    indicated TYPE.  If the conversion is successful, return the
4305    converted value.  If the conversion is unsuccessful, return
4306    NULL_TREE if we issued an error message, or error_mark_node if we
4307    did not.  We issue error messages for out-and-out bad template
4308    parameters, but not simply because the conversion failed, since we
4309    might be just trying to do argument deduction.  Both TYPE and EXPR
4310    must be non-dependent.
4311
4312    The conversion follows the special rules described in
4313    [temp.arg.nontype], and it is much more strict than an implicit
4314    conversion.
4315
4316    This function is called twice for each template argument (see
4317    lookup_template_class for a more accurate description of this
4318    problem). This means that we need to handle expressions which
4319    are not valid in a C++ source, but can be created from the
4320    first call (for instance, casts to perform conversions). These
4321    hacks can go away after we fix the double coercion problem.  */
4322
4323 static tree
4324 convert_nontype_argument (tree type, tree expr)
4325 {
4326   tree expr_type;
4327
4328   /* Detect immediately string literals as invalid non-type argument.
4329      This special-case is not needed for correctness (we would easily
4330      catch this later), but only to provide better diagnostic for this
4331      common user mistake. As suggested by DR 100, we do not mention
4332      linkage issues in the diagnostic as this is not the point.  */
4333   if (TREE_CODE (expr) == STRING_CST)
4334     {
4335       error ("%qE is not a valid template argument for type %qT "
4336              "because string literals can never be used in this context",
4337              expr, type);
4338       return NULL_TREE;
4339     }
4340
4341   /* If we are in a template, EXPR may be non-dependent, but still
4342      have a syntactic, rather than semantic, form.  For example, EXPR
4343      might be a SCOPE_REF, rather than the VAR_DECL to which the
4344      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4345      so that access checking can be performed when the template is
4346      instantiated -- but here we need the resolved form so that we can
4347      convert the argument.  */
4348   expr = fold_non_dependent_expr (expr);
4349   if (error_operand_p (expr))
4350     return error_mark_node;
4351   expr_type = TREE_TYPE (expr);
4352
4353   /* HACK: Due to double coercion, we can get a
4354      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4355      which is the tree that we built on the first call (see
4356      below when coercing to reference to object or to reference to
4357      function). We just strip everything and get to the arg.
4358      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4359      for examples.  */
4360   if (TREE_CODE (expr) == NOP_EXPR)
4361     {
4362       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4363         {
4364           /* ??? Maybe we could use convert_from_reference here, but we
4365              would need to relax its constraints because the NOP_EXPR
4366              could actually change the type to something more cv-qualified,
4367              and this is not folded by convert_from_reference.  */
4368           tree addr = TREE_OPERAND (expr, 0);
4369           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4370           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4371           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4372           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4373                       (TREE_TYPE (expr_type),
4374                        TREE_TYPE (TREE_TYPE (addr))));
4375
4376           expr = TREE_OPERAND (addr, 0);
4377           expr_type = TREE_TYPE (expr);
4378         }
4379
4380       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4381          parameter is a pointer to object, through decay and
4382          qualification conversion. Let's strip everything.  */
4383       else if (TYPE_PTROBV_P (type))
4384         {
4385           STRIP_NOPS (expr);
4386           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4387           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4388           /* Skip the ADDR_EXPR only if it is part of the decay for
4389              an array. Otherwise, it is part of the original argument
4390              in the source code.  */
4391           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4392             expr = TREE_OPERAND (expr, 0);
4393           expr_type = TREE_TYPE (expr);
4394         }
4395     }
4396
4397   /* [temp.arg.nontype]/5, bullet 1
4398
4399      For a non-type template-parameter of integral or enumeration type,
4400      integral promotions (_conv.prom_) and integral conversions
4401      (_conv.integral_) are applied.  */
4402   if (INTEGRAL_TYPE_P (type))
4403     {
4404       if (!INTEGRAL_TYPE_P (expr_type))
4405         return error_mark_node;
4406
4407       expr = fold_decl_constant_value (expr);
4408       /* Notice that there are constant expressions like '4 % 0' which
4409          do not fold into integer constants.  */
4410       if (TREE_CODE (expr) != INTEGER_CST)
4411         {
4412           error ("%qE is not a valid template argument for type %qT "
4413                  "because it is a non-constant expression", expr, type);
4414           return NULL_TREE;
4415         }
4416
4417       /* At this point, an implicit conversion does what we want,
4418          because we already know that the expression is of integral
4419          type.  */
4420       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4421       if (expr == error_mark_node)
4422         return error_mark_node;
4423
4424       /* Conversion was allowed: fold it to a bare integer constant.  */
4425       expr = fold (expr);
4426     }
4427   /* [temp.arg.nontype]/5, bullet 2
4428
4429      For a non-type template-parameter of type pointer to object,
4430      qualification conversions (_conv.qual_) and the array-to-pointer
4431      conversion (_conv.array_) are applied.  */
4432   else if (TYPE_PTROBV_P (type))
4433     {
4434       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4435
4436          A template-argument for a non-type, non-template template-parameter
4437          shall be one of: [...]
4438
4439          -- the name of a non-type template-parameter;
4440          -- the address of an object or function with external linkage, [...]
4441             expressed as "& id-expression" where the & is optional if the name
4442             refers to a function or array, or if the corresponding
4443             template-parameter is a reference.
4444
4445         Here, we do not care about functions, as they are invalid anyway
4446         for a parameter of type pointer-to-object.  */
4447
4448       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4449         /* Non-type template parameters are OK.  */
4450         ;
4451       else if (TREE_CODE (expr) != ADDR_EXPR
4452                && TREE_CODE (expr_type) != ARRAY_TYPE)
4453         {
4454           if (TREE_CODE (expr) == VAR_DECL)
4455             {
4456               error ("%qD is not a valid template argument "
4457                      "because %qD is a variable, not the address of "
4458                      "a variable",
4459                      expr, expr);
4460               return NULL_TREE;
4461             }
4462           /* Other values, like integer constants, might be valid
4463              non-type arguments of some other type.  */
4464           return error_mark_node;
4465         }
4466       else
4467         {
4468           tree decl;
4469
4470           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4471                   ? TREE_OPERAND (expr, 0) : expr);
4472           if (TREE_CODE (decl) != VAR_DECL)
4473             {
4474               error ("%qE is not a valid template argument of type %qT "
4475                      "because %qE is not a variable",
4476                      expr, type, decl);
4477               return NULL_TREE;
4478             }
4479           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4480             {
4481               error ("%qE is not a valid template argument of type %qT "
4482                      "because %qD does not have external linkage",
4483                      expr, type, decl);
4484               return NULL_TREE;
4485             }
4486         }
4487
4488       expr = decay_conversion (expr);
4489       if (expr == error_mark_node)
4490         return error_mark_node;
4491
4492       expr = perform_qualification_conversions (type, expr);
4493       if (expr == error_mark_node)
4494         return error_mark_node;
4495     }
4496   /* [temp.arg.nontype]/5, bullet 3
4497
4498      For a non-type template-parameter of type reference to object, no
4499      conversions apply. The type referred to by the reference may be more
4500      cv-qualified than the (otherwise identical) type of the
4501      template-argument. The template-parameter is bound directly to the
4502      template-argument, which must be an lvalue.  */
4503   else if (TYPE_REF_OBJ_P (type))
4504     {
4505       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4506                                                       expr_type))
4507         return error_mark_node;
4508
4509       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4510         {
4511           error ("%qE is not a valid template argument for type %qT "
4512                  "because of conflicts in cv-qualification", expr, type);
4513           return NULL_TREE;
4514         }
4515
4516       if (!real_lvalue_p (expr))
4517         {
4518           error ("%qE is not a valid template argument for type %qT "
4519                  "because it is not an lvalue", expr, type);
4520           return NULL_TREE;
4521         }
4522
4523       /* [temp.arg.nontype]/1
4524
4525          A template-argument for a non-type, non-template template-parameter
4526          shall be one of: [...]
4527
4528          -- the address of an object or function with external linkage.  */
4529       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4530         {
4531           error ("%qE is not a valid template argument for type %qT "
4532                  "because object %qD has not external linkage",
4533                  expr, type, expr);
4534           return NULL_TREE;
4535         }
4536
4537       expr = build_nop (type, build_address (expr));
4538     }
4539   /* [temp.arg.nontype]/5, bullet 4
4540
4541      For a non-type template-parameter of type pointer to function, only
4542      the function-to-pointer conversion (_conv.func_) is applied. If the
4543      template-argument represents a set of overloaded functions (or a
4544      pointer to such), the matching function is selected from the set
4545      (_over.over_).  */
4546   else if (TYPE_PTRFN_P (type))
4547     {
4548       /* If the argument is a template-id, we might not have enough
4549          context information to decay the pointer.  */
4550       if (!type_unknown_p (expr_type))
4551         {
4552           expr = decay_conversion (expr);
4553           if (expr == error_mark_node)
4554             return error_mark_node;
4555         }
4556
4557       expr = convert_nontype_argument_function (type, expr);
4558       if (!expr || expr == error_mark_node)
4559         return expr;
4560     }
4561   /* [temp.arg.nontype]/5, bullet 5
4562
4563      For a non-type template-parameter of type reference to function, no
4564      conversions apply. If the template-argument represents a set of
4565      overloaded functions, the matching function is selected from the set
4566      (_over.over_).  */
4567   else if (TYPE_REFFN_P (type))
4568     {
4569       if (TREE_CODE (expr) == ADDR_EXPR)
4570         {
4571           error ("%qE is not a valid template argument for type %qT "
4572                  "because it is a pointer", expr, type);
4573           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
4574           return NULL_TREE;
4575         }
4576
4577       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4578       if (!expr || expr == error_mark_node)
4579         return expr;
4580
4581       expr = build_nop (type, build_address (expr));
4582     }
4583   /* [temp.arg.nontype]/5, bullet 6
4584
4585      For a non-type template-parameter of type pointer to member function,
4586      no conversions apply. If the template-argument represents a set of
4587      overloaded member functions, the matching member function is selected
4588      from the set (_over.over_).  */
4589   else if (TYPE_PTRMEMFUNC_P (type))
4590     {
4591       expr = instantiate_type (type, expr, tf_none);
4592       if (expr == error_mark_node)
4593         return error_mark_node;
4594
4595       /* There is no way to disable standard conversions in
4596          resolve_address_of_overloaded_function (called by
4597          instantiate_type). It is possible that the call succeeded by
4598          converting &B::I to &D::I (where B is a base of D), so we need
4599          to reject this conversion here.
4600
4601          Actually, even if there was a way to disable standard conversions,
4602          it would still be better to reject them here so that we can
4603          provide a superior diagnostic.  */
4604       if (!same_type_p (TREE_TYPE (expr), type))
4605         {
4606           /* Make sure we are just one standard conversion off.  */
4607           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4608           error ("%qE is not a valid template argument for type %qT "
4609                  "because it is of type %qT", expr, type,
4610                  TREE_TYPE (expr));
4611           inform (input_location, "standard conversions are not allowed in this context");
4612           return NULL_TREE;
4613         }
4614     }
4615   /* [temp.arg.nontype]/5, bullet 7
4616
4617      For a non-type template-parameter of type pointer to data member,
4618      qualification conversions (_conv.qual_) are applied.  */
4619   else if (TYPE_PTRMEM_P (type))
4620     {
4621       expr = perform_qualification_conversions (type, expr);
4622       if (expr == error_mark_node)
4623         return expr;
4624     }
4625   /* A template non-type parameter must be one of the above.  */
4626   else
4627     gcc_unreachable ();
4628
4629   /* Sanity check: did we actually convert the argument to the
4630      right type?  */
4631   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4632   return expr;
4633 }
4634
4635 /* Subroutine of coerce_template_template_parms, which returns 1 if
4636    PARM_PARM and ARG_PARM match using the rule for the template
4637    parameters of template template parameters. Both PARM and ARG are
4638    template parameters; the rest of the arguments are the same as for
4639    coerce_template_template_parms.
4640  */
4641 static int
4642 coerce_template_template_parm (tree parm,
4643                               tree arg,
4644                               tsubst_flags_t complain,
4645                               tree in_decl,
4646                               tree outer_args)
4647 {
4648   if (arg == NULL_TREE || arg == error_mark_node
4649       || parm == NULL_TREE || parm == error_mark_node)
4650     return 0;
4651   
4652   if (TREE_CODE (arg) != TREE_CODE (parm))
4653     return 0;
4654   
4655   switch (TREE_CODE (parm))
4656     {
4657     case TEMPLATE_DECL:
4658       /* We encounter instantiations of templates like
4659          template <template <template <class> class> class TT>
4660          class C;  */
4661       {
4662         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4663         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4664         
4665         if (!coerce_template_template_parms
4666             (parmparm, argparm, complain, in_decl, outer_args))
4667           return 0;
4668       }
4669       /* Fall through.  */
4670       
4671     case TYPE_DECL:
4672       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
4673           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4674         /* Argument is a parameter pack but parameter is not.  */
4675         return 0;
4676       break;
4677       
4678     case PARM_DECL:
4679       /* The tsubst call is used to handle cases such as
4680          
4681            template <int> class C {};
4682            template <class T, template <T> class TT> class D {};
4683            D<int, C> d;
4684
4685          i.e. the parameter list of TT depends on earlier parameters.  */
4686       if (!dependent_type_p (TREE_TYPE (arg))
4687           && !same_type_p
4688                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4689                  TREE_TYPE (arg)))
4690         return 0;
4691       
4692       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
4693           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4694         /* Argument is a parameter pack but parameter is not.  */
4695         return 0;
4696       
4697       break;
4698
4699     default:
4700       gcc_unreachable ();
4701     }
4702
4703   return 1;
4704 }
4705
4706
4707 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4708    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4709    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4710    or PARM_DECL.
4711
4712    Consider the example:
4713      template <class T> class A;
4714      template<template <class U> class TT> class B;
4715
4716    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4717    the parameters to A, and OUTER_ARGS contains A.  */
4718
4719 static int
4720 coerce_template_template_parms (tree parm_parms,
4721                                 tree arg_parms,
4722                                 tsubst_flags_t complain,
4723                                 tree in_decl,
4724                                 tree outer_args)
4725 {
4726   int nparms, nargs, i;
4727   tree parm, arg;
4728   int variadic_p = 0;
4729
4730   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4731   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4732
4733   nparms = TREE_VEC_LENGTH (parm_parms);
4734   nargs = TREE_VEC_LENGTH (arg_parms);
4735
4736   /* Determine whether we have a parameter pack at the end of the
4737      template template parameter's template parameter list.  */
4738   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
4739     {
4740       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
4741       
4742       switch (TREE_CODE (parm))
4743         {
4744         case TEMPLATE_DECL:
4745         case TYPE_DECL:
4746           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4747             variadic_p = 1;
4748           break;
4749           
4750         case PARM_DECL:
4751           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4752             variadic_p = 1;
4753           break;
4754           
4755         default:
4756           gcc_unreachable ();
4757         }
4758     }
4759  
4760   if (nargs != nparms
4761       && !(variadic_p && nargs >= nparms - 1))
4762     return 0;
4763
4764   /* Check all of the template parameters except the parameter pack at
4765      the end (if any).  */
4766   for (i = 0; i < nparms - variadic_p; ++i)
4767     {
4768       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4769           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4770         continue;
4771
4772       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4773       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4774
4775       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4776                                           outer_args))
4777         return 0;
4778
4779     }
4780
4781   if (variadic_p)
4782     {
4783       /* Check each of the template parameters in the template
4784          argument against the template parameter pack at the end of
4785          the template template parameter.  */
4786       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
4787         return 0;
4788
4789       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4790
4791       for (; i < nargs; ++i)
4792         {
4793           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4794             continue;
4795  
4796           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4797  
4798           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4799                                               outer_args))
4800             return 0;
4801         }
4802     }
4803
4804   return 1;
4805 }
4806
4807 /* Verifies that the deduced template arguments (in TARGS) for the
4808    template template parameters (in TPARMS) represent valid bindings,
4809    by comparing the template parameter list of each template argument
4810    to the template parameter list of its corresponding template
4811    template parameter, in accordance with DR150. This
4812    routine can only be called after all template arguments have been
4813    deduced. It will return TRUE if all of the template template
4814    parameter bindings are okay, FALSE otherwise.  */
4815 bool 
4816 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4817 {
4818   int i, ntparms = TREE_VEC_LENGTH (tparms);
4819   bool ret = true;
4820
4821   /* We're dealing with template parms in this process.  */
4822   ++processing_template_decl;
4823
4824   targs = INNERMOST_TEMPLATE_ARGS (targs);
4825
4826   for (i = 0; i < ntparms; ++i)
4827     {
4828       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4829       tree targ = TREE_VEC_ELT (targs, i);
4830
4831       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4832         {
4833           tree packed_args = NULL_TREE;
4834           int idx, len = 1;
4835
4836           if (ARGUMENT_PACK_P (targ))
4837             {
4838               /* Look inside the argument pack.  */
4839               packed_args = ARGUMENT_PACK_ARGS (targ);
4840               len = TREE_VEC_LENGTH (packed_args);
4841             }
4842
4843           for (idx = 0; idx < len; ++idx)
4844             {
4845               tree targ_parms = NULL_TREE;
4846
4847               if (packed_args)
4848                 /* Extract the next argument from the argument
4849                    pack.  */
4850                 targ = TREE_VEC_ELT (packed_args, idx);
4851
4852               if (PACK_EXPANSION_P (targ))
4853                 /* Look at the pattern of the pack expansion.  */
4854                 targ = PACK_EXPANSION_PATTERN (targ);
4855
4856               /* Extract the template parameters from the template
4857                  argument.  */
4858               if (TREE_CODE (targ) == TEMPLATE_DECL)
4859                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4860               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4861                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4862
4863               /* Verify that we can coerce the template template
4864                  parameters from the template argument to the template
4865                  parameter.  This requires an exact match.  */
4866               if (targ_parms
4867                   && !coerce_template_template_parms
4868                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4869                         targ_parms,
4870                         tf_none,
4871                         tparm,
4872                         targs))
4873                 {
4874                   ret = false;
4875                   goto out;
4876                 }
4877             }
4878         }
4879     }
4880
4881  out:
4882
4883   --processing_template_decl;
4884   return ret;
4885 }
4886
4887 /* Convert the indicated template ARG as necessary to match the
4888    indicated template PARM.  Returns the converted ARG, or
4889    error_mark_node if the conversion was unsuccessful.  Error and
4890    warning messages are issued under control of COMPLAIN.  This
4891    conversion is for the Ith parameter in the parameter list.  ARGS is
4892    the full set of template arguments deduced so far.  */
4893
4894 static tree
4895 convert_template_argument (tree parm,
4896                            tree arg,
4897                            tree args,
4898                            tsubst_flags_t complain,
4899                            int i,
4900                            tree in_decl)
4901 {
4902   tree orig_arg;
4903   tree val;
4904   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4905
4906   if (TREE_CODE (arg) == TREE_LIST
4907       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4908     {
4909       /* The template argument was the name of some
4910          member function.  That's usually
4911          invalid, but static members are OK.  In any
4912          case, grab the underlying fields/functions
4913          and issue an error later if required.  */
4914       orig_arg = TREE_VALUE (arg);
4915       TREE_TYPE (arg) = unknown_type_node;
4916     }
4917
4918   orig_arg = arg;
4919
4920   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4921   requires_type = (TREE_CODE (parm) == TYPE_DECL
4922                    || requires_tmpl_type);
4923
4924   /* When determining whether an argument pack expansion is a template,
4925      look at the pattern.  */
4926   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4927     arg = PACK_EXPANSION_PATTERN (arg);
4928
4929   is_tmpl_type = 
4930     ((TREE_CODE (arg) == TEMPLATE_DECL
4931       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4932      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4933      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4934
4935   if (is_tmpl_type
4936       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4937           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4938     arg = TYPE_STUB_DECL (arg);
4939
4940   is_type = TYPE_P (arg) || is_tmpl_type;
4941
4942   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4943       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4944     {
4945       permerror (input_location, "to refer to a type member of a template parameter, "
4946                  "use %<typename %E%>", orig_arg);
4947
4948       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4949                                      TREE_OPERAND (arg, 1),
4950                                      typename_type,
4951                                      complain & tf_error);
4952       arg = orig_arg;
4953       is_type = 1;
4954     }
4955   if (is_type != requires_type)
4956     {
4957       if (in_decl)
4958         {
4959           if (complain & tf_error)
4960             {
4961               error ("type/value mismatch at argument %d in template "
4962                      "parameter list for %qD",
4963                      i + 1, in_decl);
4964               if (is_type)
4965                 error ("  expected a constant of type %qT, got %qT",
4966                        TREE_TYPE (parm),
4967                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4968               else if (requires_tmpl_type)
4969                 error ("  expected a class template, got %qE", orig_arg);
4970               else
4971                 error ("  expected a type, got %qE", orig_arg);
4972             }
4973         }
4974       return error_mark_node;
4975     }
4976   if (is_tmpl_type ^ requires_tmpl_type)
4977     {
4978       if (in_decl && (complain & tf_error))
4979         {
4980           error ("type/value mismatch at argument %d in template "
4981                  "parameter list for %qD",
4982                  i + 1, in_decl);
4983           if (is_tmpl_type)
4984             error ("  expected a type, got %qT", DECL_NAME (arg));
4985           else
4986             error ("  expected a class template, got %qT", orig_arg);
4987         }
4988       return error_mark_node;
4989     }
4990
4991   if (is_type)
4992     {
4993       if (requires_tmpl_type)
4994         {
4995           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4996             /* The number of argument required is not known yet.
4997                Just accept it for now.  */
4998             val = TREE_TYPE (arg);
4999           else
5000             {
5001               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5002               tree argparm;
5003
5004               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5005
5006               if (coerce_template_template_parms (parmparm, argparm,
5007                                                   complain, in_decl,
5008                                                   args))
5009                 {
5010                   val = orig_arg;
5011
5012                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5013                      TEMPLATE_DECL.  */
5014                   if (val != error_mark_node)
5015                     {
5016                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5017                         val = TREE_TYPE (val);
5018                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
5019                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
5020                         {
5021                           val = TREE_TYPE (arg);
5022                           val = make_pack_expansion (val);
5023                         }
5024                     }
5025                 }
5026               else
5027                 {
5028                   if (in_decl && (complain & tf_error))
5029                     {
5030                       error ("type/value mismatch at argument %d in "
5031                              "template parameter list for %qD",
5032                              i + 1, in_decl);
5033                       error ("  expected a template of type %qD, got %qD",
5034                              parm, orig_arg);
5035                     }
5036
5037                   val = error_mark_node;
5038                 }
5039             }
5040         }
5041       else
5042         val = orig_arg;
5043       /* We only form one instance of each template specialization.
5044          Therefore, if we use a non-canonical variant (i.e., a
5045          typedef), any future messages referring to the type will use
5046          the typedef, which is confusing if those future uses do not
5047          themselves also use the typedef.  */
5048       if (TYPE_P (val))
5049         val = canonical_type_variant (val);
5050     }
5051   else
5052     {
5053       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5054
5055       if (invalid_nontype_parm_type_p (t, complain))
5056         return error_mark_node;
5057
5058       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5059         /* We used to call digest_init here.  However, digest_init
5060            will report errors, which we don't want when complain
5061            is zero.  More importantly, digest_init will try too
5062            hard to convert things: for example, `0' should not be
5063            converted to pointer type at this point according to
5064            the standard.  Accepting this is not merely an
5065            extension, since deciding whether or not these
5066            conversions can occur is part of determining which
5067            function template to call, or whether a given explicit
5068            argument specification is valid.  */
5069         val = convert_nontype_argument (t, orig_arg);
5070       else
5071         val = orig_arg;
5072
5073       if (val == NULL_TREE)
5074         val = error_mark_node;
5075       else if (val == error_mark_node && (complain & tf_error))
5076         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5077     }
5078
5079   return val;
5080 }
5081
5082 /* Coerces the remaining template arguments in INNER_ARGS (from
5083    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5084    Returns the coerced argument pack. PARM_IDX is the position of this
5085    parameter in the template parameter list. ARGS is the original
5086    template argument list.  */
5087 static tree
5088 coerce_template_parameter_pack (tree parms,
5089                                 int parm_idx,
5090                                 tree args,
5091                                 tree inner_args,
5092                                 int arg_idx,
5093                                 tree new_args,
5094                                 int* lost,
5095                                 tree in_decl,
5096                                 tsubst_flags_t complain)
5097 {
5098   tree parm = TREE_VEC_ELT (parms, parm_idx);
5099   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5100   tree packed_args;
5101   tree argument_pack;
5102   tree packed_types = NULL_TREE;
5103
5104   if (arg_idx > nargs)
5105     arg_idx = nargs;
5106
5107   packed_args = make_tree_vec (nargs - arg_idx);
5108
5109   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5110       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5111     {
5112       /* When the template parameter is a non-type template
5113          parameter pack whose type uses parameter packs, we need
5114          to look at each of the template arguments
5115          separately. Build a vector of the types for these
5116          non-type template parameters in PACKED_TYPES.  */
5117       tree expansion 
5118         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5119       packed_types = tsubst_pack_expansion (expansion, args,
5120                                             complain, in_decl);
5121
5122       if (packed_types == error_mark_node)
5123         return error_mark_node;
5124
5125       /* Check that we have the right number of arguments.  */
5126       if (arg_idx < nargs
5127           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5128           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5129         {
5130           int needed_parms 
5131             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5132           error ("wrong number of template arguments (%d, should be %d)",
5133                  nargs, needed_parms);
5134           return error_mark_node;
5135         }
5136
5137       /* If we aren't able to check the actual arguments now
5138          (because they haven't been expanded yet), we can at least
5139          verify that all of the types used for the non-type
5140          template parameter pack are, in fact, valid for non-type
5141          template parameters.  */
5142       if (arg_idx < nargs 
5143           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5144         {
5145           int j, len = TREE_VEC_LENGTH (packed_types);
5146           for (j = 0; j < len; ++j)
5147             {
5148               tree t = TREE_VEC_ELT (packed_types, j);
5149               if (invalid_nontype_parm_type_p (t, complain))
5150                 return error_mark_node;
5151             }
5152         }
5153     }
5154
5155   /* Convert the remaining arguments, which will be a part of the
5156      parameter pack "parm".  */
5157   for (; arg_idx < nargs; ++arg_idx)
5158     {
5159       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5160       tree actual_parm = TREE_VALUE (parm);
5161
5162       if (packed_types && !PACK_EXPANSION_P (arg))
5163         {
5164           /* When we have a vector of types (corresponding to the
5165              non-type template parameter pack that uses parameter
5166              packs in its type, as mention above), and the
5167              argument is not an expansion (which expands to a
5168              currently unknown number of arguments), clone the
5169              parm and give it the next type in PACKED_TYPES.  */
5170           actual_parm = copy_node (actual_parm);
5171           TREE_TYPE (actual_parm) = 
5172             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5173         }
5174
5175       if (arg != error_mark_node)
5176         arg = convert_template_argument (actual_parm, 
5177                                          arg, new_args, complain, parm_idx,
5178                                          in_decl);
5179       if (arg == error_mark_node)
5180         (*lost)++;
5181       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5182     }
5183
5184   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5185       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5186     argument_pack = make_node (TYPE_ARGUMENT_PACK);
5187   else
5188     {
5189       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5190       TREE_TYPE (argument_pack) 
5191         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5192       TREE_CONSTANT (argument_pack) = 1;
5193     }
5194
5195   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5196   return argument_pack;
5197 }
5198
5199 /* Convert all template arguments to their appropriate types, and
5200    return a vector containing the innermost resulting template
5201    arguments.  If any error occurs, return error_mark_node. Error and
5202    warning messages are issued under control of COMPLAIN.
5203
5204    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5205    for arguments not specified in ARGS.  Otherwise, if
5206    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5207    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5208    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5209    ARGS.  */
5210
5211 static tree
5212 coerce_template_parms (tree parms,
5213                        tree args,
5214                        tree in_decl,
5215                        tsubst_flags_t complain,
5216                        bool require_all_args,
5217                        bool use_default_args)
5218 {
5219   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5220   tree inner_args;
5221   tree new_args;
5222   tree new_inner_args;
5223   bool saved_skip_evaluation;
5224
5225   /* When used as a boolean value, indicates whether this is a
5226      variadic template parameter list. Since it's an int, we can also
5227      subtract it from nparms to get the number of non-variadic
5228      parameters.  */
5229   int variadic_p = 0;
5230
5231   inner_args 
5232     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5233
5234   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5235   nparms = TREE_VEC_LENGTH (parms);
5236
5237   /* Determine if there are any parameter packs.  */
5238   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5239     {
5240       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5241       if (template_parameter_pack_p (tparm))
5242         {
5243           variadic_p = 1;
5244           break;
5245         }
5246     }
5247
5248   if ((nargs > nparms - variadic_p && !variadic_p)
5249       || (nargs < nparms - variadic_p
5250           && require_all_args
5251           && (!use_default_args
5252               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5253                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5254     {
5255       if (complain & tf_error)
5256         {
5257           const char *or_more = "";
5258           if (variadic_p)
5259             {
5260               or_more = " or more";
5261               --nparms;
5262             }
5263
5264           error ("wrong number of template arguments (%d, should be %d%s)",
5265                  nargs, nparms, or_more);
5266
5267           if (in_decl)
5268             error ("provided for %q+D", in_decl);
5269         }
5270
5271       return error_mark_node;
5272     }
5273
5274   /* We need to evaluate the template arguments, even though this
5275      template-id may be nested within a "sizeof".  */
5276   saved_skip_evaluation = skip_evaluation;
5277   skip_evaluation = false;
5278   new_inner_args = make_tree_vec (nparms);
5279   new_args = add_outermost_template_args (args, new_inner_args);
5280   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5281     {
5282       tree arg;
5283       tree parm;
5284
5285       /* Get the Ith template parameter.  */
5286       parm = TREE_VEC_ELT (parms, parm_idx);
5287  
5288       if (parm == error_mark_node)
5289       {
5290         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5291         continue;
5292       }
5293
5294       /* Calculate the next argument.  */
5295       if (template_parameter_pack_p (TREE_VALUE (parm)))
5296         {
5297           /* All remaining arguments will be placed in the
5298              template parameter pack PARM.  */
5299           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5300                                                 inner_args, arg_idx,
5301                                                 new_args, &lost,
5302                                                 in_decl, complain);
5303           
5304           /* Store this argument.  */
5305           if (arg == error_mark_node)
5306             lost++;
5307           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5308
5309           /* We are done with all of the arguments.  */
5310           arg_idx = nargs;
5311
5312           continue;
5313         }
5314       else if (arg_idx < nargs)
5315         {
5316           arg = TREE_VEC_ELT (inner_args, arg_idx);
5317
5318           if (arg && PACK_EXPANSION_P (arg))
5319             {
5320               if (complain & tf_error)
5321                 {
5322                   /* If ARG is a pack expansion, but PARM is not a
5323                      template parameter pack (if it were, we would have
5324                      handled it above), we're trying to expand into a
5325                      fixed-length argument list.  */
5326                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5327                     error ("cannot expand %<%E%> into a fixed-length "
5328                            "argument list", arg);
5329                   else
5330                     error ("cannot expand %<%T%> into a fixed-length "
5331                            "argument list", arg);
5332                 }
5333               return error_mark_node;
5334             }
5335         }
5336       else if (require_all_args)
5337         /* There must be a default arg in this case.  */
5338         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5339                                    complain, in_decl);
5340       else
5341         break;
5342
5343       if (arg == error_mark_node)
5344         {
5345           if (complain & tf_error)
5346             error ("template argument %d is invalid", arg_idx + 1);
5347         }
5348       else if (!arg)
5349         /* This only occurs if there was an error in the template
5350            parameter list itself (which we would already have
5351            reported) that we are trying to recover from, e.g., a class
5352            template with a parameter list such as
5353            template<typename..., typename>.  */
5354         return error_mark_node;
5355       else
5356         arg = convert_template_argument (TREE_VALUE (parm),
5357                                          arg, new_args, complain, 
5358                                          parm_idx, in_decl);
5359
5360       if (arg == error_mark_node)
5361         lost++;
5362       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5363     }
5364   skip_evaluation = saved_skip_evaluation;
5365
5366   if (lost)
5367     return error_mark_node;
5368
5369   return new_inner_args;
5370 }
5371
5372 /* Returns 1 if template args OT and NT are equivalent.  */
5373
5374 static int
5375 template_args_equal (tree ot, tree nt)
5376 {
5377   if (nt == ot)
5378     return 1;
5379
5380   if (TREE_CODE (nt) == TREE_VEC)
5381     /* For member templates */
5382     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5383   else if (PACK_EXPANSION_P (ot))
5384     return PACK_EXPANSION_P (nt) 
5385       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5386                               PACK_EXPANSION_PATTERN (nt));
5387   else if (TYPE_P (nt))
5388     return TYPE_P (ot) && same_type_p (ot, nt);
5389   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5390     return 0;
5391   else
5392     return cp_tree_equal (ot, nt);
5393 }
5394
5395 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5396    of template arguments.  Returns 0 otherwise.  */
5397
5398 int
5399 comp_template_args (tree oldargs, tree newargs)
5400 {
5401   int i;
5402
5403   oldargs = expand_template_argument_pack (oldargs);
5404   newargs = expand_template_argument_pack (newargs);
5405
5406   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5407     return 0;
5408
5409   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5410     {
5411       tree nt = TREE_VEC_ELT (newargs, i);
5412       tree ot = TREE_VEC_ELT (oldargs, i);
5413
5414       if (! template_args_equal (ot, nt))
5415         return 0;
5416     }
5417   return 1;
5418 }
5419
5420 static void
5421 add_pending_template (tree d)
5422 {
5423   tree ti = (TYPE_P (d)
5424              ? CLASSTYPE_TEMPLATE_INFO (d)
5425              : DECL_TEMPLATE_INFO (d));
5426   struct pending_template *pt;
5427   int level;
5428
5429   if (TI_PENDING_TEMPLATE_FLAG (ti))
5430     return;
5431
5432   /* We are called both from instantiate_decl, where we've already had a
5433      tinst_level pushed, and instantiate_template, where we haven't.
5434      Compensate.  */
5435   level = !current_tinst_level || current_tinst_level->decl != d;
5436
5437   if (level)
5438     push_tinst_level (d);
5439
5440   pt = GGC_NEW (struct pending_template);
5441   pt->next = NULL;
5442   pt->tinst = current_tinst_level;
5443   if (last_pending_template)
5444     last_pending_template->next = pt;
5445   else
5446     pending_templates = pt;
5447
5448   last_pending_template = pt;
5449
5450   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5451
5452   if (level)
5453     pop_tinst_level ();
5454 }
5455
5456
5457 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5458    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5459    documentation for TEMPLATE_ID_EXPR.  */
5460
5461 tree
5462 lookup_template_function (tree fns, tree arglist)
5463 {
5464   tree type;
5465
5466   if (fns == error_mark_node || arglist == error_mark_node)
5467     return error_mark_node;
5468
5469   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5470   gcc_assert (fns && (is_overloaded_fn (fns)
5471                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5472
5473   if (BASELINK_P (fns))
5474     {
5475       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5476                                          unknown_type_node,
5477                                          BASELINK_FUNCTIONS (fns),
5478                                          arglist);
5479       return fns;
5480     }
5481
5482   type = TREE_TYPE (fns);
5483   if (TREE_CODE (fns) == OVERLOAD || !type)
5484     type = unknown_type_node;
5485
5486   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5487 }
5488
5489 /* Within the scope of a template class S<T>, the name S gets bound
5490    (in build_self_reference) to a TYPE_DECL for the class, not a
5491    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5492    or one of its enclosing classes, and that type is a template,
5493    return the associated TEMPLATE_DECL.  Otherwise, the original
5494    DECL is returned.  */
5495
5496 tree
5497 maybe_get_template_decl_from_type_decl (tree decl)
5498 {
5499   return (decl != NULL_TREE
5500           && TREE_CODE (decl) == TYPE_DECL
5501           && DECL_ARTIFICIAL (decl)
5502           && CLASS_TYPE_P (TREE_TYPE (decl))
5503           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5504     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5505 }
5506
5507 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5508    parameters, find the desired type.
5509
5510    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5511
5512    IN_DECL, if non-NULL, is the template declaration we are trying to
5513    instantiate.
5514
5515    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5516    the class we are looking up.
5517
5518    Issue error and warning messages under control of COMPLAIN.
5519
5520    If the template class is really a local class in a template
5521    function, then the FUNCTION_CONTEXT is the function in which it is
5522    being instantiated.
5523
5524    ??? Note that this function is currently called *twice* for each
5525    template-id: the first time from the parser, while creating the
5526    incomplete type (finish_template_type), and the second type during the
5527    real instantiation (instantiate_template_class). This is surely something
5528    that we want to avoid. It also causes some problems with argument
5529    coercion (see convert_nontype_argument for more information on this).  */
5530
5531 tree
5532 lookup_template_class (tree d1,
5533                        tree arglist,
5534                        tree in_decl,
5535                        tree context,
5536                        int entering_scope,
5537                        tsubst_flags_t complain)
5538 {
5539   tree templ = NULL_TREE, parmlist;
5540   tree t;
5541
5542   timevar_push (TV_NAME_LOOKUP);
5543
5544   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5545     {
5546       tree value = innermost_non_namespace_value (d1);
5547       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5548         templ = value;
5549       else
5550         {
5551           if (context)
5552             push_decl_namespace (context);
5553           templ = lookup_name (d1);
5554           templ = maybe_get_template_decl_from_type_decl (templ);
5555           if (context)
5556             pop_decl_namespace ();
5557         }
5558       if (templ)
5559         context = DECL_CONTEXT (templ);
5560     }
5561   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
5562     {
5563       tree type = TREE_TYPE (d1);
5564
5565       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5566          an implicit typename for the second A.  Deal with it.  */
5567       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5568         type = TREE_TYPE (type);
5569
5570       if (CLASSTYPE_TEMPLATE_INFO (type))
5571         {
5572           templ = CLASSTYPE_TI_TEMPLATE (type);
5573           d1 = DECL_NAME (templ);
5574         }
5575     }
5576   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5577            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
5578     {
5579       templ = TYPE_TI_TEMPLATE (d1);
5580       d1 = DECL_NAME (templ);
5581     }
5582   else if (TREE_CODE (d1) == TEMPLATE_DECL
5583            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5584     {
5585       templ = d1;
5586       d1 = DECL_NAME (templ);
5587       context = DECL_CONTEXT (templ);
5588     }
5589
5590   /* Issue an error message if we didn't find a template.  */
5591   if (! templ)
5592     {
5593       if (complain & tf_error)
5594         error ("%qT is not a template", d1);
5595       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5596     }
5597
5598   if (TREE_CODE (templ) != TEMPLATE_DECL
5599          /* Make sure it's a user visible template, if it was named by
5600             the user.  */
5601       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
5602           && !PRIMARY_TEMPLATE_P (templ)))
5603     {
5604       if (complain & tf_error)
5605         {
5606           error ("non-template type %qT used as a template", d1);
5607           if (in_decl)
5608             error ("for template declaration %q+D", in_decl);
5609         }
5610       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5611     }
5612
5613   complain &= ~tf_user;
5614
5615   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
5616     {
5617       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5618          template arguments */
5619
5620       tree parm;
5621       tree arglist2;
5622       tree outer;
5623
5624       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
5625
5626       /* Consider an example where a template template parameter declared as
5627
5628            template <class T, class U = std::allocator<T> > class TT
5629
5630          The template parameter level of T and U are one level larger than
5631          of TT.  To proper process the default argument of U, say when an
5632          instantiation `TT<int>' is seen, we need to build the full
5633          arguments containing {int} as the innermost level.  Outer levels,
5634          available when not appearing as default template argument, can be
5635          obtained from the arguments of the enclosing template.
5636
5637          Suppose that TT is later substituted with std::vector.  The above
5638          instantiation is `TT<int, std::allocator<T> >' with TT at
5639          level 1, and T at level 2, while the template arguments at level 1
5640          becomes {std::vector} and the inner level 2 is {int}.  */
5641
5642       outer = DECL_CONTEXT (templ);
5643       if (outer)
5644         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5645       else if (current_template_parms)
5646         /* This is an argument of the current template, so we haven't set
5647            DECL_CONTEXT yet.  */
5648         outer = current_template_args ();
5649
5650       if (outer)
5651         arglist = add_to_template_args (outer, arglist);
5652
5653       arglist2 = coerce_template_parms (parmlist, arglist, templ,
5654                                         complain,
5655                                         /*require_all_args=*/true,
5656                                         /*use_default_args=*/true);
5657       if (arglist2 == error_mark_node
5658           || (!uses_template_parms (arglist2)
5659               && check_instantiated_args (templ, arglist2, complain)))
5660         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5661
5662       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
5663       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5664     }
5665   else
5666     {
5667       tree template_type = TREE_TYPE (templ);
5668       tree gen_tmpl;
5669       tree type_decl;
5670       tree found = NULL_TREE;
5671       int arg_depth;
5672       int parm_depth;
5673       int is_partial_instantiation;
5674
5675       gen_tmpl = most_general_template (templ);
5676       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5677       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5678       arg_depth = TMPL_ARGS_DEPTH (arglist);
5679
5680       if (arg_depth == 1 && parm_depth > 1)
5681         {
5682           /* We've been given an incomplete set of template arguments.
5683              For example, given:
5684
5685                template <class T> struct S1 {
5686                  template <class U> struct S2 {};
5687                  template <class U> struct S2<U*> {};
5688                 };
5689
5690              we will be called with an ARGLIST of `U*', but the
5691              TEMPLATE will be `template <class T> template
5692              <class U> struct S1<T>::S2'.  We must fill in the missing
5693              arguments.  */
5694           arglist
5695             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
5696                                            arglist);
5697           arg_depth = TMPL_ARGS_DEPTH (arglist);
5698         }
5699
5700       /* Now we should have enough arguments.  */
5701       gcc_assert (parm_depth == arg_depth);
5702
5703       /* From here on, we're only interested in the most general
5704          template.  */
5705       templ = gen_tmpl;
5706
5707       /* Calculate the BOUND_ARGS.  These will be the args that are
5708          actually tsubst'd into the definition to create the
5709          instantiation.  */
5710       if (parm_depth > 1)
5711         {
5712           /* We have multiple levels of arguments to coerce, at once.  */
5713           int i;
5714           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5715
5716           tree bound_args = make_tree_vec (parm_depth);
5717
5718           for (i = saved_depth,
5719                  t = DECL_TEMPLATE_PARMS (templ);
5720                i > 0 && t != NULL_TREE;
5721                --i, t = TREE_CHAIN (t))
5722             {
5723               tree a = coerce_template_parms (TREE_VALUE (t),
5724                                               arglist, templ,
5725                                               complain,
5726                                               /*require_all_args=*/true,
5727                                               /*use_default_args=*/true);
5728
5729               /* Don't process further if one of the levels fails.  */
5730               if (a == error_mark_node)
5731                 {
5732                   /* Restore the ARGLIST to its full size.  */
5733                   TREE_VEC_LENGTH (arglist) = saved_depth;
5734                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5735                 }
5736
5737               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5738
5739               /* We temporarily reduce the length of the ARGLIST so
5740                  that coerce_template_parms will see only the arguments
5741                  corresponding to the template parameters it is
5742                  examining.  */
5743               TREE_VEC_LENGTH (arglist)--;
5744             }
5745
5746           /* Restore the ARGLIST to its full size.  */
5747           TREE_VEC_LENGTH (arglist) = saved_depth;
5748
5749           arglist = bound_args;
5750         }
5751       else
5752         arglist
5753           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5754                                    INNERMOST_TEMPLATE_ARGS (arglist),
5755                                    templ,
5756                                    complain,
5757                                    /*require_all_args=*/true,
5758                                    /*use_default_args=*/true);
5759
5760       if (arglist == error_mark_node)
5761         /* We were unable to bind the arguments.  */
5762         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5763
5764       /* In the scope of a template class, explicit references to the
5765          template class refer to the type of the template, not any
5766          instantiation of it.  For example, in:
5767
5768            template <class T> class C { void f(C<T>); }
5769
5770          the `C<T>' is just the same as `C'.  Outside of the
5771          class, however, such a reference is an instantiation.  */
5772       if (comp_template_args (TYPE_TI_ARGS (template_type),
5773                               arglist))
5774         {
5775           found = template_type;
5776
5777           if (!entering_scope && PRIMARY_TEMPLATE_P (templ))
5778             {
5779               tree ctx;
5780
5781               for (ctx = current_class_type;
5782                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5783                    ctx = (TYPE_P (ctx)
5784                           ? TYPE_CONTEXT (ctx)
5785                           : DECL_CONTEXT (ctx)))
5786                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5787                   goto found_ctx;
5788
5789               /* We're not in the scope of the class, so the
5790                  TEMPLATE_TYPE is not the type we want after all.  */
5791               found = NULL_TREE;
5792             found_ctx:;
5793             }
5794         }
5795       if (found)
5796         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5797
5798       /* If we already have this specialization, return it.  */
5799       found = retrieve_specialization (templ, arglist,
5800                                        /*class_specializations_p=*/false);
5801       if (found)
5802         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5803
5804       /* This type is a "partial instantiation" if any of the template
5805          arguments still involve template parameters.  Note that we set
5806          IS_PARTIAL_INSTANTIATION for partial specializations as
5807          well.  */
5808       is_partial_instantiation = uses_template_parms (arglist);
5809
5810       /* If the deduced arguments are invalid, then the binding
5811          failed.  */
5812       if (!is_partial_instantiation
5813           && check_instantiated_args (templ,
5814                                       INNERMOST_TEMPLATE_ARGS (arglist),
5815                                       complain))
5816         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5817
5818       if (!is_partial_instantiation
5819           && !PRIMARY_TEMPLATE_P (templ)
5820           && TREE_CODE (CP_DECL_CONTEXT (templ)) == NAMESPACE_DECL)
5821         {
5822           found = xref_tag_from_type (TREE_TYPE (templ),
5823                                       DECL_NAME (templ),
5824                                       /*tag_scope=*/ts_global);
5825           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5826         }
5827
5828       context = tsubst (DECL_CONTEXT (templ), arglist,
5829                         complain, in_decl);
5830       if (!context)
5831         context = global_namespace;
5832
5833       /* Create the type.  */
5834       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5835         {
5836           if (!is_partial_instantiation)
5837             {
5838               set_current_access_from_decl (TYPE_NAME (template_type));
5839               t = start_enum (TYPE_IDENTIFIER (template_type),
5840                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
5841                                       arglist, complain, in_decl),
5842                               SCOPED_ENUM_P (template_type));
5843             }
5844           else
5845             {
5846               /* We don't want to call start_enum for this type, since
5847                  the values for the enumeration constants may involve
5848                  template parameters.  And, no one should be interested
5849                  in the enumeration constants for such a type.  */
5850               t = make_node (ENUMERAL_TYPE);
5851               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
5852             }
5853         }
5854       else
5855         {
5856           t = make_class_type (TREE_CODE (template_type));
5857           CLASSTYPE_DECLARED_CLASS (t)
5858             = CLASSTYPE_DECLARED_CLASS (template_type);
5859           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5860           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5861
5862           /* A local class.  Make sure the decl gets registered properly.  */
5863           if (context == current_function_decl)
5864             pushtag (DECL_NAME (templ), t, /*tag_scope=*/ts_current);
5865
5866           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5867             /* This instantiation is another name for the primary
5868                template type. Set the TYPE_CANONICAL field
5869                appropriately. */
5870             TYPE_CANONICAL (t) = template_type;
5871           else if (any_template_arguments_need_structural_equality_p (arglist))
5872             /* Some of the template arguments require structural
5873                equality testing, so this template class requires
5874                structural equality testing. */
5875             SET_TYPE_STRUCTURAL_EQUALITY (t);
5876         }
5877
5878       /* If we called start_enum or pushtag above, this information
5879          will already be set up.  */
5880       if (!TYPE_NAME (t))
5881         {
5882           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5883
5884           type_decl = create_implicit_typedef (DECL_NAME (templ), t);
5885           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5886           TYPE_STUB_DECL (t) = type_decl;
5887           DECL_SOURCE_LOCATION (type_decl)
5888             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5889         }
5890       else
5891         type_decl = TYPE_NAME (t);
5892
5893       TREE_PRIVATE (type_decl)
5894         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5895       TREE_PROTECTED (type_decl)
5896         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5897       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5898         {
5899           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5900           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5901         }
5902
5903       /* Set up the template information.  We have to figure out which
5904          template is the immediate parent if this is a full
5905          instantiation.  */
5906       if (parm_depth == 1 || is_partial_instantiation
5907           || !PRIMARY_TEMPLATE_P (templ))
5908         /* This case is easy; there are no member templates involved.  */
5909         found = templ;
5910       else
5911         {
5912           /* This is a full instantiation of a member template.  Look
5913              for a partial instantiation of which this is an instance.  */
5914
5915           for (found = DECL_TEMPLATE_INSTANTIATIONS (templ);
5916                found; found = TREE_CHAIN (found))
5917             {
5918               int success;
5919               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5920
5921               /* We only want partial instantiations, here, not
5922                  specializations or full instantiations.  */
5923               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5924                   || !uses_template_parms (TREE_VALUE (found)))
5925                 continue;
5926
5927               /* Temporarily reduce by one the number of levels in the
5928                  ARGLIST and in FOUND so as to avoid comparing the
5929                  last set of arguments.  */
5930               TREE_VEC_LENGTH (arglist)--;
5931               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5932
5933               /* See if the arguments match.  If they do, then TMPL is
5934                  the partial instantiation we want.  */
5935               success = comp_template_args (TREE_PURPOSE (found), arglist);
5936
5937               /* Restore the argument vectors to their full size.  */
5938               TREE_VEC_LENGTH (arglist)++;
5939               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5940
5941               if (success)
5942                 {
5943                   found = tmpl;
5944                   break;
5945                 }
5946             }
5947
5948           if (!found)
5949             {
5950               /* There was no partial instantiation. This happens
5951                  where C<T> is a member template of A<T> and it's used
5952                  in something like
5953
5954                   template <typename T> struct B { A<T>::C<int> m; };
5955                   B<float>;
5956
5957                  Create the partial instantiation.
5958                */
5959               TREE_VEC_LENGTH (arglist)--;
5960               found = tsubst (templ, arglist, complain, NULL_TREE);
5961               TREE_VEC_LENGTH (arglist)++;
5962             }
5963         }
5964
5965       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5966       DECL_TEMPLATE_INSTANTIATIONS (templ)
5967         = tree_cons (arglist, t,
5968                      DECL_TEMPLATE_INSTANTIATIONS (templ));
5969
5970       if (TREE_CODE (t) == ENUMERAL_TYPE
5971           && !is_partial_instantiation)
5972         /* Now that the type has been registered on the instantiations
5973            list, we set up the enumerators.  Because the enumeration
5974            constants may involve the enumeration type itself, we make
5975            sure to register the type first, and then create the
5976            constants.  That way, doing tsubst_expr for the enumeration
5977            constants won't result in recursive calls here; we'll find
5978            the instantiation and exit above.  */
5979         tsubst_enum (template_type, t, arglist);
5980
5981       if (is_partial_instantiation)
5982         /* If the type makes use of template parameters, the
5983            code that generates debugging information will crash.  */
5984         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5985
5986       /* Possibly limit visibility based on template args.  */
5987       TREE_PUBLIC (type_decl) = 1;
5988       determine_visibility (type_decl);
5989
5990       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5991     }
5992   timevar_pop (TV_NAME_LOOKUP);
5993 }
5994 \f
5995 struct pair_fn_data
5996 {
5997   tree_fn_t fn;
5998   void *data;
5999   /* True when we should also visit template parameters that occur in
6000      non-deduced contexts.  */
6001   bool include_nondeduced_p;
6002   struct pointer_set_t *visited;
6003 };
6004
6005 /* Called from for_each_template_parm via walk_tree.  */
6006
6007 static tree
6008 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6009 {
6010   tree t = *tp;
6011   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6012   tree_fn_t fn = pfd->fn;
6013   void *data = pfd->data;
6014
6015   if (TYPE_P (t)
6016       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6017       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6018                                  pfd->include_nondeduced_p))
6019     return error_mark_node;
6020
6021   switch (TREE_CODE (t))
6022     {
6023     case RECORD_TYPE:
6024       if (TYPE_PTRMEMFUNC_P (t))
6025         break;
6026       /* Fall through.  */
6027
6028     case UNION_TYPE:
6029     case ENUMERAL_TYPE:
6030       if (!TYPE_TEMPLATE_INFO (t))
6031         *walk_subtrees = 0;
6032       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
6033                                        fn, data, pfd->visited, 
6034                                        pfd->include_nondeduced_p))
6035         return error_mark_node;
6036       break;
6037
6038     case INTEGER_TYPE:
6039       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6040                                   fn, data, pfd->visited, 
6041                                   pfd->include_nondeduced_p)
6042           || for_each_template_parm (TYPE_MAX_VALUE (t),
6043                                      fn, data, pfd->visited,
6044                                      pfd->include_nondeduced_p))
6045         return error_mark_node;
6046       break;
6047
6048     case METHOD_TYPE:
6049       /* Since we're not going to walk subtrees, we have to do this
6050          explicitly here.  */
6051       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6052                                   pfd->visited, pfd->include_nondeduced_p))
6053         return error_mark_node;
6054       /* Fall through.  */
6055
6056     case FUNCTION_TYPE:
6057       /* Check the return type.  */
6058       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6059                                   pfd->include_nondeduced_p))
6060         return error_mark_node;
6061
6062       /* Check the parameter types.  Since default arguments are not
6063          instantiated until they are needed, the TYPE_ARG_TYPES may
6064          contain expressions that involve template parameters.  But,
6065          no-one should be looking at them yet.  And, once they're
6066          instantiated, they don't contain template parameters, so
6067          there's no point in looking at them then, either.  */
6068       {
6069         tree parm;
6070
6071         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6072           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6073                                       pfd->visited, pfd->include_nondeduced_p))
6074             return error_mark_node;
6075
6076         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6077            want walk_tree walking into them itself.  */
6078         *walk_subtrees = 0;
6079       }
6080       break;
6081
6082     case TYPEOF_TYPE:
6083       if (pfd->include_nondeduced_p
6084           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6085                                      pfd->visited, 
6086                                      pfd->include_nondeduced_p))
6087         return error_mark_node;
6088       break;
6089
6090     case FUNCTION_DECL:
6091     case VAR_DECL:
6092       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6093           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6094                                      pfd->visited, pfd->include_nondeduced_p))
6095         return error_mark_node;
6096       /* Fall through.  */
6097
6098     case PARM_DECL:
6099     case CONST_DECL:
6100       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6101           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6102                                      pfd->visited, pfd->include_nondeduced_p))
6103         return error_mark_node;
6104       if (DECL_CONTEXT (t)
6105           && pfd->include_nondeduced_p
6106           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6107                                      pfd->visited, pfd->include_nondeduced_p))
6108         return error_mark_node;
6109       break;
6110
6111     case BOUND_TEMPLATE_TEMPLATE_PARM:
6112       /* Record template parameters such as `T' inside `TT<T>'.  */
6113       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6114                                   pfd->include_nondeduced_p))
6115         return error_mark_node;
6116       /* Fall through.  */
6117
6118     case TEMPLATE_TEMPLATE_PARM:
6119     case TEMPLATE_TYPE_PARM:
6120     case TEMPLATE_PARM_INDEX:
6121       if (fn && (*fn)(t, data))
6122         return error_mark_node;
6123       else if (!fn)
6124         return error_mark_node;
6125       break;
6126
6127     case TEMPLATE_DECL:
6128       /* A template template parameter is encountered.  */
6129       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6130           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6131                                      pfd->include_nondeduced_p))
6132         return error_mark_node;
6133
6134       /* Already substituted template template parameter */
6135       *walk_subtrees = 0;
6136       break;
6137
6138     case TYPENAME_TYPE:
6139       if (!fn
6140           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6141                                      data, pfd->visited, 
6142                                      pfd->include_nondeduced_p))
6143         return error_mark_node;
6144       break;
6145
6146     case CONSTRUCTOR:
6147       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6148           && pfd->include_nondeduced_p
6149           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6150                                      (TREE_TYPE (t)), fn, data,
6151                                      pfd->visited, pfd->include_nondeduced_p))
6152         return error_mark_node;
6153       break;
6154
6155     case INDIRECT_REF:
6156     case COMPONENT_REF:
6157       /* If there's no type, then this thing must be some expression
6158          involving template parameters.  */
6159       if (!fn && !TREE_TYPE (t))
6160         return error_mark_node;
6161       break;
6162
6163     case MODOP_EXPR:
6164     case CAST_EXPR:
6165     case REINTERPRET_CAST_EXPR:
6166     case CONST_CAST_EXPR:
6167     case STATIC_CAST_EXPR:
6168     case DYNAMIC_CAST_EXPR:
6169     case ARROW_EXPR:
6170     case DOTSTAR_EXPR:
6171     case TYPEID_EXPR:
6172     case PSEUDO_DTOR_EXPR:
6173       if (!fn)
6174         return error_mark_node;
6175       break;
6176
6177     default:
6178       break;
6179     }
6180
6181   /* We didn't find any template parameters we liked.  */
6182   return NULL_TREE;
6183 }
6184
6185 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6186    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6187    call FN with the parameter and the DATA.
6188    If FN returns nonzero, the iteration is terminated, and
6189    for_each_template_parm returns 1.  Otherwise, the iteration
6190    continues.  If FN never returns a nonzero value, the value
6191    returned by for_each_template_parm is 0.  If FN is NULL, it is
6192    considered to be the function which always returns 1.
6193
6194    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6195    parameters that occur in non-deduced contexts.  When false, only
6196    visits those template parameters that can be deduced.  */
6197
6198 static int
6199 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6200                         struct pointer_set_t *visited,
6201                         bool include_nondeduced_p)
6202 {
6203   struct pair_fn_data pfd;
6204   int result;
6205
6206   /* Set up.  */
6207   pfd.fn = fn;
6208   pfd.data = data;
6209   pfd.include_nondeduced_p = include_nondeduced_p;
6210
6211   /* Walk the tree.  (Conceptually, we would like to walk without
6212      duplicates, but for_each_template_parm_r recursively calls
6213      for_each_template_parm, so we would need to reorganize a fair
6214      bit to use walk_tree_without_duplicates, so we keep our own
6215      visited list.)  */
6216   if (visited)
6217     pfd.visited = visited;
6218   else
6219     pfd.visited = pointer_set_create ();
6220   result = cp_walk_tree (&t,
6221                          for_each_template_parm_r,
6222                          &pfd,
6223                          pfd.visited) != NULL_TREE;
6224
6225   /* Clean up.  */
6226   if (!visited)
6227     {
6228       pointer_set_destroy (pfd.visited);
6229       pfd.visited = 0;
6230     }
6231
6232   return result;
6233 }
6234
6235 /* Returns true if T depends on any template parameter.  */
6236
6237 int
6238 uses_template_parms (tree t)
6239 {
6240   bool dependent_p;
6241   int saved_processing_template_decl;
6242
6243   saved_processing_template_decl = processing_template_decl;
6244   if (!saved_processing_template_decl)
6245     processing_template_decl = 1;
6246   if (TYPE_P (t))
6247     dependent_p = dependent_type_p (t);
6248   else if (TREE_CODE (t) == TREE_VEC)
6249     dependent_p = any_dependent_template_arguments_p (t);
6250   else if (TREE_CODE (t) == TREE_LIST)
6251     dependent_p = (uses_template_parms (TREE_VALUE (t))
6252                    || uses_template_parms (TREE_CHAIN (t)));
6253   else if (TREE_CODE (t) == TYPE_DECL)
6254     dependent_p = dependent_type_p (TREE_TYPE (t));
6255   else if (DECL_P (t)
6256            || EXPR_P (t)
6257            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6258            || TREE_CODE (t) == OVERLOAD
6259            || TREE_CODE (t) == BASELINK
6260            || TREE_CODE (t) == IDENTIFIER_NODE
6261            || TREE_CODE (t) == TRAIT_EXPR
6262            || CONSTANT_CLASS_P (t))
6263     dependent_p = (type_dependent_expression_p (t)
6264                    || value_dependent_expression_p (t));
6265   else
6266     {
6267       gcc_assert (t == error_mark_node);
6268       dependent_p = false;
6269     }
6270
6271   processing_template_decl = saved_processing_template_decl;
6272
6273   return dependent_p;
6274 }
6275
6276 /* Returns true if T depends on any template parameter with level LEVEL.  */
6277
6278 int
6279 uses_template_parms_level (tree t, int level)
6280 {
6281   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6282                                  /*include_nondeduced_p=*/true);
6283 }
6284
6285 static int tinst_depth;
6286 extern int max_tinst_depth;
6287 #ifdef GATHER_STATISTICS
6288 int depth_reached;
6289 #endif
6290 static int tinst_level_tick;
6291 static int last_template_error_tick;
6292
6293 /* We're starting to instantiate D; record the template instantiation context
6294    for diagnostics and to restore it later.  */
6295
6296 static int
6297 push_tinst_level (tree d)
6298 {
6299   struct tinst_level *new_level;
6300
6301   if (tinst_depth >= max_tinst_depth)
6302     {
6303       /* If the instantiation in question still has unbound template parms,
6304          we don't really care if we can't instantiate it, so just return.
6305          This happens with base instantiation for implicit `typename'.  */
6306       if (uses_template_parms (d))
6307         return 0;
6308
6309       last_template_error_tick = tinst_level_tick;
6310       error ("template instantiation depth exceeds maximum of %d (use "
6311              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6312              max_tinst_depth, d);
6313
6314       print_instantiation_context ();
6315
6316       return 0;
6317     }
6318
6319   new_level = GGC_NEW (struct tinst_level);
6320   new_level->decl = d;
6321   new_level->locus = input_location;
6322   new_level->in_system_header_p = in_system_header;
6323   new_level->next = current_tinst_level;
6324   current_tinst_level = new_level;
6325
6326   ++tinst_depth;
6327 #ifdef GATHER_STATISTICS
6328   if (tinst_depth > depth_reached)
6329     depth_reached = tinst_depth;
6330 #endif
6331
6332   ++tinst_level_tick;
6333   return 1;
6334 }
6335
6336 /* We're done instantiating this template; return to the instantiation
6337    context.  */
6338
6339 static void
6340 pop_tinst_level (void)
6341 {
6342   /* Restore the filename and line number stashed away when we started
6343      this instantiation.  */
6344   input_location = current_tinst_level->locus;
6345   current_tinst_level = current_tinst_level->next;
6346   --tinst_depth;
6347   ++tinst_level_tick;
6348 }
6349
6350 /* We're instantiating a deferred template; restore the template
6351    instantiation context in which the instantiation was requested, which
6352    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6353
6354 static tree
6355 reopen_tinst_level (struct tinst_level *level)
6356 {
6357   struct tinst_level *t;
6358
6359   tinst_depth = 0;
6360   for (t = level; t; t = t->next)
6361     ++tinst_depth;
6362
6363   current_tinst_level = level;
6364   pop_tinst_level ();
6365   return level->decl;
6366 }
6367
6368 /* Returns the TINST_LEVEL which gives the original instantiation
6369    context.  */
6370
6371 struct tinst_level *
6372 outermost_tinst_level (void)
6373 {
6374   struct tinst_level *level = current_tinst_level;
6375   if (level)
6376     while (level->next)
6377       level = level->next;
6378   return level;
6379 }
6380
6381 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6382    vector of template arguments, as for tsubst.
6383
6384    Returns an appropriate tsubst'd friend declaration.  */
6385
6386 static tree
6387 tsubst_friend_function (tree decl, tree args)
6388 {
6389   tree new_friend;
6390
6391   if (TREE_CODE (decl) == FUNCTION_DECL
6392       && DECL_TEMPLATE_INSTANTIATION (decl)
6393       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6394     /* This was a friend declared with an explicit template
6395        argument list, e.g.:
6396
6397        friend void f<>(T);
6398
6399        to indicate that f was a template instantiation, not a new
6400        function declaration.  Now, we have to figure out what
6401        instantiation of what template.  */
6402     {
6403       tree template_id, arglist, fns;
6404       tree new_args;
6405       tree tmpl;
6406       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6407
6408       /* Friend functions are looked up in the containing namespace scope.
6409          We must enter that scope, to avoid finding member functions of the
6410          current class with same name.  */
6411       push_nested_namespace (ns);
6412       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6413                          tf_warning_or_error, NULL_TREE,
6414                          /*integral_constant_expression_p=*/false);
6415       pop_nested_namespace (ns);
6416       arglist = tsubst (DECL_TI_ARGS (decl), args,
6417                         tf_warning_or_error, NULL_TREE);
6418       template_id = lookup_template_function (fns, arglist);
6419
6420       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6421       tmpl = determine_specialization (template_id, new_friend,
6422                                        &new_args,
6423                                        /*need_member_template=*/0,
6424                                        TREE_VEC_LENGTH (args),
6425                                        tsk_none);
6426       return instantiate_template (tmpl, new_args, tf_error);
6427     }
6428
6429   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6430
6431   /* The NEW_FRIEND will look like an instantiation, to the
6432      compiler, but is not an instantiation from the point of view of
6433      the language.  For example, we might have had:
6434
6435      template <class T> struct S {
6436        template <class U> friend void f(T, U);
6437      };
6438
6439      Then, in S<int>, template <class U> void f(int, U) is not an
6440      instantiation of anything.  */
6441   if (new_friend == error_mark_node)
6442     return error_mark_node;
6443
6444   DECL_USE_TEMPLATE (new_friend) = 0;
6445   if (TREE_CODE (decl) == TEMPLATE_DECL)
6446     {
6447       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6448       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6449         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6450     }
6451
6452   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6453      is not a template instantiation and should not be mangled like
6454      one.  Therefore, we forget the mangling here; we'll recompute it
6455      later if we need it.  */
6456   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6457     {
6458       SET_DECL_RTL (new_friend, NULL_RTX);
6459       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6460     }
6461
6462   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6463     {
6464       tree old_decl;
6465       tree new_friend_template_info;
6466       tree new_friend_result_template_info;
6467       tree ns;
6468       int  new_friend_is_defn;
6469
6470       /* We must save some information from NEW_FRIEND before calling
6471          duplicate decls since that function will free NEW_FRIEND if
6472          possible.  */
6473       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6474       new_friend_is_defn =
6475             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6476                            (template_for_substitution (new_friend)))
6477              != NULL_TREE);
6478       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6479         {
6480           /* This declaration is a `primary' template.  */
6481           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6482
6483           new_friend_result_template_info
6484             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6485         }
6486       else
6487         new_friend_result_template_info = NULL_TREE;
6488
6489       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6490       if (new_friend_is_defn)
6491         DECL_INITIAL (new_friend) = error_mark_node;
6492
6493       /* Inside pushdecl_namespace_level, we will push into the
6494          current namespace. However, the friend function should go
6495          into the namespace of the template.  */
6496       ns = decl_namespace_context (new_friend);
6497       push_nested_namespace (ns);
6498       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6499       pop_nested_namespace (ns);
6500
6501       if (old_decl == error_mark_node)
6502         return error_mark_node;
6503
6504       if (old_decl != new_friend)
6505         {
6506           /* This new friend declaration matched an existing
6507              declaration.  For example, given:
6508
6509                template <class T> void f(T);
6510                template <class U> class C {
6511                  template <class T> friend void f(T) {}
6512                };
6513
6514              the friend declaration actually provides the definition
6515              of `f', once C has been instantiated for some type.  So,
6516              old_decl will be the out-of-class template declaration,
6517              while new_friend is the in-class definition.
6518
6519              But, if `f' was called before this point, the
6520              instantiation of `f' will have DECL_TI_ARGS corresponding
6521              to `T' but not to `U', references to which might appear
6522              in the definition of `f'.  Previously, the most general
6523              template for an instantiation of `f' was the out-of-class
6524              version; now it is the in-class version.  Therefore, we
6525              run through all specialization of `f', adding to their
6526              DECL_TI_ARGS appropriately.  In particular, they need a
6527              new set of outer arguments, corresponding to the
6528              arguments for this class instantiation.
6529
6530              The same situation can arise with something like this:
6531
6532                friend void f(int);
6533                template <class T> class C {
6534                  friend void f(T) {}
6535                };
6536
6537              when `C<int>' is instantiated.  Now, `f(int)' is defined
6538              in the class.  */
6539
6540           if (!new_friend_is_defn)
6541             /* On the other hand, if the in-class declaration does
6542                *not* provide a definition, then we don't want to alter
6543                existing definitions.  We can just leave everything
6544                alone.  */
6545             ;
6546           else
6547             {
6548               /* Overwrite whatever template info was there before, if
6549                  any, with the new template information pertaining to
6550                  the declaration.  */
6551               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6552
6553               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6554                 reregister_specialization (new_friend,
6555                                            most_general_template (old_decl),
6556                                            old_decl);
6557               else
6558                 {
6559                   tree t;
6560                   tree new_friend_args;
6561
6562                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6563                     = new_friend_result_template_info;
6564
6565                   new_friend_args = TI_ARGS (new_friend_template_info);
6566                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6567                        t != NULL_TREE;
6568                        t = TREE_CHAIN (t))
6569                     {
6570                       tree spec = TREE_VALUE (t);
6571
6572                       DECL_TI_ARGS (spec)
6573                         = add_outermost_template_args (new_friend_args,
6574                                                        DECL_TI_ARGS (spec));
6575                     }
6576
6577                   /* Now, since specializations are always supposed to
6578                      hang off of the most general template, we must move
6579                      them.  */
6580                   t = most_general_template (old_decl);
6581                   if (t != old_decl)
6582                     {
6583                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6584                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6585                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6586                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6587                     }
6588                 }
6589             }
6590
6591           /* The information from NEW_FRIEND has been merged into OLD_DECL
6592              by duplicate_decls.  */
6593           new_friend = old_decl;
6594         }
6595     }
6596   else
6597     {
6598       tree context = DECL_CONTEXT (new_friend);
6599       bool dependent_p;
6600
6601       /* In the code
6602            template <class T> class C {
6603              template <class U> friend void C1<U>::f (); // case 1
6604              friend void C2<T>::f ();                    // case 2
6605            };
6606          we only need to make sure CONTEXT is a complete type for
6607          case 2.  To distinguish between the two cases, we note that
6608          CONTEXT of case 1 remains dependent type after tsubst while
6609          this isn't true for case 2.  */
6610       ++processing_template_decl;
6611       dependent_p = dependent_type_p (context);
6612       --processing_template_decl;
6613
6614       if (!dependent_p
6615           && !complete_type_or_else (context, NULL_TREE))
6616         return error_mark_node;
6617
6618       if (COMPLETE_TYPE_P (context))
6619         {
6620           /* Check to see that the declaration is really present, and,
6621              possibly obtain an improved declaration.  */
6622           tree fn = check_classfn (context,
6623                                    new_friend, NULL_TREE);
6624
6625           if (fn)
6626             new_friend = fn;
6627         }
6628     }
6629
6630   return new_friend;
6631 }
6632
6633 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6634    template arguments, as for tsubst.
6635
6636    Returns an appropriate tsubst'd friend type or error_mark_node on
6637    failure.  */
6638
6639 static tree
6640 tsubst_friend_class (tree friend_tmpl, tree args)
6641 {
6642   tree friend_type;
6643   tree tmpl;
6644   tree context;
6645
6646   context = DECL_CONTEXT (friend_tmpl);
6647
6648   if (context)
6649     {
6650       if (TREE_CODE (context) == NAMESPACE_DECL)
6651         push_nested_namespace (context);
6652       else
6653         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6654     }
6655
6656   /* Look for a class template declaration.  We look for hidden names
6657      because two friend declarations of the same template are the
6658      same.  For example, in:
6659
6660        struct A { 
6661          template <typename> friend class F;
6662        };
6663        template <typename> struct B { 
6664          template <typename> friend class F;
6665        };
6666
6667      both F templates are the same.  */
6668   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6669                            /*block_p=*/true, 0, 
6670                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6671
6672   /* But, if we don't find one, it might be because we're in a
6673      situation like this:
6674
6675        template <class T>
6676        struct S {
6677          template <class U>
6678          friend struct S;
6679        };
6680
6681      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6682      for `S<int>', not the TEMPLATE_DECL.  */
6683   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6684     {
6685       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6686       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6687     }
6688
6689   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6690     {
6691       /* The friend template has already been declared.  Just
6692          check to see that the declarations match, and install any new
6693          default parameters.  We must tsubst the default parameters,
6694          of course.  We only need the innermost template parameters
6695          because that is all that redeclare_class_template will look
6696          at.  */
6697       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6698           > TMPL_ARGS_DEPTH (args))
6699         {
6700           tree parms;
6701           location_t saved_input_location;
6702           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6703                                          args, tf_warning_or_error);
6704
6705           saved_input_location = input_location;
6706           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6707           redeclare_class_template (TREE_TYPE (tmpl), parms);
6708           input_location = saved_input_location;
6709           
6710         }
6711
6712       friend_type = TREE_TYPE (tmpl);
6713     }
6714   else
6715     {
6716       /* The friend template has not already been declared.  In this
6717          case, the instantiation of the template class will cause the
6718          injection of this template into the global scope.  */
6719       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6720       if (tmpl == error_mark_node)
6721         return error_mark_node;
6722
6723       /* The new TMPL is not an instantiation of anything, so we
6724          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6725          the new type because that is supposed to be the corresponding
6726          template decl, i.e., TMPL.  */
6727       DECL_USE_TEMPLATE (tmpl) = 0;
6728       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6729       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6730       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6731         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6732
6733       /* Inject this template into the global scope.  */
6734       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6735     }
6736
6737   if (context)
6738     {
6739       if (TREE_CODE (context) == NAMESPACE_DECL)
6740         pop_nested_namespace (context);
6741       else
6742         pop_nested_class ();
6743     }
6744
6745   return friend_type;
6746 }
6747
6748 /* Returns zero if TYPE cannot be completed later due to circularity.
6749    Otherwise returns one.  */
6750
6751 static int
6752 can_complete_type_without_circularity (tree type)
6753 {
6754   if (type == NULL_TREE || type == error_mark_node)
6755     return 0;
6756   else if (COMPLETE_TYPE_P (type))
6757     return 1;
6758   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6759     return can_complete_type_without_circularity (TREE_TYPE (type));
6760   else if (CLASS_TYPE_P (type)
6761            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6762     return 0;
6763   else
6764     return 1;
6765 }
6766
6767 /* Apply any attributes which had to be deferred until instantiation
6768    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6769    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6770
6771 static void
6772 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6773                                 tree args, tsubst_flags_t complain, tree in_decl)
6774 {
6775   tree last_dep = NULL_TREE;
6776   tree t;
6777   tree *p;
6778
6779   for (t = attributes; t; t = TREE_CHAIN (t))
6780     if (ATTR_IS_DEPENDENT (t))
6781       {
6782         last_dep = t;
6783         attributes = copy_list (attributes);
6784         break;
6785       }
6786
6787   if (DECL_P (*decl_p))
6788     {
6789       if (TREE_TYPE (*decl_p) == error_mark_node)
6790         return;
6791       p = &DECL_ATTRIBUTES (*decl_p);
6792     }
6793   else
6794     p = &TYPE_ATTRIBUTES (*decl_p);
6795
6796   if (last_dep)
6797     {
6798       tree late_attrs = NULL_TREE;
6799       tree *q = &late_attrs;
6800
6801       for (*p = attributes; *p; )
6802         {
6803           t = *p;
6804           if (ATTR_IS_DEPENDENT (t))
6805             {
6806               *p = TREE_CHAIN (t);
6807               TREE_CHAIN (t) = NULL_TREE;
6808               /* If the first attribute argument is an identifier, don't
6809                  pass it through tsubst.  Attributes like mode, format,
6810                  cleanup and several target specific attributes expect it
6811                  unmodified.  */
6812               if (TREE_VALUE (t)
6813                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
6814                   && TREE_VALUE (TREE_VALUE (t))
6815                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
6816                       == IDENTIFIER_NODE))
6817                 {
6818                   tree chain
6819                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
6820                                    in_decl,
6821                                    /*integral_constant_expression_p=*/false);
6822                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
6823                     TREE_VALUE (t)
6824                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
6825                                    chain);
6826                 }
6827               else
6828                 TREE_VALUE (t)
6829                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6830                                  /*integral_constant_expression_p=*/false);
6831               *q = t;
6832               q = &TREE_CHAIN (t);
6833             }
6834           else
6835             p = &TREE_CHAIN (t);
6836         }
6837
6838       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6839     }
6840 }
6841
6842 tree
6843 instantiate_class_template (tree type)
6844 {
6845   tree templ, args, pattern, t, member;
6846   tree typedecl;
6847   tree pbinfo;
6848   tree base_list;
6849
6850   if (type == error_mark_node)
6851     return error_mark_node;
6852
6853   if (TYPE_BEING_DEFINED (type)
6854       || COMPLETE_TYPE_P (type)
6855       || dependent_type_p (type))
6856     return type;
6857
6858   /* Figure out which template is being instantiated.  */
6859   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6860   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
6861
6862   /* Determine what specialization of the original template to
6863      instantiate.  */
6864   t = most_specialized_class (type, templ);
6865   if (t == error_mark_node)
6866     {
6867       TYPE_BEING_DEFINED (type) = 1;
6868       return error_mark_node;
6869     }
6870   else if (t)
6871     {
6872       /* This TYPE is actually an instantiation of a partial
6873          specialization.  We replace the innermost set of ARGS with
6874          the arguments appropriate for substitution.  For example,
6875          given:
6876
6877            template <class T> struct S {};
6878            template <class T> struct S<T*> {};
6879
6880          and supposing that we are instantiating S<int*>, ARGS will
6881          presently be {int*} -- but we need {int}.  */
6882       pattern = TREE_TYPE (t);
6883       args = TREE_PURPOSE (t);
6884     }
6885   else
6886     {
6887       pattern = TREE_TYPE (templ);
6888       args = CLASSTYPE_TI_ARGS (type);
6889     }
6890
6891   /* If the template we're instantiating is incomplete, then clearly
6892      there's nothing we can do.  */
6893   if (!COMPLETE_TYPE_P (pattern))
6894     return type;
6895
6896   /* If we've recursively instantiated too many templates, stop.  */
6897   if (! push_tinst_level (type))
6898     return type;
6899
6900   /* Now we're really doing the instantiation.  Mark the type as in
6901      the process of being defined.  */
6902   TYPE_BEING_DEFINED (type) = 1;
6903
6904   /* We may be in the middle of deferred access check.  Disable
6905      it now.  */
6906   push_deferring_access_checks (dk_no_deferred);
6907
6908   push_to_top_level ();
6909
6910   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6911
6912   /* Set the input location to the template definition. This is needed
6913      if tsubsting causes an error.  */
6914   typedecl = TYPE_MAIN_DECL (type);
6915   input_location = DECL_SOURCE_LOCATION (typedecl);
6916
6917   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
6918   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6919   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6920   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6921   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6922   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6923   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6924   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6925   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6926   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6927   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6928   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6929   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6930   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6931   if (ANON_AGGR_TYPE_P (pattern))
6932     SET_ANON_AGGR_TYPE_P (type);
6933   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6934     {
6935       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6936       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6937     }
6938
6939   pbinfo = TYPE_BINFO (pattern);
6940
6941   /* We should never instantiate a nested class before its enclosing
6942      class; we need to look up the nested class by name before we can
6943      instantiate it, and that lookup should instantiate the enclosing
6944      class.  */
6945   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6946               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6947               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6948
6949   base_list = NULL_TREE;
6950   if (BINFO_N_BASE_BINFOS (pbinfo))
6951     {
6952       tree pbase_binfo;
6953       tree context = TYPE_CONTEXT (type);
6954       tree pushed_scope;
6955       int i;
6956
6957       /* We must enter the scope containing the type, as that is where
6958          the accessibility of types named in dependent bases are
6959          looked up from.  */
6960       pushed_scope = push_scope (context ? context : global_namespace);
6961
6962       /* Substitute into each of the bases to determine the actual
6963          basetypes.  */
6964       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6965         {
6966           tree base;
6967           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6968           tree expanded_bases = NULL_TREE;
6969           int idx, len = 1;
6970
6971           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6972             {
6973               expanded_bases = 
6974                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6975                                        args, tf_error, NULL_TREE);
6976               if (expanded_bases == error_mark_node)
6977                 continue;
6978
6979               len = TREE_VEC_LENGTH (expanded_bases);
6980             }
6981
6982           for (idx = 0; idx < len; idx++)
6983             {
6984               if (expanded_bases)
6985                 /* Extract the already-expanded base class.  */
6986                 base = TREE_VEC_ELT (expanded_bases, idx);
6987               else
6988                 /* Substitute to figure out the base class.  */
6989                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6990                                NULL_TREE);
6991
6992               if (base == error_mark_node)
6993                 continue;
6994
6995               base_list = tree_cons (access, base, base_list);
6996               if (BINFO_VIRTUAL_P (pbase_binfo))
6997                 TREE_TYPE (base_list) = integer_type_node;
6998             }
6999         }
7000
7001       /* The list is now in reverse order; correct that.  */
7002       base_list = nreverse (base_list);
7003
7004       if (pushed_scope)
7005         pop_scope (pushed_scope);
7006     }
7007   /* Now call xref_basetypes to set up all the base-class
7008      information.  */
7009   xref_basetypes (type, base_list);
7010
7011   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7012                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7013                                   args, tf_error, NULL_TREE);
7014
7015   /* Now that our base classes are set up, enter the scope of the
7016      class, so that name lookups into base classes, etc. will work
7017      correctly.  This is precisely analogous to what we do in
7018      begin_class_definition when defining an ordinary non-template
7019      class, except we also need to push the enclosing classes.  */
7020   push_nested_class (type);
7021
7022   /* Now members are processed in the order of declaration.  */
7023   for (member = CLASSTYPE_DECL_LIST (pattern);
7024        member; member = TREE_CHAIN (member))
7025     {
7026       tree t = TREE_VALUE (member);
7027
7028       if (TREE_PURPOSE (member))
7029         {
7030           if (TYPE_P (t))
7031             {
7032               /* Build new CLASSTYPE_NESTED_UTDS.  */
7033
7034               tree newtag;
7035               bool class_template_p;
7036
7037               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7038                                   && TYPE_LANG_SPECIFIC (t)
7039                                   && CLASSTYPE_IS_TEMPLATE (t));
7040               /* If the member is a class template, then -- even after
7041                  substitution -- there may be dependent types in the
7042                  template argument list for the class.  We increment
7043                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7044                  that function will assume that no types are dependent
7045                  when outside of a template.  */
7046               if (class_template_p)
7047                 ++processing_template_decl;
7048               newtag = tsubst (t, args, tf_error, NULL_TREE);
7049               if (class_template_p)
7050                 --processing_template_decl;
7051               if (newtag == error_mark_node)
7052                 continue;
7053
7054               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7055                 {
7056                   tree name = TYPE_IDENTIFIER (t);
7057
7058                   if (class_template_p)
7059                     /* Unfortunately, lookup_template_class sets
7060                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7061                        instantiation (i.e., for the type of a member
7062                        template class nested within a template class.)
7063                        This behavior is required for
7064                        maybe_process_partial_specialization to work
7065                        correctly, but is not accurate in this case;
7066                        the TAG is not an instantiation of anything.
7067                        (The corresponding TEMPLATE_DECL is an
7068                        instantiation, but the TYPE is not.) */
7069                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7070
7071                   /* Now, we call pushtag to put this NEWTAG into the scope of
7072                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7073                      pushtag calling push_template_decl.  We don't have to do
7074                      this for enums because it will already have been done in
7075                      tsubst_enum.  */
7076                   if (name)
7077                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7078                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7079                 }
7080             }
7081           else if (TREE_CODE (t) == FUNCTION_DECL
7082                    || DECL_FUNCTION_TEMPLATE_P (t))
7083             {
7084               /* Build new TYPE_METHODS.  */
7085               tree r;
7086
7087               if (TREE_CODE (t) == TEMPLATE_DECL)
7088                 ++processing_template_decl;
7089               r = tsubst (t, args, tf_error, NULL_TREE);
7090               if (TREE_CODE (t) == TEMPLATE_DECL)
7091                 --processing_template_decl;
7092               set_current_access_from_decl (r);
7093               finish_member_declaration (r);
7094             }
7095           else
7096             {
7097               /* Build new TYPE_FIELDS.  */
7098               if (TREE_CODE (t) == STATIC_ASSERT)
7099                 {
7100                   tree condition = 
7101                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7102                                  tf_warning_or_error, NULL_TREE,
7103                                  /*integral_constant_expression_p=*/true);
7104                   finish_static_assert (condition,
7105                                         STATIC_ASSERT_MESSAGE (t), 
7106                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7107                                         /*member_p=*/true);
7108                 }
7109               else if (TREE_CODE (t) != CONST_DECL)
7110                 {
7111                   tree r;
7112
7113                   /* The file and line for this declaration, to
7114                      assist in error message reporting.  Since we
7115                      called push_tinst_level above, we don't need to
7116                      restore these.  */
7117                   input_location = DECL_SOURCE_LOCATION (t);
7118
7119                   if (TREE_CODE (t) == TEMPLATE_DECL)
7120                     ++processing_template_decl;
7121                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7122                   if (TREE_CODE (t) == TEMPLATE_DECL)
7123                     --processing_template_decl;
7124                   if (TREE_CODE (r) == VAR_DECL)
7125                     {
7126                       /* In [temp.inst]:
7127
7128                            [t]he initialization (and any associated
7129                            side-effects) of a static data member does
7130                            not occur unless the static data member is
7131                            itself used in a way that requires the
7132                            definition of the static data member to
7133                            exist.
7134
7135                          Therefore, we do not substitute into the
7136                          initialized for the static data member here.  */
7137                       finish_static_data_member_decl
7138                         (r,
7139                          /*init=*/NULL_TREE,
7140                          /*init_const_expr_p=*/false,
7141                          /*asmspec_tree=*/NULL_TREE,
7142                          /*flags=*/0);
7143                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7144                         check_static_variable_definition (r, TREE_TYPE (r));
7145                     }
7146                   else if (TREE_CODE (r) == FIELD_DECL)
7147                     {
7148                       /* Determine whether R has a valid type and can be
7149                          completed later.  If R is invalid, then it is
7150                          replaced by error_mark_node so that it will not be
7151                          added to TYPE_FIELDS.  */
7152                       tree rtype = TREE_TYPE (r);
7153                       if (can_complete_type_without_circularity (rtype))
7154                         complete_type (rtype);
7155
7156                       if (!COMPLETE_TYPE_P (rtype))
7157                         {
7158                           cxx_incomplete_type_error (r, rtype);
7159                           r = error_mark_node;
7160                         }
7161                     }
7162
7163                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7164                      such a thing will already have been added to the field
7165                      list by tsubst_enum in finish_member_declaration in the
7166                      CLASSTYPE_NESTED_UTDS case above.  */
7167                   if (!(TREE_CODE (r) == TYPE_DECL
7168                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7169                         && DECL_ARTIFICIAL (r)))
7170                     {
7171                       set_current_access_from_decl (r);
7172                       finish_member_declaration (r);
7173                     }
7174                 }
7175             }
7176         }
7177       else
7178         {
7179           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7180             {
7181               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7182
7183               tree friend_type = t;
7184               bool adjust_processing_template_decl = false;
7185
7186               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7187                 {
7188                   /* template <class T> friend class C;  */
7189                   friend_type = tsubst_friend_class (friend_type, args);
7190                   adjust_processing_template_decl = true;
7191                 }
7192               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7193                 {
7194                   /* template <class T> friend class C::D;  */
7195                   friend_type = tsubst (friend_type, args,
7196                                         tf_warning_or_error, NULL_TREE);
7197                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7198                     friend_type = TREE_TYPE (friend_type);
7199                   adjust_processing_template_decl = true;
7200                 }
7201               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7202                 {
7203                   /* This could be either
7204
7205                        friend class T::C;
7206
7207                      when dependent_type_p is false or
7208
7209                        template <class U> friend class T::C;
7210
7211                      otherwise.  */
7212                   friend_type = tsubst (friend_type, args,
7213                                         tf_warning_or_error, NULL_TREE);
7214                   /* Bump processing_template_decl for correct
7215                      dependent_type_p calculation.  */
7216                   ++processing_template_decl;
7217                   if (dependent_type_p (friend_type))
7218                     adjust_processing_template_decl = true;
7219                   --processing_template_decl;
7220                 }
7221               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7222                        && hidden_name_p (TYPE_NAME (friend_type)))
7223                 {
7224                   /* friend class C;
7225
7226                      where C hasn't been declared yet.  Let's lookup name
7227                      from namespace scope directly, bypassing any name that
7228                      come from dependent base class.  */
7229                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7230
7231                   /* The call to xref_tag_from_type does injection for friend
7232                      classes.  */
7233                   push_nested_namespace (ns);
7234                   friend_type =
7235                     xref_tag_from_type (friend_type, NULL_TREE,
7236                                         /*tag_scope=*/ts_current);
7237                   pop_nested_namespace (ns);
7238                 }
7239               else if (uses_template_parms (friend_type))
7240                 /* friend class C<T>;  */
7241                 friend_type = tsubst (friend_type, args,
7242                                       tf_warning_or_error, NULL_TREE);
7243               /* Otherwise it's
7244
7245                    friend class C;
7246
7247                  where C is already declared or
7248
7249                    friend class C<int>;
7250
7251                  We don't have to do anything in these cases.  */
7252
7253               if (adjust_processing_template_decl)
7254                 /* Trick make_friend_class into realizing that the friend
7255                    we're adding is a template, not an ordinary class.  It's
7256                    important that we use make_friend_class since it will
7257                    perform some error-checking and output cross-reference
7258                    information.  */
7259                 ++processing_template_decl;
7260
7261               if (friend_type != error_mark_node)
7262                 make_friend_class (type, friend_type, /*complain=*/false);
7263
7264               if (adjust_processing_template_decl)
7265                 --processing_template_decl;
7266             }
7267           else
7268             {
7269               /* Build new DECL_FRIENDLIST.  */
7270               tree r;
7271
7272               /* The file and line for this declaration, to
7273                  assist in error message reporting.  Since we
7274                  called push_tinst_level above, we don't need to
7275                  restore these.  */
7276               input_location = DECL_SOURCE_LOCATION (t);
7277
7278               if (TREE_CODE (t) == TEMPLATE_DECL)
7279                 {
7280                   ++processing_template_decl;
7281                   push_deferring_access_checks (dk_no_check);
7282                 }
7283
7284               r = tsubst_friend_function (t, args);
7285               add_friend (type, r, /*complain=*/false);
7286               if (TREE_CODE (t) == TEMPLATE_DECL)
7287                 {
7288                   pop_deferring_access_checks ();
7289                   --processing_template_decl;
7290                 }
7291             }
7292         }
7293     }
7294
7295   /* Set the file and line number information to whatever is given for
7296      the class itself.  This puts error messages involving generated
7297      implicit functions at a predictable point, and the same point
7298      that would be used for non-template classes.  */
7299   input_location = DECL_SOURCE_LOCATION (typedecl);
7300
7301   unreverse_member_declarations (type);
7302   finish_struct_1 (type);
7303   TYPE_BEING_DEFINED (type) = 0;
7304
7305   /* Now that the class is complete, instantiate default arguments for
7306      any member functions.  We don't do this earlier because the
7307      default arguments may reference members of the class.  */
7308   if (!PRIMARY_TEMPLATE_P (templ))
7309     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7310       if (TREE_CODE (t) == FUNCTION_DECL
7311           /* Implicitly generated member functions will not have template
7312              information; they are not instantiations, but instead are
7313              created "fresh" for each instantiation.  */
7314           && DECL_TEMPLATE_INFO (t))
7315         tsubst_default_arguments (t);
7316
7317   pop_nested_class ();
7318   pop_from_top_level ();
7319   pop_deferring_access_checks ();
7320   pop_tinst_level ();
7321
7322   /* The vtable for a template class can be emitted in any translation
7323      unit in which the class is instantiated.  When there is no key
7324      method, however, finish_struct_1 will already have added TYPE to
7325      the keyed_classes list.  */
7326   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7327     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7328
7329   return type;
7330 }
7331
7332 static tree
7333 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7334 {
7335   tree r;
7336
7337   if (!t)
7338     r = t;
7339   else if (TYPE_P (t))
7340     r = tsubst (t, args, complain, in_decl);
7341   else
7342     {
7343       r = tsubst_expr (t, args, complain, in_decl,
7344                        /*integral_constant_expression_p=*/true);
7345       r = fold_non_dependent_expr (r);
7346     }
7347   return r;
7348 }
7349
7350 /* Substitute ARGS into T, which is an pack expansion
7351    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7352    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7353    (if only a partial substitution could be performed) or
7354    ERROR_MARK_NODE if there was an error.  */
7355 tree
7356 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7357                        tree in_decl)
7358 {
7359   tree pattern;
7360   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7361   tree first_arg_pack; int i, len = -1;
7362   tree result;
7363   int incomplete = 0;
7364
7365   gcc_assert (PACK_EXPANSION_P (t));
7366   pattern = PACK_EXPANSION_PATTERN (t);
7367
7368   /* Determine the argument packs that will instantiate the parameter
7369      packs used in the expansion expression. While we're at it,
7370      compute the number of arguments to be expanded and make sure it
7371      is consistent.  */
7372   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7373        pack = TREE_CHAIN (pack))
7374     {
7375       tree parm_pack = TREE_VALUE (pack);
7376       tree arg_pack = NULL_TREE;
7377       tree orig_arg = NULL_TREE;
7378
7379       if (TREE_CODE (parm_pack) == PARM_DECL)
7380         arg_pack = retrieve_local_specialization (parm_pack);
7381       else
7382         {
7383           int level, idx, levels;
7384           template_parm_level_and_index (parm_pack, &level, &idx);
7385
7386           levels = TMPL_ARGS_DEPTH (args);
7387           if (level <= levels)
7388             arg_pack = TMPL_ARG (args, level, idx);
7389         }
7390
7391       orig_arg = arg_pack;
7392       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7393         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7394       
7395       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7396         /* This can only happen if we forget to expand an argument
7397            pack somewhere else. Just return an error, silently.  */
7398         {
7399           result = make_tree_vec (1);
7400           TREE_VEC_ELT (result, 0) = error_mark_node;
7401           return result;
7402         }
7403
7404       if (arg_pack
7405           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7406           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7407         {
7408           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7409           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7410           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7411               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7412             /* The argument pack that the parameter maps to is just an
7413                expansion of the parameter itself, such as one would
7414                find in the implicit typedef of a class inside the
7415                class itself.  Consider this parameter "unsubstituted",
7416                so that we will maintain the outer pack expansion.  */
7417             arg_pack = NULL_TREE;
7418         }
7419           
7420       if (arg_pack)
7421         {
7422           int my_len = 
7423             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7424
7425           /* It's all-or-nothing with incomplete argument packs.  */
7426           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7427             return error_mark_node;
7428           
7429           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7430             incomplete = 1;
7431
7432           if (len < 0)
7433             {
7434               len = my_len;
7435               first_arg_pack = arg_pack;
7436             }
7437           else if (len != my_len)
7438             {
7439               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7440                 error ("mismatched argument pack lengths while expanding "
7441                        "%<%T%>",
7442                        pattern);
7443               else
7444                 error ("mismatched argument pack lengths while expanding "
7445                        "%<%E%>",
7446                        pattern);
7447               return error_mark_node;
7448             }
7449
7450           /* Keep track of the parameter packs and their corresponding
7451              argument packs.  */
7452           packs = tree_cons (parm_pack, arg_pack, packs);
7453           TREE_TYPE (packs) = orig_arg;
7454         }
7455       else
7456         /* We can't substitute for this parameter pack.  */
7457         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7458                                          TREE_VALUE (pack),
7459                                          unsubstituted_packs);
7460     }
7461
7462   /* We cannot expand this expansion expression, because we don't have
7463      all of the argument packs we need. Substitute into the pattern
7464      and return a PACK_EXPANSION_*. The caller will need to deal with
7465      that.  */
7466   if (unsubstituted_packs)
7467     return make_pack_expansion (tsubst (pattern, args, complain, 
7468                                         in_decl));
7469
7470   /* We could not find any argument packs that work.  */
7471   if (len < 0)
7472     return error_mark_node;
7473
7474   /* For each argument in each argument pack, substitute into the
7475      pattern.  */
7476   result = make_tree_vec (len + incomplete);
7477   for (i = 0; i < len + incomplete; ++i)
7478     {
7479       /* For parameter pack, change the substitution of the parameter
7480          pack to the ith argument in its argument pack, then expand
7481          the pattern.  */
7482       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7483         {
7484           tree parm = TREE_PURPOSE (pack);
7485
7486           if (TREE_CODE (parm) == PARM_DECL)
7487             {
7488               /* Select the Ith argument from the pack.  */
7489               tree arg = make_node (ARGUMENT_PACK_SELECT);
7490               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7491               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7492               mark_used (parm);
7493               register_local_specialization (arg, parm);
7494             }
7495           else
7496             {
7497               tree value = parm;
7498               int idx, level;
7499               template_parm_level_and_index (parm, &level, &idx);
7500               
7501               if (i < len) 
7502                 {
7503                   /* Select the Ith argument from the pack. */
7504                   value = make_node (ARGUMENT_PACK_SELECT);
7505                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7506                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7507                 }
7508
7509               /* Update the corresponding argument.  */
7510               TMPL_ARG (args, level, idx) = value;
7511             }
7512         }
7513
7514       /* Substitute into the PATTERN with the altered arguments.  */
7515       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7516         TREE_VEC_ELT (result, i) = 
7517           tsubst_expr (pattern, args, complain, in_decl,
7518                        /*integral_constant_expression_p=*/false);
7519       else
7520         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7521
7522       if (i == len)
7523         /* When we have incomplete argument packs, the last "expanded"
7524            result is itself a pack expansion, which allows us
7525            to deduce more arguments.  */
7526         TREE_VEC_ELT (result, i) = 
7527           make_pack_expansion (TREE_VEC_ELT (result, i));
7528
7529       if (TREE_VEC_ELT (result, i) == error_mark_node)
7530         {
7531           result = error_mark_node;
7532           break;
7533         }
7534     }
7535   
7536   /* Update ARGS to restore the substitution from parameter packs to
7537      their argument packs.  */
7538   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7539     {
7540       tree parm = TREE_PURPOSE (pack);
7541
7542       if (TREE_CODE (parm) == PARM_DECL)
7543         register_local_specialization (TREE_TYPE (pack), parm);
7544       else
7545         {
7546           int idx, level;
7547           template_parm_level_and_index (parm, &level, &idx);
7548           
7549           /* Update the corresponding argument.  */
7550           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7551             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7552               TREE_TYPE (pack);
7553           else
7554             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7555         }
7556     }
7557
7558   return result;
7559 }
7560
7561 /* Substitute ARGS into the vector or list of template arguments T.  */
7562
7563 static tree
7564 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7565 {
7566   tree orig_t = t;
7567   int len = TREE_VEC_LENGTH (t);
7568   int need_new = 0, i, expanded_len_adjust = 0, out;
7569   tree *elts = (tree *) alloca (len * sizeof (tree));
7570
7571   for (i = 0; i < len; i++)
7572     {
7573       tree orig_arg = TREE_VEC_ELT (t, i);
7574       tree new_arg;
7575
7576       if (TREE_CODE (orig_arg) == TREE_VEC)
7577         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7578       else if (PACK_EXPANSION_P (orig_arg))
7579         {
7580           /* Substitute into an expansion expression.  */
7581           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7582
7583           if (TREE_CODE (new_arg) == TREE_VEC)
7584             /* Add to the expanded length adjustment the number of
7585                expanded arguments. We subtract one from this
7586                measurement, because the argument pack expression
7587                itself is already counted as 1 in
7588                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7589                the argument pack is empty.  */
7590             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7591         }
7592       else if (ARGUMENT_PACK_P (orig_arg))
7593         {
7594           /* Substitute into each of the arguments.  */
7595           new_arg = make_node (TREE_CODE (orig_arg));
7596           
7597           SET_ARGUMENT_PACK_ARGS (
7598             new_arg,
7599             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7600                                   args, complain, in_decl));
7601
7602           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7603             new_arg = error_mark_node;
7604
7605           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7606             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7607                                           complain, in_decl);
7608             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7609
7610             if (TREE_TYPE (new_arg) == error_mark_node)
7611               new_arg = error_mark_node;
7612           }
7613         }
7614       else
7615         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7616
7617       if (new_arg == error_mark_node)
7618         return error_mark_node;
7619
7620       elts[i] = new_arg;
7621       if (new_arg != orig_arg)
7622         need_new = 1;
7623     }
7624
7625   if (!need_new)
7626     return t;
7627
7628   /* Make space for the expanded arguments coming from template
7629      argument packs.  */
7630   t = make_tree_vec (len + expanded_len_adjust);
7631   for (i = 0, out = 0; i < len; i++)
7632     {
7633       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7634            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7635           && TREE_CODE (elts[i]) == TREE_VEC)
7636         {
7637           int idx;
7638
7639           /* Now expand the template argument pack "in place".  */
7640           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7641             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7642         }
7643       else
7644         {
7645           TREE_VEC_ELT (t, out) = elts[i];
7646           out++;
7647         }
7648     }
7649
7650   return t;
7651 }
7652
7653 /* Return the result of substituting ARGS into the template parameters
7654    given by PARMS.  If there are m levels of ARGS and m + n levels of
7655    PARMS, then the result will contain n levels of PARMS.  For
7656    example, if PARMS is `template <class T> template <class U>
7657    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7658    result will be `template <int*, double, class V>'.  */
7659
7660 static tree
7661 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7662 {
7663   tree r = NULL_TREE;
7664   tree* new_parms;
7665
7666   /* When substituting into a template, we must set
7667      PROCESSING_TEMPLATE_DECL as the template parameters may be
7668      dependent if they are based on one-another, and the dependency
7669      predicates are short-circuit outside of templates.  */
7670   ++processing_template_decl;
7671
7672   for (new_parms = &r;
7673        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7674        new_parms = &(TREE_CHAIN (*new_parms)),
7675          parms = TREE_CHAIN (parms))
7676     {
7677       tree new_vec =
7678         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7679       int i;
7680
7681       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7682         {
7683           tree tuple;
7684           tree default_value;
7685           tree parm_decl;
7686
7687           if (parms == error_mark_node)
7688             continue;
7689
7690           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7691
7692           if (tuple == error_mark_node)
7693             continue;
7694
7695           default_value = TREE_PURPOSE (tuple);
7696           parm_decl = TREE_VALUE (tuple);
7697
7698           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7699           if (TREE_CODE (parm_decl) == PARM_DECL
7700               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7701             parm_decl = error_mark_node;
7702           default_value = tsubst_template_arg (default_value, args,
7703                                                complain, NULL_TREE);
7704
7705           tuple = build_tree_list (default_value, parm_decl);
7706           TREE_VEC_ELT (new_vec, i) = tuple;
7707         }
7708
7709       *new_parms =
7710         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7711                              - TMPL_ARGS_DEPTH (args)),
7712                    new_vec, NULL_TREE);
7713     }
7714
7715   --processing_template_decl;
7716
7717   return r;
7718 }
7719
7720 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7721    type T.  If T is not an aggregate or enumeration type, it is
7722    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7723    ENTERING_SCOPE is nonzero, T is the context for a template which
7724    we are presently tsubst'ing.  Return the substituted value.  */
7725
7726 static tree
7727 tsubst_aggr_type (tree t,
7728                   tree args,
7729                   tsubst_flags_t complain,
7730                   tree in_decl,
7731                   int entering_scope)
7732 {
7733   if (t == NULL_TREE)
7734     return NULL_TREE;
7735
7736   switch (TREE_CODE (t))
7737     {
7738     case RECORD_TYPE:
7739       if (TYPE_PTRMEMFUNC_P (t))
7740         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7741
7742       /* Else fall through.  */
7743     case ENUMERAL_TYPE:
7744     case UNION_TYPE:
7745       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7746         {
7747           tree argvec;
7748           tree context;
7749           tree r;
7750           bool saved_skip_evaluation;
7751
7752           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7753           saved_skip_evaluation = skip_evaluation;
7754           skip_evaluation = false;
7755
7756           /* First, determine the context for the type we are looking
7757              up.  */
7758           context = TYPE_CONTEXT (t);
7759           if (context)
7760             {
7761               context = tsubst_aggr_type (context, args, complain,
7762                                           in_decl, /*entering_scope=*/1);
7763               /* If context is a nested class inside a class template,
7764                  it may still need to be instantiated (c++/33959).  */
7765               if (TYPE_P (context))
7766                 context = complete_type (context);
7767             }
7768
7769           /* Then, figure out what arguments are appropriate for the
7770              type we are trying to find.  For example, given:
7771
7772                template <class T> struct S;
7773                template <class T, class U> void f(T, U) { S<U> su; }
7774
7775              and supposing that we are instantiating f<int, double>,
7776              then our ARGS will be {int, double}, but, when looking up
7777              S we only want {double}.  */
7778           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7779                                          complain, in_decl);
7780           if (argvec == error_mark_node)
7781             r = error_mark_node;
7782           else
7783             {
7784               r = lookup_template_class (t, argvec, in_decl, context,
7785                                          entering_scope, complain);
7786               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7787             }
7788
7789           skip_evaluation = saved_skip_evaluation;
7790
7791           return r;
7792         }
7793       else
7794         /* This is not a template type, so there's nothing to do.  */
7795         return t;
7796
7797     default:
7798       return tsubst (t, args, complain, in_decl);
7799     }
7800 }
7801
7802 /* Substitute into the default argument ARG (a default argument for
7803    FN), which has the indicated TYPE.  */
7804
7805 tree
7806 tsubst_default_argument (tree fn, tree type, tree arg)
7807 {
7808   tree saved_class_ptr = NULL_TREE;
7809   tree saved_class_ref = NULL_TREE;
7810
7811   /* This default argument came from a template.  Instantiate the
7812      default argument here, not in tsubst.  In the case of
7813      something like:
7814
7815        template <class T>
7816        struct S {
7817          static T t();
7818          void f(T = t());
7819        };
7820
7821      we must be careful to do name lookup in the scope of S<T>,
7822      rather than in the current class.  */
7823   push_access_scope (fn);
7824   /* The "this" pointer is not valid in a default argument.  */
7825   if (cfun)
7826     {
7827       saved_class_ptr = current_class_ptr;
7828       cp_function_chain->x_current_class_ptr = NULL_TREE;
7829       saved_class_ref = current_class_ref;
7830       cp_function_chain->x_current_class_ref = NULL_TREE;
7831     }
7832
7833   push_deferring_access_checks(dk_no_deferred);
7834   /* The default argument expression may cause implicitly defined
7835      member functions to be synthesized, which will result in garbage
7836      collection.  We must treat this situation as if we were within
7837      the body of function so as to avoid collecting live data on the
7838      stack.  */
7839   ++function_depth;
7840   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7841                      tf_warning_or_error, NULL_TREE,
7842                      /*integral_constant_expression_p=*/false);
7843   --function_depth;
7844   pop_deferring_access_checks();
7845
7846   /* Restore the "this" pointer.  */
7847   if (cfun)
7848     {
7849       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7850       cp_function_chain->x_current_class_ref = saved_class_ref;
7851     }
7852
7853   pop_access_scope (fn);
7854
7855   /* Make sure the default argument is reasonable.  */
7856   arg = check_default_argument (type, arg);
7857
7858   return arg;
7859 }
7860
7861 /* Substitute into all the default arguments for FN.  */
7862
7863 static void
7864 tsubst_default_arguments (tree fn)
7865 {
7866   tree arg;
7867   tree tmpl_args;
7868
7869   tmpl_args = DECL_TI_ARGS (fn);
7870
7871   /* If this function is not yet instantiated, we certainly don't need
7872      its default arguments.  */
7873   if (uses_template_parms (tmpl_args))
7874     return;
7875
7876   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7877        arg;
7878        arg = TREE_CHAIN (arg))
7879     if (TREE_PURPOSE (arg))
7880       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7881                                                     TREE_VALUE (arg),
7882                                                     TREE_PURPOSE (arg));
7883 }
7884
7885 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7886    result of the substitution.  Issue error and warning messages under
7887    control of COMPLAIN.  */
7888
7889 static tree
7890 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7891 {
7892   location_t saved_loc;
7893   tree r = NULL_TREE;
7894   tree in_decl = t;
7895
7896   /* Set the filename and linenumber to improve error-reporting.  */
7897   saved_loc = input_location;
7898   input_location = DECL_SOURCE_LOCATION (t);
7899
7900   switch (TREE_CODE (t))
7901     {
7902     case TEMPLATE_DECL:
7903       {
7904         /* We can get here when processing a member function template,
7905            member class template, and template template parameter of
7906            a template class.  */
7907         tree decl = DECL_TEMPLATE_RESULT (t);
7908         tree spec;
7909         tree tmpl_args;
7910         tree full_args;
7911
7912         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7913           {
7914             /* Template template parameter is treated here.  */
7915             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7916             if (new_type == error_mark_node)
7917               return error_mark_node;
7918
7919             r = copy_decl (t);
7920             TREE_CHAIN (r) = NULL_TREE;
7921             TREE_TYPE (r) = new_type;
7922             DECL_TEMPLATE_RESULT (r)
7923               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7924             DECL_TEMPLATE_PARMS (r)
7925               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7926                                        complain);
7927             TYPE_NAME (new_type) = r;
7928             break;
7929           }
7930
7931         /* We might already have an instance of this template.
7932            The ARGS are for the surrounding class type, so the
7933            full args contain the tsubst'd args for the context,
7934            plus the innermost args from the template decl.  */
7935         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7936           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7937           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7938         /* Because this is a template, the arguments will still be
7939            dependent, even after substitution.  If
7940            PROCESSING_TEMPLATE_DECL is not set, the dependency
7941            predicates will short-circuit.  */
7942         ++processing_template_decl;
7943         full_args = tsubst_template_args (tmpl_args, args,
7944                                           complain, in_decl);
7945         --processing_template_decl;
7946         if (full_args == error_mark_node)
7947           return error_mark_node;
7948
7949         /* tsubst_template_args doesn't copy the vector if
7950            nothing changed.  But, *something* should have
7951            changed.  */
7952         gcc_assert (full_args != tmpl_args);
7953
7954         spec = retrieve_specialization (t, full_args,
7955                                         /*class_specializations_p=*/true);
7956         if (spec != NULL_TREE)
7957           {
7958             r = spec;
7959             break;
7960           }
7961
7962         /* Make a new template decl.  It will be similar to the
7963            original, but will record the current template arguments.
7964            We also create a new function declaration, which is just
7965            like the old one, but points to this new template, rather
7966            than the old one.  */
7967         r = copy_decl (t);
7968         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7969         TREE_CHAIN (r) = NULL_TREE;
7970
7971         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7972
7973         if (TREE_CODE (decl) == TYPE_DECL)
7974           {
7975             tree new_type;
7976             ++processing_template_decl;
7977             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7978             --processing_template_decl;
7979             if (new_type == error_mark_node)
7980               return error_mark_node;
7981
7982             TREE_TYPE (r) = new_type;
7983             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7984             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7985             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7986             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7987           }
7988         else
7989           {
7990             tree new_decl;
7991             ++processing_template_decl;
7992             new_decl = tsubst (decl, args, complain, in_decl);
7993             --processing_template_decl;
7994             if (new_decl == error_mark_node)
7995               return error_mark_node;
7996
7997             DECL_TEMPLATE_RESULT (r) = new_decl;
7998             DECL_TI_TEMPLATE (new_decl) = r;
7999             TREE_TYPE (r) = TREE_TYPE (new_decl);
8000             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
8001             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
8002           }
8003
8004         SET_DECL_IMPLICIT_INSTANTIATION (r);
8005         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
8006         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
8007
8008         /* The template parameters for this new template are all the
8009            template parameters for the old template, except the
8010            outermost level of parameters.  */
8011         DECL_TEMPLATE_PARMS (r)
8012           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8013                                    complain);
8014
8015         if (PRIMARY_TEMPLATE_P (t))
8016           DECL_PRIMARY_TEMPLATE (r) = r;
8017
8018         if (TREE_CODE (decl) != TYPE_DECL)
8019           /* Record this non-type partial instantiation.  */
8020           register_specialization (r, t,
8021                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8022                                    false);
8023       }
8024       break;
8025
8026     case FUNCTION_DECL:
8027       {
8028         tree ctx;
8029         tree argvec = NULL_TREE;
8030         tree *friends;
8031         tree gen_tmpl;
8032         tree type;
8033         int member;
8034         int args_depth;
8035         int parms_depth;
8036
8037         /* Nobody should be tsubst'ing into non-template functions.  */
8038         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8039
8040         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8041           {
8042             tree spec;
8043             bool dependent_p;
8044
8045             /* If T is not dependent, just return it.  We have to
8046                increment PROCESSING_TEMPLATE_DECL because
8047                value_dependent_expression_p assumes that nothing is
8048                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
8049             ++processing_template_decl;
8050             dependent_p = value_dependent_expression_p (t);
8051             --processing_template_decl;
8052             if (!dependent_p)
8053               return t;
8054
8055             /* Calculate the most general template of which R is a
8056                specialization, and the complete set of arguments used to
8057                specialize R.  */
8058             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
8059             argvec = tsubst_template_args (DECL_TI_ARGS
8060                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
8061                                            args, complain, in_decl);
8062
8063             /* Check to see if we already have this specialization.  */
8064             spec = retrieve_specialization (gen_tmpl, argvec,
8065                                             /*class_specializations_p=*/false);
8066
8067             if (spec)
8068               {
8069                 r = spec;
8070                 break;
8071               }
8072
8073             /* We can see more levels of arguments than parameters if
8074                there was a specialization of a member template, like
8075                this:
8076
8077                  template <class T> struct S { template <class U> void f(); }
8078                  template <> template <class U> void S<int>::f(U);
8079
8080                Here, we'll be substituting into the specialization,
8081                because that's where we can find the code we actually
8082                want to generate, but we'll have enough arguments for
8083                the most general template.
8084
8085                We also deal with the peculiar case:
8086
8087                  template <class T> struct S {
8088                    template <class U> friend void f();
8089                  };
8090                  template <class U> void f() {}
8091                  template S<int>;
8092                  template void f<double>();
8093
8094                Here, the ARGS for the instantiation of will be {int,
8095                double}.  But, we only need as many ARGS as there are
8096                levels of template parameters in CODE_PATTERN.  We are
8097                careful not to get fooled into reducing the ARGS in
8098                situations like:
8099
8100                  template <class T> struct S { template <class U> void f(U); }
8101                  template <class T> template <> void S<T>::f(int) {}
8102
8103                which we can spot because the pattern will be a
8104                specialization in this case.  */
8105             args_depth = TMPL_ARGS_DEPTH (args);
8106             parms_depth =
8107               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8108             if (args_depth > parms_depth
8109                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8110               args = get_innermost_template_args (args, parms_depth);
8111           }
8112         else
8113           {
8114             /* This special case arises when we have something like this:
8115
8116                  template <class T> struct S {
8117                    friend void f<int>(int, double);
8118                  };
8119
8120                Here, the DECL_TI_TEMPLATE for the friend declaration
8121                will be an IDENTIFIER_NODE.  We are being called from
8122                tsubst_friend_function, and we want only to create a
8123                new decl (R) with appropriate types so that we can call
8124                determine_specialization.  */
8125             gen_tmpl = NULL_TREE;
8126           }
8127
8128         if (DECL_CLASS_SCOPE_P (t))
8129           {
8130             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8131               member = 2;
8132             else
8133               member = 1;
8134             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8135                                     complain, t, /*entering_scope=*/1);
8136           }
8137         else
8138           {
8139             member = 0;
8140             ctx = DECL_CONTEXT (t);
8141           }
8142         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8143         if (type == error_mark_node)
8144           return error_mark_node;
8145
8146         /* We do NOT check for matching decls pushed separately at this
8147            point, as they may not represent instantiations of this
8148            template, and in any case are considered separate under the
8149            discrete model.  */
8150         r = copy_decl (t);
8151         DECL_USE_TEMPLATE (r) = 0;
8152         TREE_TYPE (r) = type;
8153         /* Clear out the mangled name and RTL for the instantiation.  */
8154         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8155         SET_DECL_RTL (r, NULL_RTX);
8156         /* Leave DECL_INITIAL set on deleted instantiations.  */
8157         if (!DECL_DELETED_FN (r))
8158           DECL_INITIAL (r) = NULL_TREE;
8159         DECL_CONTEXT (r) = ctx;
8160
8161         if (member && DECL_CONV_FN_P (r))
8162           /* Type-conversion operator.  Reconstruct the name, in
8163              case it's the name of one of the template's parameters.  */
8164           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8165
8166         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8167                                      complain, t);
8168         DECL_RESULT (r) = NULL_TREE;
8169
8170         TREE_STATIC (r) = 0;
8171         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8172         DECL_EXTERNAL (r) = 1;
8173         /* If this is an instantiation of a function with internal
8174            linkage, we already know what object file linkage will be
8175            assigned to the instantiation.  */
8176         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8177         DECL_DEFER_OUTPUT (r) = 0;
8178         TREE_CHAIN (r) = NULL_TREE;
8179         DECL_PENDING_INLINE_INFO (r) = 0;
8180         DECL_PENDING_INLINE_P (r) = 0;
8181         DECL_SAVED_TREE (r) = NULL_TREE;
8182         TREE_USED (r) = 0;
8183         if (DECL_CLONED_FUNCTION (r))
8184           {
8185             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8186                                                args, complain, t);
8187             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8188             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8189           }
8190
8191         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8192            this in the special friend case mentioned above where
8193            GEN_TMPL is NULL.  */
8194         if (gen_tmpl)
8195           {
8196             DECL_TEMPLATE_INFO (r)
8197               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8198             SET_DECL_IMPLICIT_INSTANTIATION (r);
8199             register_specialization (r, gen_tmpl, argvec, false);
8200
8201             /* We're not supposed to instantiate default arguments
8202                until they are called, for a template.  But, for a
8203                declaration like:
8204
8205                  template <class T> void f ()
8206                  { extern void g(int i = T()); }
8207
8208                we should do the substitution when the template is
8209                instantiated.  We handle the member function case in
8210                instantiate_class_template since the default arguments
8211                might refer to other members of the class.  */
8212             if (!member
8213                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8214                 && !uses_template_parms (argvec))
8215               tsubst_default_arguments (r);
8216           }
8217         else
8218           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8219
8220         /* Copy the list of befriending classes.  */
8221         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8222              *friends;
8223              friends = &TREE_CHAIN (*friends))
8224           {
8225             *friends = copy_node (*friends);
8226             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8227                                             args, complain,
8228                                             in_decl);
8229           }
8230
8231         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8232           {
8233             maybe_retrofit_in_chrg (r);
8234             if (DECL_CONSTRUCTOR_P (r))
8235               grok_ctor_properties (ctx, r);
8236             /* If this is an instantiation of a member template, clone it.
8237                If it isn't, that'll be handled by
8238                clone_constructors_and_destructors.  */
8239             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8240               clone_function_decl (r, /*update_method_vec_p=*/0);
8241           }
8242         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8243                  && !grok_op_properties (r, (complain & tf_error) != 0))
8244           return error_mark_node;
8245
8246         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8247           SET_DECL_FRIEND_CONTEXT (r,
8248                                    tsubst (DECL_FRIEND_CONTEXT (t),
8249                                             args, complain, in_decl));
8250
8251         /* Possibly limit visibility based on template args.  */
8252         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8253         if (DECL_VISIBILITY_SPECIFIED (t))
8254           {
8255             DECL_VISIBILITY_SPECIFIED (r) = 0;
8256             DECL_ATTRIBUTES (r)
8257               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8258           }
8259         determine_visibility (r);
8260
8261         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8262                                         args, complain, in_decl);
8263       }
8264       break;
8265
8266     case PARM_DECL:
8267       {
8268         tree type = NULL_TREE;
8269         int i, len = 1;
8270         tree expanded_types = NULL_TREE;
8271         tree prev_r = NULL_TREE;
8272         tree first_r = NULL_TREE;
8273
8274         if (FUNCTION_PARAMETER_PACK_P (t))
8275           {
8276             /* If there is a local specialization that isn't a
8277                parameter pack, it means that we're doing a "simple"
8278                substitution from inside tsubst_pack_expansion. Just
8279                return the local specialization (which will be a single
8280                parm).  */
8281             tree spec = retrieve_local_specialization (t);
8282             if (spec 
8283                 && TREE_CODE (spec) == PARM_DECL
8284                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8285               return spec;
8286
8287             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8288                the parameters in this function parameter pack.  */
8289             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8290                                                     complain, in_decl);
8291             if (TREE_CODE (expanded_types) == TREE_VEC)
8292               {
8293                 len = TREE_VEC_LENGTH (expanded_types);
8294
8295                 /* Zero-length parameter packs are boring. Just substitute
8296                    into the chain.  */
8297                 if (len == 0)
8298                   return tsubst (TREE_CHAIN (t), args, complain, 
8299                                  TREE_CHAIN (t));
8300               }
8301             else
8302               {
8303                 /* All we did was update the type. Make a note of that.  */
8304                 type = expanded_types;
8305                 expanded_types = NULL_TREE;
8306               }
8307           }
8308
8309         /* Loop through all of the parameter's we'll build. When T is
8310            a function parameter pack, LEN is the number of expanded
8311            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8312         r = NULL_TREE;
8313         for (i = 0; i < len; ++i)
8314           {
8315             prev_r = r;
8316             r = copy_node (t);
8317             if (DECL_TEMPLATE_PARM_P (t))
8318               SET_DECL_TEMPLATE_PARM_P (r);
8319
8320             if (expanded_types)
8321               /* We're on the Ith parameter of the function parameter
8322                  pack.  */
8323               {
8324                 /* Get the Ith type.  */
8325                 type = TREE_VEC_ELT (expanded_types, i);
8326
8327                 if (DECL_NAME (r))
8328                   /* Rename the parameter to include the index.  */
8329                   DECL_NAME (r) =
8330                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8331               }
8332             else if (!type)
8333               /* We're dealing with a normal parameter.  */
8334               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8335
8336             type = type_decays_to (type);
8337             TREE_TYPE (r) = type;
8338             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8339
8340             if (DECL_INITIAL (r))
8341               {
8342                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8343                   DECL_INITIAL (r) = TREE_TYPE (r);
8344                 else
8345                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8346                                              complain, in_decl);
8347               }
8348
8349             DECL_CONTEXT (r) = NULL_TREE;
8350
8351             if (!DECL_TEMPLATE_PARM_P (r))
8352               DECL_ARG_TYPE (r) = type_passed_as (type);
8353
8354             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8355                                             args, complain, in_decl);
8356
8357             /* Keep track of the first new parameter we
8358                generate. That's what will be returned to the
8359                caller.  */
8360             if (!first_r)
8361               first_r = r;
8362
8363             /* Build a proper chain of parameters when substituting
8364                into a function parameter pack.  */
8365             if (prev_r)
8366               TREE_CHAIN (prev_r) = r;
8367           }
8368
8369         if (TREE_CHAIN (t))
8370           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8371                                    complain, TREE_CHAIN (t));
8372
8373         /* FIRST_R contains the start of the chain we've built.  */
8374         r = first_r;
8375       }
8376       break;
8377
8378     case FIELD_DECL:
8379       {
8380         tree type;
8381
8382         r = copy_decl (t);
8383         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8384         if (type == error_mark_node)
8385           return error_mark_node;
8386         TREE_TYPE (r) = type;
8387         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8388
8389         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8390         DECL_INITIAL (r)
8391           = tsubst_expr (DECL_INITIAL (t), args,
8392                          complain, in_decl,
8393                          /*integral_constant_expression_p=*/true);
8394         /* We don't have to set DECL_CONTEXT here; it is set by
8395            finish_member_declaration.  */
8396         TREE_CHAIN (r) = NULL_TREE;
8397         if (VOID_TYPE_P (type))
8398           error ("instantiation of %q+D as type %qT", r, type);
8399
8400         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8401                                         args, complain, in_decl);
8402       }
8403       break;
8404
8405     case USING_DECL:
8406       /* We reach here only for member using decls.  */
8407       if (DECL_DEPENDENT_P (t))
8408         {
8409           r = do_class_using_decl
8410             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8411              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8412           if (!r)
8413             r = error_mark_node;
8414         }
8415       else
8416         {
8417           r = copy_node (t);
8418           TREE_CHAIN (r) = NULL_TREE;
8419         }
8420       break;
8421
8422     case TYPE_DECL:
8423     case VAR_DECL:
8424       {
8425         tree argvec = NULL_TREE;
8426         tree gen_tmpl = NULL_TREE;
8427         tree spec;
8428         tree tmpl = NULL_TREE;
8429         tree ctx;
8430         tree type = NULL_TREE;
8431         bool local_p;
8432
8433         if (TREE_CODE (t) == TYPE_DECL
8434             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8435           {
8436             /* If this is the canonical decl, we don't have to
8437                mess with instantiations, and often we can't (for
8438                typename, template type parms and such).  Note that
8439                TYPE_NAME is not correct for the above test if
8440                we've copied the type for a typedef.  */
8441             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8442             if (type == error_mark_node)
8443               return error_mark_node;
8444             r = TYPE_NAME (type);
8445             break;
8446           }
8447
8448         /* Check to see if we already have the specialization we
8449            need.  */
8450         spec = NULL_TREE;
8451         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8452           {
8453             /* T is a static data member or namespace-scope entity.
8454                We have to substitute into namespace-scope variables
8455                (even though such entities are never templates) because
8456                of cases like:
8457                
8458                  template <class T> void f() { extern T t; }
8459
8460                where the entity referenced is not known until
8461                instantiation time.  */
8462             local_p = false;
8463             ctx = DECL_CONTEXT (t);
8464             if (DECL_CLASS_SCOPE_P (t))
8465               {
8466                 ctx = tsubst_aggr_type (ctx, args,
8467                                         complain,
8468                                         in_decl, /*entering_scope=*/1);
8469                 /* If CTX is unchanged, then T is in fact the
8470                    specialization we want.  That situation occurs when
8471                    referencing a static data member within in its own
8472                    class.  We can use pointer equality, rather than
8473                    same_type_p, because DECL_CONTEXT is always
8474                    canonical.  */
8475                 if (ctx == DECL_CONTEXT (t))
8476                   spec = t;
8477               }
8478
8479             if (!spec)
8480               {
8481                 tmpl = DECL_TI_TEMPLATE (t);
8482                 gen_tmpl = most_general_template (tmpl);
8483                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8484                 spec = (retrieve_specialization 
8485                         (gen_tmpl, argvec,
8486                          /*class_specializations_p=*/false));
8487               }
8488           }
8489         else
8490           {
8491             /* A local variable.  */
8492             local_p = true;
8493             /* Subsequent calls to pushdecl will fill this in.  */
8494             ctx = NULL_TREE;
8495             spec = retrieve_local_specialization (t);
8496           }
8497         /* If we already have the specialization we need, there is
8498            nothing more to do.  */ 
8499         if (spec)
8500           {
8501             r = spec;
8502             break;
8503           }
8504
8505         /* Create a new node for the specialization we need.  */
8506         r = copy_decl (t);
8507         if (type == NULL_TREE)
8508           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8509         if (TREE_CODE (r) == VAR_DECL)
8510           {
8511             /* Even if the original location is out of scope, the
8512                newly substituted one is not.  */
8513             DECL_DEAD_FOR_LOCAL (r) = 0;
8514             DECL_INITIALIZED_P (r) = 0;
8515             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8516             if (type == error_mark_node)
8517               return error_mark_node;
8518             if (TREE_CODE (type) == FUNCTION_TYPE)
8519               {
8520                 /* It may seem that this case cannot occur, since:
8521
8522                      typedef void f();
8523                      void g() { f x; }
8524
8525                    declares a function, not a variable.  However:
8526       
8527                      typedef void f();
8528                      template <typename T> void g() { T t; }
8529                      template void g<f>();
8530
8531                    is an attempt to declare a variable with function
8532                    type.  */
8533                 error ("variable %qD has function type",
8534                        /* R is not yet sufficiently initialized, so we
8535                           just use its name.  */
8536                        DECL_NAME (r));
8537                 return error_mark_node;
8538               }
8539             type = complete_type (type);
8540             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8541               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8542             type = check_var_type (DECL_NAME (r), type);
8543
8544             if (DECL_HAS_VALUE_EXPR_P (t))
8545               {
8546                 tree ve = DECL_VALUE_EXPR (t);
8547                 ve = tsubst_expr (ve, args, complain, in_decl,
8548                                   /*constant_expression_p=*/false);
8549                 SET_DECL_VALUE_EXPR (r, ve);
8550               }
8551           }
8552         else if (DECL_SELF_REFERENCE_P (t))
8553           SET_DECL_SELF_REFERENCE_P (r);
8554         TREE_TYPE (r) = type;
8555         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8556         DECL_CONTEXT (r) = ctx;
8557         /* Clear out the mangled name and RTL for the instantiation.  */
8558         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8559         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8560           SET_DECL_RTL (r, NULL_RTX);
8561         /* The initializer must not be expanded until it is required;
8562            see [temp.inst].  */
8563         DECL_INITIAL (r) = NULL_TREE;
8564         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8565           SET_DECL_RTL (r, NULL_RTX);
8566         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8567         if (TREE_CODE (r) == VAR_DECL)
8568           {
8569             /* Possibly limit visibility based on template args.  */
8570             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8571             if (DECL_VISIBILITY_SPECIFIED (t))
8572               {
8573                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8574                 DECL_ATTRIBUTES (r)
8575                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8576               }
8577             determine_visibility (r);
8578           }
8579         /* Preserve a typedef that names a type.  */
8580         else if (TREE_CODE (r) == TYPE_DECL
8581                  && DECL_ORIGINAL_TYPE (t)
8582                  && type != error_mark_node)
8583           {
8584             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8585                                              args, complain, in_decl);
8586             TREE_TYPE (r) = type = build_variant_type_copy (type);
8587             TYPE_NAME (type) = r;
8588           }
8589
8590         if (!local_p)
8591           {
8592             /* A static data member declaration is always marked
8593                external when it is declared in-class, even if an
8594                initializer is present.  We mimic the non-template
8595                processing here.  */
8596             DECL_EXTERNAL (r) = 1;
8597
8598             register_specialization (r, gen_tmpl, argvec, false);
8599             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8600             SET_DECL_IMPLICIT_INSTANTIATION (r);
8601           }
8602         else
8603           register_local_specialization (r, t);
8604
8605         TREE_CHAIN (r) = NULL_TREE;
8606
8607         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8608                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8609                                         args, complain, in_decl);
8610         layout_decl (r, 0);
8611       }
8612       break;
8613
8614     default:
8615       gcc_unreachable ();
8616     }
8617
8618   /* Restore the file and line information.  */
8619   input_location = saved_loc;
8620
8621   return r;
8622 }
8623
8624 /* Substitute into the ARG_TYPES of a function type.  */
8625
8626 static tree
8627 tsubst_arg_types (tree arg_types,
8628                   tree args,
8629                   tsubst_flags_t complain,
8630                   tree in_decl)
8631 {
8632   tree remaining_arg_types;
8633   tree type = NULL_TREE;
8634   int i = 1;
8635   tree expanded_args = NULL_TREE;
8636   tree default_arg;
8637
8638   if (!arg_types || arg_types == void_list_node)
8639     return arg_types;
8640
8641   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8642                                           args, complain, in_decl);
8643   if (remaining_arg_types == error_mark_node)
8644     return error_mark_node;
8645
8646   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8647     {
8648       /* For a pack expansion, perform substitution on the
8649          entire expression. Later on, we'll handle the arguments
8650          one-by-one.  */
8651       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8652                                             args, complain, in_decl);
8653
8654       if (TREE_CODE (expanded_args) == TREE_VEC)
8655         /* So that we'll spin through the parameters, one by one.  */
8656         i = TREE_VEC_LENGTH (expanded_args);
8657       else
8658         {
8659           /* We only partially substituted into the parameter
8660              pack. Our type is TYPE_PACK_EXPANSION.  */
8661           type = expanded_args;
8662           expanded_args = NULL_TREE;
8663         }
8664     }
8665
8666   while (i > 0) {
8667     --i;
8668     
8669     if (expanded_args)
8670       type = TREE_VEC_ELT (expanded_args, i);
8671     else if (!type)
8672       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8673
8674     if (type == error_mark_node)
8675       return error_mark_node;
8676     if (VOID_TYPE_P (type))
8677       {
8678         if (complain & tf_error)
8679           {
8680             error ("invalid parameter type %qT", type);
8681             if (in_decl)
8682               error ("in declaration %q+D", in_decl);
8683           }
8684         return error_mark_node;
8685     }
8686     
8687     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8688        top-level qualifiers as required.  */
8689     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8690
8691     /* We do not substitute into default arguments here.  The standard
8692        mandates that they be instantiated only when needed, which is
8693        done in build_over_call.  */
8694     default_arg = TREE_PURPOSE (arg_types);
8695
8696     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8697       {
8698         /* We've instantiated a template before its default arguments
8699            have been parsed.  This can happen for a nested template
8700            class, and is not an error unless we require the default
8701            argument in a call of this function.  */
8702         remaining_arg_types = 
8703           tree_cons (default_arg, type, remaining_arg_types);
8704         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8705                        remaining_arg_types);
8706       }
8707     else
8708       remaining_arg_types = 
8709         hash_tree_cons (default_arg, type, remaining_arg_types);
8710   }
8711         
8712   return remaining_arg_types;
8713 }
8714
8715 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8716    *not* handle the exception-specification for FNTYPE, because the
8717    initial substitution of explicitly provided template parameters
8718    during argument deduction forbids substitution into the
8719    exception-specification:
8720
8721      [temp.deduct]
8722
8723      All references in the function type of the function template to  the
8724      corresponding template parameters are replaced by the specified tem-
8725      plate argument values.  If a substitution in a template parameter or
8726      in  the function type of the function template results in an invalid
8727      type, type deduction fails.  [Note: The equivalent  substitution  in
8728      exception specifications is done only when the function is instanti-
8729      ated, at which point a program is  ill-formed  if  the  substitution
8730      results in an invalid type.]  */
8731
8732 static tree
8733 tsubst_function_type (tree t,
8734                       tree args,
8735                       tsubst_flags_t complain,
8736                       tree in_decl)
8737 {
8738   tree return_type;
8739   tree arg_types;
8740   tree fntype;
8741
8742   /* The TYPE_CONTEXT is not used for function/method types.  */
8743   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8744
8745   /* Substitute the return type.  */
8746   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8747   if (return_type == error_mark_node)
8748     return error_mark_node;
8749   /* The standard does not presently indicate that creation of a
8750      function type with an invalid return type is a deduction failure.
8751      However, that is clearly analogous to creating an array of "void"
8752      or a reference to a reference.  This is core issue #486.  */
8753   if (TREE_CODE (return_type) == ARRAY_TYPE
8754       || TREE_CODE (return_type) == FUNCTION_TYPE)
8755     {
8756       if (complain & tf_error)
8757         {
8758           if (TREE_CODE (return_type) == ARRAY_TYPE)
8759             error ("function returning an array");
8760           else
8761             error ("function returning a function");
8762         }
8763       return error_mark_node;
8764     }
8765
8766   /* Substitute the argument types.  */
8767   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8768                                 complain, in_decl);
8769   if (arg_types == error_mark_node)
8770     return error_mark_node;
8771
8772   /* Construct a new type node and return it.  */
8773   if (TREE_CODE (t) == FUNCTION_TYPE)
8774     fntype = build_function_type (return_type, arg_types);
8775   else
8776     {
8777       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8778       if (! MAYBE_CLASS_TYPE_P (r))
8779         {
8780           /* [temp.deduct]
8781
8782              Type deduction may fail for any of the following
8783              reasons:
8784
8785              -- Attempting to create "pointer to member of T" when T
8786              is not a class type.  */
8787           if (complain & tf_error)
8788             error ("creating pointer to member function of non-class type %qT",
8789                       r);
8790           return error_mark_node;
8791         }
8792
8793       fntype = build_method_type_directly (r, return_type,
8794                                            TREE_CHAIN (arg_types));
8795     }
8796   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8797   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8798
8799   return fntype;
8800 }
8801
8802 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8803    ARGS into that specification, and return the substituted
8804    specification.  If there is no specification, return NULL_TREE.  */
8805
8806 static tree
8807 tsubst_exception_specification (tree fntype,
8808                                 tree args,
8809                                 tsubst_flags_t complain,
8810                                 tree in_decl)
8811 {
8812   tree specs;
8813   tree new_specs;
8814
8815   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8816   new_specs = NULL_TREE;
8817   if (specs)
8818     {
8819       if (! TREE_VALUE (specs))
8820         new_specs = specs;
8821       else
8822         while (specs)
8823           {
8824             tree spec;
8825             int i, len = 1;
8826             tree expanded_specs = NULL_TREE;
8827
8828             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8829               {
8830                 /* Expand the pack expansion type.  */
8831                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8832                                                        args, complain,
8833                                                        in_decl);
8834
8835                 if (expanded_specs == error_mark_node)
8836                   return error_mark_node;
8837                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8838                   len = TREE_VEC_LENGTH (expanded_specs);
8839                 else
8840                   {
8841                     /* We're substituting into a member template, so
8842                        we got a TYPE_PACK_EXPANSION back.  Add that
8843                        expansion and move on.  */
8844                     gcc_assert (TREE_CODE (expanded_specs) 
8845                                 == TYPE_PACK_EXPANSION);
8846                     new_specs = add_exception_specifier (new_specs,
8847                                                          expanded_specs,
8848                                                          complain);
8849                     specs = TREE_CHAIN (specs);
8850                     continue;
8851                   }
8852               }
8853
8854             for (i = 0; i < len; ++i)
8855               {
8856                 if (expanded_specs)
8857                   spec = TREE_VEC_ELT (expanded_specs, i);
8858                 else
8859                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8860                 if (spec == error_mark_node)
8861                   return spec;
8862                 new_specs = add_exception_specifier (new_specs, spec, 
8863                                                      complain);
8864               }
8865
8866             specs = TREE_CHAIN (specs);
8867           }
8868     }
8869   return new_specs;
8870 }
8871
8872 /* Take the tree structure T and replace template parameters used
8873    therein with the argument vector ARGS.  IN_DECL is an associated
8874    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8875    Issue error and warning messages under control of COMPLAIN.  Note
8876    that we must be relatively non-tolerant of extensions here, in
8877    order to preserve conformance; if we allow substitutions that
8878    should not be allowed, we may allow argument deductions that should
8879    not succeed, and therefore report ambiguous overload situations
8880    where there are none.  In theory, we could allow the substitution,
8881    but indicate that it should have failed, and allow our caller to
8882    make sure that the right thing happens, but we don't try to do this
8883    yet.
8884
8885    This function is used for dealing with types, decls and the like;
8886    for expressions, use tsubst_expr or tsubst_copy.  */
8887
8888 static tree
8889 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8890 {
8891   tree type, r;
8892
8893   if (t == NULL_TREE || t == error_mark_node
8894       || t == integer_type_node
8895       || t == void_type_node
8896       || t == char_type_node
8897       || t == unknown_type_node
8898       || TREE_CODE (t) == NAMESPACE_DECL)
8899     return t;
8900
8901   if (DECL_P (t))
8902     return tsubst_decl (t, args, complain);
8903
8904   if (TREE_CODE (t) == IDENTIFIER_NODE)
8905     type = IDENTIFIER_TYPE_VALUE (t);
8906   else
8907     type = TREE_TYPE (t);
8908
8909   gcc_assert (type != unknown_type_node);
8910
8911   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8912      such as attribute aligned.  */
8913   if (TYPE_P (t)
8914       && TYPE_NAME (t)
8915       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8916     {
8917       tree decl = TYPE_NAME (t);
8918       
8919       if (DECL_CLASS_SCOPE_P (decl)
8920           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
8921           && uses_template_parms (DECL_CONTEXT (decl)))
8922         {
8923           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8924           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8925           r = retrieve_specialization (tmpl, gen_args, false);
8926         }
8927       else if (DECL_FUNCTION_SCOPE_P (decl)
8928                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
8929                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
8930         r = retrieve_local_specialization (decl);
8931       else
8932         /* The typedef is from a non-template context.  */
8933         return t;
8934
8935       if (r)
8936         {
8937           r = TREE_TYPE (r);
8938           r = cp_build_qualified_type_real
8939             (r, cp_type_quals (t) | cp_type_quals (r),
8940              complain | tf_ignore_bad_quals);
8941           return r;
8942         }
8943       /* Else we must be instantiating the typedef, so fall through.  */
8944     }
8945
8946   if (type
8947       && TREE_CODE (t) != TYPENAME_TYPE
8948       && TREE_CODE (t) != IDENTIFIER_NODE
8949       && TREE_CODE (t) != FUNCTION_TYPE
8950       && TREE_CODE (t) != METHOD_TYPE)
8951     type = tsubst (type, args, complain, in_decl);
8952   if (type == error_mark_node)
8953     return error_mark_node;
8954
8955   switch (TREE_CODE (t))
8956     {
8957     case RECORD_TYPE:
8958     case UNION_TYPE:
8959     case ENUMERAL_TYPE:
8960       return tsubst_aggr_type (t, args, complain, in_decl,
8961                                /*entering_scope=*/0);
8962
8963     case ERROR_MARK:
8964     case IDENTIFIER_NODE:
8965     case VOID_TYPE:
8966     case REAL_TYPE:
8967     case COMPLEX_TYPE:
8968     case VECTOR_TYPE:
8969     case BOOLEAN_TYPE:
8970     case INTEGER_CST:
8971     case REAL_CST:
8972     case STRING_CST:
8973       return t;
8974
8975     case INTEGER_TYPE:
8976       if (t == integer_type_node)
8977         return t;
8978
8979       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8980           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8981         return t;
8982
8983       {
8984         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8985
8986         max = tsubst_expr (omax, args, complain, in_decl,
8987                            /*integral_constant_expression_p=*/false);
8988         max = fold_decl_constant_value (max);
8989
8990         if (TREE_CODE (max) != INTEGER_CST
8991             && !at_function_scope_p ()
8992             && !value_dependent_expression_p (max))
8993           {
8994             if (complain & tf_error)
8995               error ("array bound is not an integer constant");
8996             return error_mark_node;
8997           }
8998
8999         /* [temp.deduct]
9000
9001            Type deduction may fail for any of the following
9002            reasons:
9003
9004              Attempting to create an array with a size that is
9005              zero or negative.  */
9006         if (integer_zerop (max) && !(complain & tf_error))
9007           /* We must fail if performing argument deduction (as
9008              indicated by the state of complain), so that
9009              another substitution can be found.  */
9010           return error_mark_node;
9011         else if (TREE_CODE (max) == INTEGER_CST
9012                  && INT_CST_LT (max, integer_zero_node))
9013           {
9014             if (complain & tf_error)
9015               error ("creating array with negative size (%qE)", max);
9016
9017             return error_mark_node;
9018           }
9019
9020         return compute_array_index_type (NULL_TREE, max);
9021       }
9022
9023     case TEMPLATE_TYPE_PARM:
9024     case TEMPLATE_TEMPLATE_PARM:
9025     case BOUND_TEMPLATE_TEMPLATE_PARM:
9026     case TEMPLATE_PARM_INDEX:
9027       {
9028         int idx;
9029         int level;
9030         int levels;
9031         tree arg = NULL_TREE;
9032
9033         r = NULL_TREE;
9034
9035         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9036         template_parm_level_and_index (t, &level, &idx); 
9037
9038         levels = TMPL_ARGS_DEPTH (args);
9039         if (level <= levels)
9040           {
9041             arg = TMPL_ARG (args, level, idx);
9042
9043             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9044               /* See through ARGUMENT_PACK_SELECT arguments. */
9045               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9046           }
9047
9048         if (arg == error_mark_node)
9049           return error_mark_node;
9050         else if (arg != NULL_TREE)
9051           {
9052             if (ARGUMENT_PACK_P (arg))
9053               /* If ARG is an argument pack, we don't actually want to
9054                  perform a substitution here, because substitutions
9055                  for argument packs are only done
9056                  element-by-element. We can get to this point when
9057                  substituting the type of a non-type template
9058                  parameter pack, when that type actually contains
9059                  template parameter packs from an outer template, e.g.,
9060
9061                  template<typename... Types> struct A {
9062                    template<Types... Values> struct B { };
9063                  };  */
9064               return t;
9065
9066             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9067               {
9068                 int quals;
9069                 gcc_assert (TYPE_P (arg));
9070
9071                 /* cv-quals from the template are discarded when
9072                    substituting in a function or reference type.  */
9073                 if (TREE_CODE (arg) == FUNCTION_TYPE
9074                     || TREE_CODE (arg) == METHOD_TYPE
9075                     || TREE_CODE (arg) == REFERENCE_TYPE)
9076                   quals = cp_type_quals (arg);
9077                 else
9078                   quals = cp_type_quals (arg) | cp_type_quals (t);
9079                   
9080                 return cp_build_qualified_type_real
9081                   (arg, quals, complain | tf_ignore_bad_quals);
9082               }
9083             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9084               {
9085                 /* We are processing a type constructed from a
9086                    template template parameter.  */
9087                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9088                                       args, complain, in_decl);
9089                 if (argvec == error_mark_node)
9090                   return error_mark_node;
9091
9092                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9093                    are resolving nested-types in the signature of a
9094                    member function templates.  Otherwise ARG is a
9095                    TEMPLATE_DECL and is the real template to be
9096                    instantiated.  */
9097                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9098                   arg = TYPE_NAME (arg);
9099
9100                 r = lookup_template_class (arg,
9101                                            argvec, in_decl,
9102                                            DECL_CONTEXT (arg),
9103                                             /*entering_scope=*/0,
9104                                            complain);
9105                 return cp_build_qualified_type_real
9106                   (r, TYPE_QUALS (t), complain);
9107               }
9108             else
9109               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9110               return arg;
9111           }
9112
9113         if (level == 1)
9114           /* This can happen during the attempted tsubst'ing in
9115              unify.  This means that we don't yet have any information
9116              about the template parameter in question.  */
9117           return t;
9118
9119         /* If we get here, we must have been looking at a parm for a
9120            more deeply nested template.  Make a new version of this
9121            template parameter, but with a lower level.  */
9122         switch (TREE_CODE (t))
9123           {
9124           case TEMPLATE_TYPE_PARM:
9125           case TEMPLATE_TEMPLATE_PARM:
9126           case BOUND_TEMPLATE_TEMPLATE_PARM:
9127             if (cp_type_quals (t))
9128               {
9129                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9130                 r = cp_build_qualified_type_real
9131                   (r, cp_type_quals (t),
9132                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9133                                ? tf_ignore_bad_quals : 0));
9134               }
9135             else
9136               {
9137                 r = copy_type (t);
9138                 TEMPLATE_TYPE_PARM_INDEX (r)
9139                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9140                                                 r, levels, args, complain);
9141                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9142                 TYPE_MAIN_VARIANT (r) = r;
9143                 TYPE_POINTER_TO (r) = NULL_TREE;
9144                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9145
9146                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9147                   /* We have reduced the level of the template
9148                      template parameter, but not the levels of its
9149                      template parameters, so canonical_type_parameter
9150                      will not be able to find the canonical template
9151                      template parameter for this level. Thus, we
9152                      require structural equality checking to compare
9153                      TEMPLATE_TEMPLATE_PARMs. */
9154                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9155                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9156                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9157                 else
9158                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9159
9160                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9161                   {
9162                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9163                                           complain, in_decl);
9164                     if (argvec == error_mark_node)
9165                       return error_mark_node;
9166
9167                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9168                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9169                   }
9170               }
9171             break;
9172
9173           case TEMPLATE_PARM_INDEX:
9174             r = reduce_template_parm_level (t, type, levels, args, complain);
9175             break;
9176
9177           default:
9178             gcc_unreachable ();
9179           }
9180
9181         return r;
9182       }
9183
9184     case TREE_LIST:
9185       {
9186         tree purpose, value, chain;
9187
9188         if (t == void_list_node)
9189           return t;
9190
9191         purpose = TREE_PURPOSE (t);
9192         if (purpose)
9193           {
9194             purpose = tsubst (purpose, args, complain, in_decl);
9195             if (purpose == error_mark_node)
9196               return error_mark_node;
9197           }
9198         value = TREE_VALUE (t);
9199         if (value)
9200           {
9201             value = tsubst (value, args, complain, in_decl);
9202             if (value == error_mark_node)
9203               return error_mark_node;
9204           }
9205         chain = TREE_CHAIN (t);
9206         if (chain && chain != void_type_node)
9207           {
9208             chain = tsubst (chain, args, complain, in_decl);
9209             if (chain == error_mark_node)
9210               return error_mark_node;
9211           }
9212         if (purpose == TREE_PURPOSE (t)
9213             && value == TREE_VALUE (t)
9214             && chain == TREE_CHAIN (t))
9215           return t;
9216         return hash_tree_cons (purpose, value, chain);
9217       }
9218
9219     case TREE_BINFO:
9220       /* We should never be tsubsting a binfo.  */
9221       gcc_unreachable ();
9222
9223     case TREE_VEC:
9224       /* A vector of template arguments.  */
9225       gcc_assert (!type);
9226       return tsubst_template_args (t, args, complain, in_decl);
9227
9228     case POINTER_TYPE:
9229     case REFERENCE_TYPE:
9230       {
9231         enum tree_code code;
9232
9233         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9234           return t;
9235
9236         code = TREE_CODE (t);
9237
9238
9239         /* [temp.deduct]
9240
9241            Type deduction may fail for any of the following
9242            reasons:
9243
9244            -- Attempting to create a pointer to reference type.
9245            -- Attempting to create a reference to a reference type or
9246               a reference to void.
9247
9248           Core issue 106 says that creating a reference to a reference
9249           during instantiation is no longer a cause for failure. We
9250           only enforce this check in strict C++98 mode.  */
9251         if ((TREE_CODE (type) == REFERENCE_TYPE
9252              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9253             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9254           {
9255             static location_t last_loc;
9256
9257             /* We keep track of the last time we issued this error
9258                message to avoid spewing a ton of messages during a
9259                single bad template instantiation.  */
9260             if (complain & tf_error
9261                 && last_loc != input_location)
9262               {
9263                 if (TREE_CODE (type) == VOID_TYPE)
9264                   error ("forming reference to void");
9265                 else
9266                   error ("forming %s to reference type %qT",
9267                          (code == POINTER_TYPE) ? "pointer" : "reference",
9268                          type);
9269                 last_loc = input_location;
9270               }
9271
9272             return error_mark_node;
9273           }
9274         else if (code == POINTER_TYPE)
9275           {
9276             r = build_pointer_type (type);
9277             if (TREE_CODE (type) == METHOD_TYPE)
9278               r = build_ptrmemfunc_type (r);
9279           }
9280         else if (TREE_CODE (type) == REFERENCE_TYPE)
9281           /* In C++0x, during template argument substitution, when there is an
9282              attempt to create a reference to a reference type, reference
9283              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9284
9285              "If a template-argument for a template-parameter T names a type
9286              that is a reference to a type A, an attempt to create the type
9287              'lvalue reference to cv T' creates the type 'lvalue reference to
9288              A,' while an attempt to create the type type rvalue reference to
9289              cv T' creates the type T"
9290           */
9291           r = cp_build_reference_type
9292               (TREE_TYPE (type),
9293                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9294         else
9295           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9296         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9297
9298         if (r != error_mark_node)
9299           /* Will this ever be needed for TYPE_..._TO values?  */
9300           layout_type (r);
9301
9302         return r;
9303       }
9304     case OFFSET_TYPE:
9305       {
9306         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9307         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9308           {
9309             /* [temp.deduct]
9310
9311                Type deduction may fail for any of the following
9312                reasons:
9313
9314                -- Attempting to create "pointer to member of T" when T
9315                   is not a class type.  */
9316             if (complain & tf_error)
9317               error ("creating pointer to member of non-class type %qT", r);
9318             return error_mark_node;
9319           }
9320         if (TREE_CODE (type) == REFERENCE_TYPE)
9321           {
9322             if (complain & tf_error)
9323               error ("creating pointer to member reference type %qT", type);
9324             return error_mark_node;
9325           }
9326         if (TREE_CODE (type) == VOID_TYPE)
9327           {
9328             if (complain & tf_error)
9329               error ("creating pointer to member of type void");
9330             return error_mark_node;
9331           }
9332         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9333         if (TREE_CODE (type) == FUNCTION_TYPE)
9334           {
9335             /* The type of the implicit object parameter gets its
9336                cv-qualifiers from the FUNCTION_TYPE. */
9337             tree method_type;
9338             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9339                                                       cp_type_quals (type));
9340             tree memptr;
9341             method_type = build_method_type_directly (this_type,
9342                                                       TREE_TYPE (type),
9343                                                       TYPE_ARG_TYPES (type));
9344             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9345             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9346                                                  complain);
9347           }
9348         else
9349           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9350                                                TYPE_QUALS (t),
9351                                                complain);
9352       }
9353     case FUNCTION_TYPE:
9354     case METHOD_TYPE:
9355       {
9356         tree fntype;
9357         tree specs;
9358         fntype = tsubst_function_type (t, args, complain, in_decl);
9359         if (fntype == error_mark_node)
9360           return error_mark_node;
9361
9362         /* Substitute the exception specification.  */
9363         specs = tsubst_exception_specification (t, args, complain,
9364                                                 in_decl);
9365         if (specs == error_mark_node)
9366           return error_mark_node;
9367         if (specs)
9368           fntype = build_exception_variant (fntype, specs);
9369         return fntype;
9370       }
9371     case ARRAY_TYPE:
9372       {
9373         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9374         if (domain == error_mark_node)
9375           return error_mark_node;
9376
9377         /* As an optimization, we avoid regenerating the array type if
9378            it will obviously be the same as T.  */
9379         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9380           return t;
9381
9382         /* These checks should match the ones in grokdeclarator.
9383
9384            [temp.deduct]
9385
9386            The deduction may fail for any of the following reasons:
9387
9388            -- Attempting to create an array with an element type that
9389               is void, a function type, or a reference type, or [DR337]
9390               an abstract class type.  */
9391         if (TREE_CODE (type) == VOID_TYPE
9392             || TREE_CODE (type) == FUNCTION_TYPE
9393             || TREE_CODE (type) == REFERENCE_TYPE)
9394           {
9395             if (complain & tf_error)
9396               error ("creating array of %qT", type);
9397             return error_mark_node;
9398           }
9399         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9400           {
9401             if (complain & tf_error)
9402               error ("creating array of %qT, which is an abstract class type",
9403                      type);
9404             return error_mark_node;
9405           }
9406
9407         r = build_cplus_array_type (type, domain);
9408
9409         if (TYPE_USER_ALIGN (t))
9410           {
9411             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9412             TYPE_USER_ALIGN (r) = 1;
9413           }
9414
9415         return r;
9416       }
9417
9418     case PLUS_EXPR:
9419     case MINUS_EXPR:
9420       {
9421         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9422         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9423
9424         if (e1 == error_mark_node || e2 == error_mark_node)
9425           return error_mark_node;
9426
9427         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9428       }
9429
9430     case NEGATE_EXPR:
9431     case NOP_EXPR:
9432       {
9433         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9434         if (e == error_mark_node)
9435           return error_mark_node;
9436
9437         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9438       }
9439
9440     case TYPENAME_TYPE:
9441       {
9442         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9443                                      in_decl, /*entering_scope=*/1);
9444         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9445                               complain, in_decl);
9446
9447         if (ctx == error_mark_node || f == error_mark_node)
9448           return error_mark_node;
9449
9450         if (!MAYBE_CLASS_TYPE_P (ctx))
9451           {
9452             if (complain & tf_error)
9453               error ("%qT is not a class, struct, or union type", ctx);
9454             return error_mark_node;
9455           }
9456         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9457           {
9458             /* Normally, make_typename_type does not require that the CTX
9459                have complete type in order to allow things like:
9460
9461                  template <class T> struct S { typename S<T>::X Y; };
9462
9463                But, such constructs have already been resolved by this
9464                point, so here CTX really should have complete type, unless
9465                it's a partial instantiation.  */
9466             ctx = complete_type (ctx);
9467             if (!COMPLETE_TYPE_P (ctx))
9468               {
9469                 if (complain & tf_error)
9470                   cxx_incomplete_type_error (NULL_TREE, ctx);
9471                 return error_mark_node;
9472               }
9473           }
9474
9475         f = make_typename_type (ctx, f, typename_type,
9476                                 (complain & tf_error) | tf_keep_type_decl);
9477         if (f == error_mark_node)
9478           return f;
9479         if (TREE_CODE (f) == TYPE_DECL)
9480           {
9481             complain |= tf_ignore_bad_quals;
9482             f = TREE_TYPE (f);
9483           }
9484
9485         if (TREE_CODE (f) != TYPENAME_TYPE)
9486           {
9487             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9488               error ("%qT resolves to %qT, which is not an enumeration type",
9489                      t, f);
9490             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9491               error ("%qT resolves to %qT, which is is not a class type",
9492                      t, f);
9493           }
9494
9495         return cp_build_qualified_type_real
9496           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9497       }
9498
9499     case UNBOUND_CLASS_TEMPLATE:
9500       {
9501         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9502                                      in_decl, /*entering_scope=*/1);
9503         tree name = TYPE_IDENTIFIER (t);
9504         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9505
9506         if (ctx == error_mark_node || name == error_mark_node)
9507           return error_mark_node;
9508
9509         if (parm_list)
9510           parm_list = tsubst_template_parms (parm_list, args, complain);
9511         return make_unbound_class_template (ctx, name, parm_list, complain);
9512       }
9513
9514     case INDIRECT_REF:
9515     case ADDR_EXPR:
9516     case CALL_EXPR:
9517       gcc_unreachable ();
9518
9519     case ARRAY_REF:
9520       {
9521         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9522         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9523                                /*integral_constant_expression_p=*/false);
9524         if (e1 == error_mark_node || e2 == error_mark_node)
9525           return error_mark_node;
9526
9527         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9528       }
9529
9530     case SCOPE_REF:
9531       {
9532         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9533         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9534         if (e1 == error_mark_node || e2 == error_mark_node)
9535           return error_mark_node;
9536
9537         return build_qualified_name (/*type=*/NULL_TREE,
9538                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9539       }
9540
9541     case TYPEOF_TYPE:
9542       {
9543         tree type;
9544
9545         type = finish_typeof (tsubst_expr 
9546                               (TYPEOF_TYPE_EXPR (t), args,
9547                                complain, in_decl,
9548                                /*integral_constant_expression_p=*/false));
9549         return cp_build_qualified_type_real (type,
9550                                              cp_type_quals (t)
9551                                              | cp_type_quals (type),
9552                                              complain);
9553       }
9554
9555     case DECLTYPE_TYPE:
9556       {
9557         tree type;
9558
9559         type = 
9560           finish_decltype_type (tsubst_expr 
9561                                 (DECLTYPE_TYPE_EXPR (t), args,
9562                                  complain, in_decl,
9563                                  /*integral_constant_expression_p=*/false),
9564                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9565         return cp_build_qualified_type_real (type,
9566                                              cp_type_quals (t)
9567                                              | cp_type_quals (type),
9568                                              complain);
9569       }
9570
9571     case TYPE_ARGUMENT_PACK:
9572     case NONTYPE_ARGUMENT_PACK:
9573       {
9574         tree r = make_node (TREE_CODE (t));
9575         tree packed_out = 
9576           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9577                                 args,
9578                                 complain,
9579                                 in_decl);
9580         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9581
9582         /* For template nontype argument packs, also substitute into
9583            the type.  */
9584         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9585           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9586
9587         return r;
9588       }
9589       break;
9590
9591     default:
9592       sorry ("use of %qs in template",
9593              tree_code_name [(int) TREE_CODE (t)]);
9594       return error_mark_node;
9595     }
9596 }
9597
9598 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9599    type of the expression on the left-hand side of the "." or "->"
9600    operator.  */
9601
9602 static tree
9603 tsubst_baselink (tree baselink, tree object_type,
9604                  tree args, tsubst_flags_t complain, tree in_decl)
9605 {
9606     tree name;
9607     tree qualifying_scope;
9608     tree fns;
9609     tree optype;
9610     tree template_args = 0;
9611     bool template_id_p = false;
9612
9613     /* A baselink indicates a function from a base class.  Both the
9614        BASELINK_ACCESS_BINFO and the base class referenced may
9615        indicate bases of the template class, rather than the
9616        instantiated class.  In addition, lookups that were not
9617        ambiguous before may be ambiguous now.  Therefore, we perform
9618        the lookup again.  */
9619     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9620     qualifying_scope = tsubst (qualifying_scope, args,
9621                                complain, in_decl);
9622     fns = BASELINK_FUNCTIONS (baselink);
9623     optype = BASELINK_OPTYPE (baselink);
9624     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9625       {
9626         template_id_p = true;
9627         template_args = TREE_OPERAND (fns, 1);
9628         fns = TREE_OPERAND (fns, 0);
9629         if (template_args)
9630           template_args = tsubst_template_args (template_args, args,
9631                                                 complain, in_decl);
9632       }
9633     name = DECL_NAME (get_first_fn (fns));
9634     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9635
9636     /* If lookup found a single function, mark it as used at this
9637        point.  (If it lookup found multiple functions the one selected
9638        later by overload resolution will be marked as used at that
9639        point.)  */
9640     if (BASELINK_P (baselink))
9641       fns = BASELINK_FUNCTIONS (baselink);
9642     if (!template_id_p && !really_overloaded_fn (fns))
9643       mark_used (OVL_CURRENT (fns));
9644
9645     /* Add back the template arguments, if present.  */
9646     if (BASELINK_P (baselink) && template_id_p)
9647       BASELINK_FUNCTIONS (baselink)
9648         = build_nt (TEMPLATE_ID_EXPR,
9649                     BASELINK_FUNCTIONS (baselink),
9650                     template_args);
9651     /* Update the conversion operator type.  */
9652     BASELINK_OPTYPE (baselink) 
9653       = tsubst (optype, args, complain, in_decl);
9654
9655     if (!object_type)
9656       object_type = current_class_type;
9657     return adjust_result_of_qualified_name_lookup (baselink,
9658                                                    qualifying_scope,
9659                                                    object_type);
9660 }
9661
9662 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9663    true if the qualified-id will be a postfix-expression in-and-of
9664    itself; false if more of the postfix-expression follows the
9665    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9666    of "&".  */
9667
9668 static tree
9669 tsubst_qualified_id (tree qualified_id, tree args,
9670                      tsubst_flags_t complain, tree in_decl,
9671                      bool done, bool address_p)
9672 {
9673   tree expr;
9674   tree scope;
9675   tree name;
9676   bool is_template;
9677   tree template_args;
9678
9679   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9680
9681   /* Figure out what name to look up.  */
9682   name = TREE_OPERAND (qualified_id, 1);
9683   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9684     {
9685       is_template = true;
9686       template_args = TREE_OPERAND (name, 1);
9687       if (template_args)
9688         template_args = tsubst_template_args (template_args, args,
9689                                               complain, in_decl);
9690       name = TREE_OPERAND (name, 0);
9691     }
9692   else
9693     {
9694       is_template = false;
9695       template_args = NULL_TREE;
9696     }
9697
9698   /* Substitute into the qualifying scope.  When there are no ARGS, we
9699      are just trying to simplify a non-dependent expression.  In that
9700      case the qualifying scope may be dependent, and, in any case,
9701      substituting will not help.  */
9702   scope = TREE_OPERAND (qualified_id, 0);
9703   if (args)
9704     {
9705       scope = tsubst (scope, args, complain, in_decl);
9706       expr = tsubst_copy (name, args, complain, in_decl);
9707     }
9708   else
9709     expr = name;
9710
9711   if (dependent_type_p (scope))
9712     return build_qualified_name (/*type=*/NULL_TREE,
9713                                  scope, expr,
9714                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9715
9716   if (!BASELINK_P (name) && !DECL_P (expr))
9717     {
9718       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9719         /* If this were actually a destructor call, it would have been
9720            parsed as such by the parser.  */
9721         expr = error_mark_node;
9722       else
9723         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9724       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9725                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9726         {
9727           if (complain & tf_error)
9728             {
9729               error ("dependent-name %qE is parsed as a non-type, but "
9730                      "instantiation yields a type", qualified_id);
9731               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
9732             }
9733           return error_mark_node;
9734         }
9735     }
9736
9737   if (DECL_P (expr))
9738     {
9739       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9740                                            scope);
9741       /* Remember that there was a reference to this entity.  */
9742       mark_used (expr);
9743     }
9744
9745   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9746     {
9747       if (complain & tf_error)
9748         qualified_name_lookup_error (scope,
9749                                      TREE_OPERAND (qualified_id, 1),
9750                                      expr, input_location);
9751       return error_mark_node;
9752     }
9753
9754   if (is_template)
9755     expr = lookup_template_function (expr, template_args);
9756
9757   if (expr == error_mark_node && complain & tf_error)
9758     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9759                                  expr, input_location);
9760   else if (TYPE_P (scope))
9761     {
9762       expr = (adjust_result_of_qualified_name_lookup
9763               (expr, scope, current_class_type));
9764       expr = (finish_qualified_id_expr
9765               (scope, expr, done, address_p,
9766                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9767                /*template_arg_p=*/false));
9768     }
9769
9770   /* Expressions do not generally have reference type.  */
9771   if (TREE_CODE (expr) != SCOPE_REF
9772       /* However, if we're about to form a pointer-to-member, we just
9773          want the referenced member referenced.  */
9774       && TREE_CODE (expr) != OFFSET_REF)
9775     expr = convert_from_reference (expr);
9776
9777   return expr;
9778 }
9779
9780 /* Like tsubst, but deals with expressions.  This function just replaces
9781    template parms; to finish processing the resultant expression, use
9782    tsubst_expr.  */
9783
9784 static tree
9785 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9786 {
9787   enum tree_code code;
9788   tree r;
9789
9790   if (t == NULL_TREE || t == error_mark_node)
9791     return t;
9792
9793   code = TREE_CODE (t);
9794
9795   switch (code)
9796     {
9797     case PARM_DECL:
9798       r = retrieve_local_specialization (t);
9799       gcc_assert (r != NULL);
9800       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9801         r = ARGUMENT_PACK_SELECT_ARG (r);
9802       mark_used (r);
9803       return r;
9804
9805     case CONST_DECL:
9806       {
9807         tree enum_type;
9808         tree v;
9809
9810         if (DECL_TEMPLATE_PARM_P (t))
9811           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9812         /* There is no need to substitute into namespace-scope
9813            enumerators.  */
9814         if (DECL_NAMESPACE_SCOPE_P (t))
9815           return t;
9816         /* If ARGS is NULL, then T is known to be non-dependent.  */
9817         if (args == NULL_TREE)
9818           return integral_constant_value (t);
9819
9820         /* Unfortunately, we cannot just call lookup_name here.
9821            Consider:
9822
9823              template <int I> int f() {
9824              enum E { a = I };
9825              struct S { void g() { E e = a; } };
9826              };
9827
9828            When we instantiate f<7>::S::g(), say, lookup_name is not
9829            clever enough to find f<7>::a.  */
9830         enum_type
9831           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9832                               /*entering_scope=*/0);
9833
9834         for (v = TYPE_VALUES (enum_type);
9835              v != NULL_TREE;
9836              v = TREE_CHAIN (v))
9837           if (TREE_PURPOSE (v) == DECL_NAME (t))
9838             return TREE_VALUE (v);
9839
9840           /* We didn't find the name.  That should never happen; if
9841              name-lookup found it during preliminary parsing, we
9842              should find it again here during instantiation.  */
9843         gcc_unreachable ();
9844       }
9845       return t;
9846
9847     case FIELD_DECL:
9848       if (DECL_CONTEXT (t))
9849         {
9850           tree ctx;
9851
9852           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9853                                   /*entering_scope=*/1);
9854           if (ctx != DECL_CONTEXT (t))
9855             {
9856               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9857               if (!r)
9858                 {
9859                   if (complain & tf_error)
9860                     error ("using invalid field %qD", t);
9861                   return error_mark_node;
9862                 }
9863               return r;
9864             }
9865         }
9866
9867       return t;
9868
9869     case VAR_DECL:
9870     case FUNCTION_DECL:
9871       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9872           || local_variable_p (t))
9873         t = tsubst (t, args, complain, in_decl);
9874       mark_used (t);
9875       return t;
9876
9877     case BASELINK:
9878       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9879
9880     case TEMPLATE_DECL:
9881       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9882         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9883                        args, complain, in_decl);
9884       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9885         return tsubst (t, args, complain, in_decl);
9886       else if (DECL_CLASS_SCOPE_P (t)
9887                && uses_template_parms (DECL_CONTEXT (t)))
9888         {
9889           /* Template template argument like the following example need
9890              special treatment:
9891
9892                template <template <class> class TT> struct C {};
9893                template <class T> struct D {
9894                  template <class U> struct E {};
9895                  C<E> c;                                // #1
9896                };
9897                D<int> d;                                // #2
9898
9899              We are processing the template argument `E' in #1 for
9900              the template instantiation #2.  Originally, `E' is a
9901              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9902              have to substitute this with one having context `D<int>'.  */
9903
9904           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9905           return lookup_field (context, DECL_NAME(t), 0, false);
9906         }
9907       else
9908         /* Ordinary template template argument.  */
9909         return t;
9910
9911     case CAST_EXPR:
9912     case REINTERPRET_CAST_EXPR:
9913     case CONST_CAST_EXPR:
9914     case STATIC_CAST_EXPR:
9915     case DYNAMIC_CAST_EXPR:
9916     case NOP_EXPR:
9917       return build1
9918         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9919          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9920
9921     case SIZEOF_EXPR:
9922       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9923         {
9924           /* We only want to compute the number of arguments.  */
9925           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9926                                                 complain, in_decl);
9927           int len = 0;
9928
9929           if (TREE_CODE (expanded) == TREE_VEC)
9930             len = TREE_VEC_LENGTH (expanded);
9931
9932           if (expanded == error_mark_node)
9933             return error_mark_node;
9934           else if (PACK_EXPANSION_P (expanded)
9935                    || (TREE_CODE (expanded) == TREE_VEC
9936                        && len > 0
9937                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
9938             {
9939               if (TREE_CODE (expanded) == TREE_VEC)
9940                 expanded = TREE_VEC_ELT (expanded, len - 1);
9941
9942               if (TYPE_P (expanded))
9943                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
9944                                                    complain & tf_error);
9945               else
9946                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
9947                                                    complain & tf_error);
9948             }
9949           else
9950             return build_int_cst (size_type_node, len);
9951         }
9952       /* Fall through */
9953
9954     case INDIRECT_REF:
9955     case NEGATE_EXPR:
9956     case TRUTH_NOT_EXPR:
9957     case BIT_NOT_EXPR:
9958     case ADDR_EXPR:
9959     case UNARY_PLUS_EXPR:      /* Unary + */
9960     case ALIGNOF_EXPR:
9961     case ARROW_EXPR:
9962     case THROW_EXPR:
9963     case TYPEID_EXPR:
9964     case REALPART_EXPR:
9965     case IMAGPART_EXPR:
9966       return build1
9967         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9968          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9969
9970     case COMPONENT_REF:
9971       {
9972         tree object;
9973         tree name;
9974
9975         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9976         name = TREE_OPERAND (t, 1);
9977         if (TREE_CODE (name) == BIT_NOT_EXPR)
9978           {
9979             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9980                                 complain, in_decl);
9981             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9982           }
9983         else if (TREE_CODE (name) == SCOPE_REF
9984                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9985           {
9986             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9987                                      complain, in_decl);
9988             name = TREE_OPERAND (name, 1);
9989             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9990                                 complain, in_decl);
9991             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9992             name = build_qualified_name (/*type=*/NULL_TREE,
9993                                          base, name,
9994                                          /*template_p=*/false);
9995           }
9996         else if (TREE_CODE (name) == BASELINK)
9997           name = tsubst_baselink (name,
9998                                   non_reference (TREE_TYPE (object)),
9999                                   args, complain,
10000                                   in_decl);
10001         else
10002           name = tsubst_copy (name, args, complain, in_decl);
10003         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
10004       }
10005
10006     case PLUS_EXPR:
10007     case MINUS_EXPR:
10008     case MULT_EXPR:
10009     case TRUNC_DIV_EXPR:
10010     case CEIL_DIV_EXPR:
10011     case FLOOR_DIV_EXPR:
10012     case ROUND_DIV_EXPR:
10013     case EXACT_DIV_EXPR:
10014     case BIT_AND_EXPR:
10015     case BIT_IOR_EXPR:
10016     case BIT_XOR_EXPR:
10017     case TRUNC_MOD_EXPR:
10018     case FLOOR_MOD_EXPR:
10019     case TRUTH_ANDIF_EXPR:
10020     case TRUTH_ORIF_EXPR:
10021     case TRUTH_AND_EXPR:
10022     case TRUTH_OR_EXPR:
10023     case RSHIFT_EXPR:
10024     case LSHIFT_EXPR:
10025     case RROTATE_EXPR:
10026     case LROTATE_EXPR:
10027     case EQ_EXPR:
10028     case NE_EXPR:
10029     case MAX_EXPR:
10030     case MIN_EXPR:
10031     case LE_EXPR:
10032     case GE_EXPR:
10033     case LT_EXPR:
10034     case GT_EXPR:
10035     case COMPOUND_EXPR:
10036     case DOTSTAR_EXPR:
10037     case MEMBER_REF:
10038     case PREDECREMENT_EXPR:
10039     case PREINCREMENT_EXPR:
10040     case POSTDECREMENT_EXPR:
10041     case POSTINCREMENT_EXPR:
10042       return build_nt
10043         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10044          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10045
10046     case SCOPE_REF:
10047       return build_qualified_name (/*type=*/NULL_TREE,
10048                                    tsubst_copy (TREE_OPERAND (t, 0),
10049                                                 args, complain, in_decl),
10050                                    tsubst_copy (TREE_OPERAND (t, 1),
10051                                                 args, complain, in_decl),
10052                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10053
10054     case ARRAY_REF:
10055       return build_nt
10056         (ARRAY_REF,
10057          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10058          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10059          NULL_TREE, NULL_TREE);
10060
10061     case CALL_EXPR:
10062       {
10063         int n = VL_EXP_OPERAND_LENGTH (t);
10064         tree result = build_vl_exp (CALL_EXPR, n);
10065         int i;
10066         for (i = 0; i < n; i++)
10067           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10068                                              complain, in_decl);
10069         return result;
10070       }
10071
10072     case COND_EXPR:
10073     case MODOP_EXPR:
10074     case PSEUDO_DTOR_EXPR:
10075       {
10076         r = build_nt
10077           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10078            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10079            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10080         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10081         return r;
10082       }
10083
10084     case NEW_EXPR:
10085       {
10086         r = build_nt
10087         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10088          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10089          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10090         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10091         return r;
10092       }
10093
10094     case DELETE_EXPR:
10095       {
10096         r = build_nt
10097         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10098          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10099         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10100         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10101         return r;
10102       }
10103
10104     case TEMPLATE_ID_EXPR:
10105       {
10106         /* Substituted template arguments */
10107         tree fn = TREE_OPERAND (t, 0);
10108         tree targs = TREE_OPERAND (t, 1);
10109
10110         fn = tsubst_copy (fn, args, complain, in_decl);
10111         if (targs)
10112           targs = tsubst_template_args (targs, args, complain, in_decl);
10113
10114         return lookup_template_function (fn, targs);
10115       }
10116
10117     case TREE_LIST:
10118       {
10119         tree purpose, value, chain;
10120
10121         if (t == void_list_node)
10122           return t;
10123
10124         purpose = TREE_PURPOSE (t);
10125         if (purpose)
10126           purpose = tsubst_copy (purpose, args, complain, in_decl);
10127         value = TREE_VALUE (t);
10128         if (value)
10129           value = tsubst_copy (value, args, complain, in_decl);
10130         chain = TREE_CHAIN (t);
10131         if (chain && chain != void_type_node)
10132           chain = tsubst_copy (chain, args, complain, in_decl);
10133         if (purpose == TREE_PURPOSE (t)
10134             && value == TREE_VALUE (t)
10135             && chain == TREE_CHAIN (t))
10136           return t;
10137         return tree_cons (purpose, value, chain);
10138       }
10139
10140     case RECORD_TYPE:
10141     case UNION_TYPE:
10142     case ENUMERAL_TYPE:
10143     case INTEGER_TYPE:
10144     case TEMPLATE_TYPE_PARM:
10145     case TEMPLATE_TEMPLATE_PARM:
10146     case BOUND_TEMPLATE_TEMPLATE_PARM:
10147     case TEMPLATE_PARM_INDEX:
10148     case POINTER_TYPE:
10149     case REFERENCE_TYPE:
10150     case OFFSET_TYPE:
10151     case FUNCTION_TYPE:
10152     case METHOD_TYPE:
10153     case ARRAY_TYPE:
10154     case TYPENAME_TYPE:
10155     case UNBOUND_CLASS_TEMPLATE:
10156     case TYPEOF_TYPE:
10157     case DECLTYPE_TYPE:
10158     case TYPE_DECL:
10159       return tsubst (t, args, complain, in_decl);
10160
10161     case IDENTIFIER_NODE:
10162       if (IDENTIFIER_TYPENAME_P (t))
10163         {
10164           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10165           return mangle_conv_op_name_for_type (new_type);
10166         }
10167       else
10168         return t;
10169
10170     case CONSTRUCTOR:
10171       /* This is handled by tsubst_copy_and_build.  */
10172       gcc_unreachable ();
10173
10174     case VA_ARG_EXPR:
10175       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10176                                           in_decl),
10177                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10178
10179     case CLEANUP_POINT_EXPR:
10180       /* We shouldn't have built any of these during initial template
10181          generation.  Instead, they should be built during instantiation
10182          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10183       gcc_unreachable ();
10184
10185     case OFFSET_REF:
10186       mark_used (TREE_OPERAND (t, 1));
10187       return t;
10188
10189     case EXPR_PACK_EXPANSION:
10190       error ("invalid use of pack expansion expression");
10191       return error_mark_node;
10192
10193     case NONTYPE_ARGUMENT_PACK:
10194       error ("use %<...%> to expand argument pack");
10195       return error_mark_node;
10196
10197     default:
10198       return t;
10199     }
10200 }
10201
10202 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10203
10204 static tree
10205 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10206                     tree in_decl)
10207 {
10208   tree new_clauses = NULL, nc, oc;
10209
10210   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10211     {
10212       nc = copy_node (oc);
10213       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10214       new_clauses = nc;
10215
10216       switch (OMP_CLAUSE_CODE (nc))
10217         {
10218         case OMP_CLAUSE_LASTPRIVATE:
10219           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10220             {
10221               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10222               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10223                            in_decl, /*integral_constant_expression_p=*/false);
10224               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10225                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10226             }
10227           /* FALLTHRU */
10228         case OMP_CLAUSE_PRIVATE:
10229         case OMP_CLAUSE_SHARED:
10230         case OMP_CLAUSE_FIRSTPRIVATE:
10231         case OMP_CLAUSE_REDUCTION:
10232         case OMP_CLAUSE_COPYIN:
10233         case OMP_CLAUSE_COPYPRIVATE:
10234         case OMP_CLAUSE_IF:
10235         case OMP_CLAUSE_NUM_THREADS:
10236         case OMP_CLAUSE_SCHEDULE:
10237         case OMP_CLAUSE_COLLAPSE:
10238           OMP_CLAUSE_OPERAND (nc, 0)
10239             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10240                            in_decl, /*integral_constant_expression_p=*/false);
10241           break;
10242         case OMP_CLAUSE_NOWAIT:
10243         case OMP_CLAUSE_ORDERED:
10244         case OMP_CLAUSE_DEFAULT:
10245         case OMP_CLAUSE_UNTIED:
10246           break;
10247         default:
10248           gcc_unreachable ();
10249         }
10250     }
10251
10252   return finish_omp_clauses (nreverse (new_clauses));
10253 }
10254
10255 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10256
10257 static tree
10258 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10259                           tree in_decl)
10260 {
10261 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10262
10263   tree purpose, value, chain;
10264
10265   if (t == NULL)
10266     return t;
10267
10268   if (TREE_CODE (t) != TREE_LIST)
10269     return tsubst_copy_and_build (t, args, complain, in_decl,
10270                                   /*function_p=*/false,
10271                                   /*integral_constant_expression_p=*/false);
10272
10273   if (t == void_list_node)
10274     return t;
10275
10276   purpose = TREE_PURPOSE (t);
10277   if (purpose)
10278     purpose = RECUR (purpose);
10279   value = TREE_VALUE (t);
10280   if (value)
10281     value = RECUR (value);
10282   chain = TREE_CHAIN (t);
10283   if (chain && chain != void_type_node)
10284     chain = RECUR (chain);
10285   return tree_cons (purpose, value, chain);
10286 #undef RECUR
10287 }
10288
10289 /* Substitute one OMP_FOR iterator.  */
10290
10291 static void
10292 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
10293                          tree condv, tree incrv, tree *clauses,
10294                          tree args, tsubst_flags_t complain, tree in_decl,
10295                          bool integral_constant_expression_p)
10296 {
10297 #define RECUR(NODE)                             \
10298   tsubst_expr ((NODE), args, complain, in_decl, \
10299                integral_constant_expression_p)
10300   tree decl, init, cond, incr;
10301
10302   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
10303   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10304   decl = RECUR (TREE_OPERAND (init, 0));
10305   init = TREE_OPERAND (init, 1);
10306   gcc_assert (!type_dependent_expression_p (decl));
10307
10308   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
10309     {
10310       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
10311       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10312       if (TREE_CODE (incr) == MODIFY_EXPR)
10313         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
10314                                     RECUR (TREE_OPERAND (incr, 1)),
10315                                     complain);
10316       else
10317         incr = RECUR (incr);
10318       TREE_VEC_ELT (declv, i) = decl;
10319       TREE_VEC_ELT (initv, i) = init;
10320       TREE_VEC_ELT (condv, i) = cond;
10321       TREE_VEC_ELT (incrv, i) = incr;
10322       return;
10323     }
10324
10325   if (init && TREE_CODE (init) != DECL_EXPR)
10326     {
10327       tree c;
10328       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
10329         {
10330           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
10331                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
10332               && OMP_CLAUSE_DECL (c) == decl)
10333             break;
10334           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
10335                    && OMP_CLAUSE_DECL (c) == decl)
10336             error ("iteration variable %qD should not be firstprivate", decl);
10337           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
10338                    && OMP_CLAUSE_DECL (c) == decl)
10339             error ("iteration variable %qD should not be reduction", decl);
10340         }
10341       if (c == NULL)
10342         {
10343           c = build_omp_clause (OMP_CLAUSE_PRIVATE);
10344           OMP_CLAUSE_DECL (c) = decl;
10345           c = finish_omp_clauses (c);
10346           if (c)
10347             {
10348               OMP_CLAUSE_CHAIN (c) = *clauses;
10349               *clauses = c;
10350             }
10351         }
10352     }
10353   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
10354   if (COMPARISON_CLASS_P (cond))
10355     cond = build2 (TREE_CODE (cond), boolean_type_node,
10356                    RECUR (TREE_OPERAND (cond, 0)),
10357                    RECUR (TREE_OPERAND (cond, 1)));
10358   else
10359     cond = RECUR (cond);
10360   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10361   switch (TREE_CODE (incr))
10362     {
10363     case PREINCREMENT_EXPR:
10364     case PREDECREMENT_EXPR:
10365     case POSTINCREMENT_EXPR:
10366     case POSTDECREMENT_EXPR:
10367       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
10368                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
10369       break;
10370     case MODIFY_EXPR:
10371       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10372           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10373         {
10374           tree rhs = TREE_OPERAND (incr, 1);
10375           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10376                          RECUR (TREE_OPERAND (incr, 0)),
10377                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10378                                  RECUR (TREE_OPERAND (rhs, 0)),
10379                                  RECUR (TREE_OPERAND (rhs, 1))));
10380         }
10381       else
10382         incr = RECUR (incr);
10383       break;
10384     case MODOP_EXPR:
10385       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10386           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10387         {
10388           tree lhs = RECUR (TREE_OPERAND (incr, 0));
10389           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
10390                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
10391                                  TREE_TYPE (decl), lhs,
10392                                  RECUR (TREE_OPERAND (incr, 2))));
10393         }
10394       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
10395                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
10396                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
10397         {
10398           tree rhs = TREE_OPERAND (incr, 2);
10399           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10400                          RECUR (TREE_OPERAND (incr, 0)),
10401                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10402                                  RECUR (TREE_OPERAND (rhs, 0)),
10403                                  RECUR (TREE_OPERAND (rhs, 1))));
10404         }
10405       else
10406         incr = RECUR (incr);
10407       break;
10408     default:
10409       incr = RECUR (incr);
10410       break;
10411     }
10412
10413   TREE_VEC_ELT (declv, i) = decl;
10414   TREE_VEC_ELT (initv, i) = init;
10415   TREE_VEC_ELT (condv, i) = cond;
10416   TREE_VEC_ELT (incrv, i) = incr;
10417 #undef RECUR
10418 }
10419
10420 /* Like tsubst_copy for expressions, etc. but also does semantic
10421    processing.  */
10422
10423 static tree
10424 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10425              bool integral_constant_expression_p)
10426 {
10427 #define RECUR(NODE)                             \
10428   tsubst_expr ((NODE), args, complain, in_decl, \
10429                integral_constant_expression_p)
10430
10431   tree stmt, tmp;
10432
10433   if (t == NULL_TREE || t == error_mark_node)
10434     return t;
10435
10436   if (EXPR_HAS_LOCATION (t))
10437     input_location = EXPR_LOCATION (t);
10438   if (STATEMENT_CODE_P (TREE_CODE (t)))
10439     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10440
10441   switch (TREE_CODE (t))
10442     {
10443     case STATEMENT_LIST:
10444       {
10445         tree_stmt_iterator i;
10446         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10447           RECUR (tsi_stmt (i));
10448         break;
10449       }
10450
10451     case CTOR_INITIALIZER:
10452       finish_mem_initializers (tsubst_initializer_list
10453                                (TREE_OPERAND (t, 0), args));
10454       break;
10455
10456     case RETURN_EXPR:
10457       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10458       break;
10459
10460     case EXPR_STMT:
10461       tmp = RECUR (EXPR_STMT_EXPR (t));
10462       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10463         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10464       else
10465         finish_expr_stmt (tmp);
10466       break;
10467
10468     case USING_STMT:
10469       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10470       break;
10471
10472     case DECL_EXPR:
10473       {
10474         tree decl;
10475         tree init;
10476
10477         decl = DECL_EXPR_DECL (t);
10478         if (TREE_CODE (decl) == LABEL_DECL)
10479           finish_label_decl (DECL_NAME (decl));
10480         else if (TREE_CODE (decl) == USING_DECL)
10481           {
10482             tree scope = USING_DECL_SCOPE (decl);
10483             tree name = DECL_NAME (decl);
10484             tree decl;
10485
10486             scope = RECUR (scope);
10487             decl = lookup_qualified_name (scope, name,
10488                                           /*is_type_p=*/false,
10489                                           /*complain=*/false);
10490             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10491               qualified_name_lookup_error (scope, name, decl, input_location);
10492             else
10493               do_local_using_decl (decl, scope, name);
10494           }
10495         else
10496           {
10497             init = DECL_INITIAL (decl);
10498             decl = tsubst (decl, args, complain, in_decl);
10499             if (decl != error_mark_node)
10500               {
10501                 /* By marking the declaration as instantiated, we avoid
10502                    trying to instantiate it.  Since instantiate_decl can't
10503                    handle local variables, and since we've already done
10504                    all that needs to be done, that's the right thing to
10505                    do.  */
10506                 if (TREE_CODE (decl) == VAR_DECL)
10507                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10508                 if (TREE_CODE (decl) == VAR_DECL
10509                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10510                   /* Anonymous aggregates are a special case.  */
10511                   finish_anon_union (decl);
10512                 else
10513                   {
10514                     maybe_push_decl (decl);
10515                     if (TREE_CODE (decl) == VAR_DECL
10516                         && DECL_PRETTY_FUNCTION_P (decl))
10517                       {
10518                         /* For __PRETTY_FUNCTION__ we have to adjust the
10519                            initializer.  */
10520                         const char *const name
10521                           = cxx_printable_name (current_function_decl, 2);
10522                         init = cp_fname_init (name, &TREE_TYPE (decl));
10523                       }
10524                     else
10525                       {
10526                         tree t = RECUR (init);
10527
10528                         if (init && !t)
10529                           /* If we had an initializer but it
10530                              instantiated to nothing,
10531                              value-initialize the object.  This will
10532                              only occur when the initializer was a
10533                              pack expansion where the parameter packs
10534                              used in that expansion were of length
10535                              zero.  */
10536                           init = build_default_init (TREE_TYPE (decl),
10537                                                      NULL_TREE);
10538                         else
10539                           init = t;
10540                       }
10541
10542                     finish_decl (decl, init, NULL_TREE);
10543                   }
10544               }
10545           }
10546
10547         /* A DECL_EXPR can also be used as an expression, in the condition
10548            clause of an if/for/while construct.  */
10549         return decl;
10550       }
10551
10552     case FOR_STMT:
10553       stmt = begin_for_stmt ();
10554                           RECUR (FOR_INIT_STMT (t));
10555       finish_for_init_stmt (stmt);
10556       tmp = RECUR (FOR_COND (t));
10557       finish_for_cond (tmp, stmt);
10558       tmp = RECUR (FOR_EXPR (t));
10559       finish_for_expr (tmp, stmt);
10560       RECUR (FOR_BODY (t));
10561       finish_for_stmt (stmt);
10562       break;
10563
10564     case WHILE_STMT:
10565       stmt = begin_while_stmt ();
10566       tmp = RECUR (WHILE_COND (t));
10567       finish_while_stmt_cond (tmp, stmt);
10568       RECUR (WHILE_BODY (t));
10569       finish_while_stmt (stmt);
10570       break;
10571
10572     case DO_STMT:
10573       stmt = begin_do_stmt ();
10574       RECUR (DO_BODY (t));
10575       finish_do_body (stmt);
10576       tmp = RECUR (DO_COND (t));
10577       finish_do_stmt (tmp, stmt);
10578       break;
10579
10580     case IF_STMT:
10581       stmt = begin_if_stmt ();
10582       tmp = RECUR (IF_COND (t));
10583       finish_if_stmt_cond (tmp, stmt);
10584       RECUR (THEN_CLAUSE (t));
10585       finish_then_clause (stmt);
10586
10587       if (ELSE_CLAUSE (t))
10588         {
10589           begin_else_clause (stmt);
10590           RECUR (ELSE_CLAUSE (t));
10591           finish_else_clause (stmt);
10592         }
10593
10594       finish_if_stmt (stmt);
10595       break;
10596
10597     case BIND_EXPR:
10598       if (BIND_EXPR_BODY_BLOCK (t))
10599         stmt = begin_function_body ();
10600       else
10601         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10602                                     ? BCS_TRY_BLOCK : 0);
10603
10604       RECUR (BIND_EXPR_BODY (t));
10605
10606       if (BIND_EXPR_BODY_BLOCK (t))
10607         finish_function_body (stmt);
10608       else
10609         finish_compound_stmt (stmt);
10610       break;
10611
10612     case BREAK_STMT:
10613       finish_break_stmt ();
10614       break;
10615
10616     case CONTINUE_STMT:
10617       finish_continue_stmt ();
10618       break;
10619
10620     case SWITCH_STMT:
10621       stmt = begin_switch_stmt ();
10622       tmp = RECUR (SWITCH_STMT_COND (t));
10623       finish_switch_cond (tmp, stmt);
10624       RECUR (SWITCH_STMT_BODY (t));
10625       finish_switch_stmt (stmt);
10626       break;
10627
10628     case CASE_LABEL_EXPR:
10629       finish_case_label (RECUR (CASE_LOW (t)),
10630                          RECUR (CASE_HIGH (t)));
10631       break;
10632
10633     case LABEL_EXPR:
10634       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10635       break;
10636
10637     case GOTO_EXPR:
10638       tmp = GOTO_DESTINATION (t);
10639       if (TREE_CODE (tmp) != LABEL_DECL)
10640         /* Computed goto's must be tsubst'd into.  On the other hand,
10641            non-computed gotos must not be; the identifier in question
10642            will have no binding.  */
10643         tmp = RECUR (tmp);
10644       else
10645         tmp = DECL_NAME (tmp);
10646       finish_goto_stmt (tmp);
10647       break;
10648
10649     case ASM_EXPR:
10650       tmp = finish_asm_stmt
10651         (ASM_VOLATILE_P (t),
10652          RECUR (ASM_STRING (t)),
10653          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10654          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10655          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10656       {
10657         tree asm_expr = tmp;
10658         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10659           asm_expr = TREE_OPERAND (asm_expr, 0);
10660         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10661       }
10662       break;
10663
10664     case TRY_BLOCK:
10665       if (CLEANUP_P (t))
10666         {
10667           stmt = begin_try_block ();
10668           RECUR (TRY_STMTS (t));
10669           finish_cleanup_try_block (stmt);
10670           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10671         }
10672       else
10673         {
10674           tree compound_stmt = NULL_TREE;
10675
10676           if (FN_TRY_BLOCK_P (t))
10677             stmt = begin_function_try_block (&compound_stmt);
10678           else
10679             stmt = begin_try_block ();
10680
10681           RECUR (TRY_STMTS (t));
10682
10683           if (FN_TRY_BLOCK_P (t))
10684             finish_function_try_block (stmt);
10685           else
10686             finish_try_block (stmt);
10687
10688           RECUR (TRY_HANDLERS (t));
10689           if (FN_TRY_BLOCK_P (t))
10690             finish_function_handler_sequence (stmt, compound_stmt);
10691           else
10692             finish_handler_sequence (stmt);
10693         }
10694       break;
10695
10696     case HANDLER:
10697       {
10698         tree decl = HANDLER_PARMS (t);
10699
10700         if (decl)
10701           {
10702             decl = tsubst (decl, args, complain, in_decl);
10703             /* Prevent instantiate_decl from trying to instantiate
10704                this variable.  We've already done all that needs to be
10705                done.  */
10706             if (decl != error_mark_node)
10707               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10708           }
10709         stmt = begin_handler ();
10710         finish_handler_parms (decl, stmt);
10711         RECUR (HANDLER_BODY (t));
10712         finish_handler (stmt);
10713       }
10714       break;
10715
10716     case TAG_DEFN:
10717       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10718       break;
10719
10720     case STATIC_ASSERT:
10721       {
10722         tree condition = 
10723           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10724                        args,
10725                        complain, in_decl,
10726                        /*integral_constant_expression_p=*/true);
10727         finish_static_assert (condition,
10728                               STATIC_ASSERT_MESSAGE (t),
10729                               STATIC_ASSERT_SOURCE_LOCATION (t),
10730                               /*member_p=*/false);
10731       }
10732       break;
10733
10734     case OMP_PARALLEL:
10735       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10736                                 args, complain, in_decl);
10737       stmt = begin_omp_parallel ();
10738       RECUR (OMP_PARALLEL_BODY (t));
10739       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10740         = OMP_PARALLEL_COMBINED (t);
10741       break;
10742
10743     case OMP_TASK:
10744       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
10745                                 args, complain, in_decl);
10746       stmt = begin_omp_task ();
10747       RECUR (OMP_TASK_BODY (t));
10748       finish_omp_task (tmp, stmt);
10749       break;
10750
10751     case OMP_FOR:
10752       {
10753         tree clauses, body, pre_body;
10754         tree declv, initv, condv, incrv;
10755         int i;
10756
10757         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10758                                       args, complain, in_decl);
10759         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10760         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10761         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10762         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10763
10764         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
10765           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
10766                                    &clauses, args, complain, in_decl,
10767                                    integral_constant_expression_p);
10768
10769         stmt = begin_omp_structured_block ();
10770
10771         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
10772           if (TREE_VEC_ELT (initv, i) == NULL
10773               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
10774             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
10775           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
10776             {
10777               tree init = RECUR (TREE_VEC_ELT (initv, i));
10778               gcc_assert (init == TREE_VEC_ELT (declv, i));
10779               TREE_VEC_ELT (initv, i) = NULL_TREE;
10780             }
10781           else
10782             {
10783               tree decl_expr = TREE_VEC_ELT (initv, i);
10784               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
10785               gcc_assert (init != NULL);
10786               TREE_VEC_ELT (initv, i) = RECUR (init);
10787               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
10788               RECUR (decl_expr);
10789               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
10790             }
10791
10792         pre_body = push_stmt_list ();
10793         RECUR (OMP_FOR_PRE_BODY (t));
10794         pre_body = pop_stmt_list (pre_body);
10795
10796         body = push_stmt_list ();
10797         RECUR (OMP_FOR_BODY (t));
10798         body = pop_stmt_list (body);
10799
10800         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
10801                             body, pre_body, clauses);
10802
10803         add_stmt (finish_omp_structured_block (stmt));
10804       }
10805       break;
10806
10807     case OMP_SECTIONS:
10808     case OMP_SINGLE:
10809       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10810       stmt = push_stmt_list ();
10811       RECUR (OMP_BODY (t));
10812       stmt = pop_stmt_list (stmt);
10813
10814       t = copy_node (t);
10815       OMP_BODY (t) = stmt;
10816       OMP_CLAUSES (t) = tmp;
10817       add_stmt (t);
10818       break;
10819
10820     case OMP_SECTION:
10821     case OMP_CRITICAL:
10822     case OMP_MASTER:
10823     case OMP_ORDERED:
10824       stmt = push_stmt_list ();
10825       RECUR (OMP_BODY (t));
10826       stmt = pop_stmt_list (stmt);
10827
10828       t = copy_node (t);
10829       OMP_BODY (t) = stmt;
10830       add_stmt (t);
10831       break;
10832
10833     case OMP_ATOMIC:
10834       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10835       {
10836         tree op1 = TREE_OPERAND (t, 1);
10837         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10838         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10839         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10840       }
10841       break;
10842
10843     case EXPR_PACK_EXPANSION:
10844       error ("invalid use of pack expansion expression");
10845       return error_mark_node;
10846
10847     case NONTYPE_ARGUMENT_PACK:
10848       error ("use %<...%> to expand argument pack");
10849       return error_mark_node;
10850
10851     default:
10852       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10853
10854       return tsubst_copy_and_build (t, args, complain, in_decl,
10855                                     /*function_p=*/false,
10856                                     integral_constant_expression_p);
10857     }
10858
10859   return NULL_TREE;
10860 #undef RECUR
10861 }
10862
10863 /* T is a postfix-expression that is not being used in a function
10864    call.  Return the substituted version of T.  */
10865
10866 static tree
10867 tsubst_non_call_postfix_expression (tree t, tree args,
10868                                     tsubst_flags_t complain,
10869                                     tree in_decl)
10870 {
10871   if (TREE_CODE (t) == SCOPE_REF)
10872     t = tsubst_qualified_id (t, args, complain, in_decl,
10873                              /*done=*/false, /*address_p=*/false);
10874   else
10875     t = tsubst_copy_and_build (t, args, complain, in_decl,
10876                                /*function_p=*/false,
10877                                /*integral_constant_expression_p=*/false);
10878
10879   return t;
10880 }
10881
10882 /* Like tsubst but deals with expressions and performs semantic
10883    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10884
10885 tree
10886 tsubst_copy_and_build (tree t,
10887                        tree args,
10888                        tsubst_flags_t complain,
10889                        tree in_decl,
10890                        bool function_p,
10891                        bool integral_constant_expression_p)
10892 {
10893 #define RECUR(NODE)                                             \
10894   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10895                          /*function_p=*/false,                  \
10896                          integral_constant_expression_p)
10897
10898   tree op1;
10899
10900   if (t == NULL_TREE || t == error_mark_node)
10901     return t;
10902
10903   switch (TREE_CODE (t))
10904     {
10905     case USING_DECL:
10906       t = DECL_NAME (t);
10907       /* Fall through.  */
10908     case IDENTIFIER_NODE:
10909       {
10910         tree decl;
10911         cp_id_kind idk;
10912         bool non_integral_constant_expression_p;
10913         const char *error_msg;
10914
10915         if (IDENTIFIER_TYPENAME_P (t))
10916           {
10917             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10918             t = mangle_conv_op_name_for_type (new_type);
10919           }
10920
10921         /* Look up the name.  */
10922         decl = lookup_name (t);
10923
10924         /* By convention, expressions use ERROR_MARK_NODE to indicate
10925            failure, not NULL_TREE.  */
10926         if (decl == NULL_TREE)
10927           decl = error_mark_node;
10928
10929         decl = finish_id_expression (t, decl, NULL_TREE,
10930                                      &idk,
10931                                      integral_constant_expression_p,
10932                                      /*allow_non_integral_constant_expression_p=*/false,
10933                                      &non_integral_constant_expression_p,
10934                                      /*template_p=*/false,
10935                                      /*done=*/true,
10936                                      /*address_p=*/false,
10937                                      /*template_arg_p=*/false,
10938                                      &error_msg,
10939                                      input_location);
10940         if (error_msg)
10941           error (error_msg);
10942         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10943           decl = unqualified_name_lookup_error (decl);
10944         return decl;
10945       }
10946
10947     case TEMPLATE_ID_EXPR:
10948       {
10949         tree object;
10950         tree templ = RECUR (TREE_OPERAND (t, 0));
10951         tree targs = TREE_OPERAND (t, 1);
10952
10953         if (targs)
10954           targs = tsubst_template_args (targs, args, complain, in_decl);
10955
10956         if (TREE_CODE (templ) == COMPONENT_REF)
10957           {
10958             object = TREE_OPERAND (templ, 0);
10959             templ = TREE_OPERAND (templ, 1);
10960           }
10961         else
10962           object = NULL_TREE;
10963         templ = lookup_template_function (templ, targs);
10964
10965         if (object)
10966           return build3 (COMPONENT_REF, TREE_TYPE (templ),
10967                          object, templ, NULL_TREE);
10968         else
10969           return baselink_for_fns (templ);
10970       }
10971
10972     case INDIRECT_REF:
10973       {
10974         tree r = RECUR (TREE_OPERAND (t, 0));
10975
10976         if (REFERENCE_REF_P (t))
10977           {
10978             /* A type conversion to reference type will be enclosed in
10979                such an indirect ref, but the substitution of the cast
10980                will have also added such an indirect ref.  */
10981             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10982               r = convert_from_reference (r);
10983           }
10984         else
10985           r = build_x_indirect_ref (r, "unary *", complain);
10986         return r;
10987       }
10988
10989     case NOP_EXPR:
10990       return build_nop
10991         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10992          RECUR (TREE_OPERAND (t, 0)));
10993
10994     case CAST_EXPR:
10995     case REINTERPRET_CAST_EXPR:
10996     case CONST_CAST_EXPR:
10997     case DYNAMIC_CAST_EXPR:
10998     case STATIC_CAST_EXPR:
10999       {
11000         tree type;
11001         tree op;
11002
11003         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11004         if (integral_constant_expression_p
11005             && !cast_valid_in_integral_constant_expression_p (type))
11006           {
11007             if (complain & tf_error)
11008               error ("a cast to a type other than an integral or "
11009                      "enumeration type cannot appear in a constant-expression");
11010             return error_mark_node; 
11011           }
11012
11013         op = RECUR (TREE_OPERAND (t, 0));
11014
11015         switch (TREE_CODE (t))
11016           {
11017           case CAST_EXPR:
11018             return build_functional_cast (type, op, complain);
11019           case REINTERPRET_CAST_EXPR:
11020             return build_reinterpret_cast (type, op, complain);
11021           case CONST_CAST_EXPR:
11022             return build_const_cast (type, op, complain);
11023           case DYNAMIC_CAST_EXPR:
11024             return build_dynamic_cast (type, op, complain);
11025           case STATIC_CAST_EXPR:
11026             return build_static_cast (type, op, complain);
11027           default:
11028             gcc_unreachable ();
11029           }
11030       }
11031
11032     case POSTDECREMENT_EXPR:
11033     case POSTINCREMENT_EXPR:
11034       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11035                                                 args, complain, in_decl);
11036       return build_x_unary_op (TREE_CODE (t), op1, complain);
11037
11038     case PREDECREMENT_EXPR:
11039     case PREINCREMENT_EXPR:
11040     case NEGATE_EXPR:
11041     case BIT_NOT_EXPR:
11042     case ABS_EXPR:
11043     case TRUTH_NOT_EXPR:
11044     case UNARY_PLUS_EXPR:  /* Unary + */
11045     case REALPART_EXPR:
11046     case IMAGPART_EXPR:
11047       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11048                                complain);
11049
11050     case ADDR_EXPR:
11051       op1 = TREE_OPERAND (t, 0);
11052       if (TREE_CODE (op1) == SCOPE_REF)
11053         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11054                                    /*done=*/true, /*address_p=*/true);
11055       else
11056         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11057                                                   in_decl);
11058       if (TREE_CODE (op1) == LABEL_DECL)
11059         return finish_label_address_expr (DECL_NAME (op1));
11060       return build_x_unary_op (ADDR_EXPR, op1, complain);
11061
11062     case PLUS_EXPR:
11063     case MINUS_EXPR:
11064     case MULT_EXPR:
11065     case TRUNC_DIV_EXPR:
11066     case CEIL_DIV_EXPR:
11067     case FLOOR_DIV_EXPR:
11068     case ROUND_DIV_EXPR:
11069     case EXACT_DIV_EXPR:
11070     case BIT_AND_EXPR:
11071     case BIT_IOR_EXPR:
11072     case BIT_XOR_EXPR:
11073     case TRUNC_MOD_EXPR:
11074     case FLOOR_MOD_EXPR:
11075     case TRUTH_ANDIF_EXPR:
11076     case TRUTH_ORIF_EXPR:
11077     case TRUTH_AND_EXPR:
11078     case TRUTH_OR_EXPR:
11079     case RSHIFT_EXPR:
11080     case LSHIFT_EXPR:
11081     case RROTATE_EXPR:
11082     case LROTATE_EXPR:
11083     case EQ_EXPR:
11084     case NE_EXPR:
11085     case MAX_EXPR:
11086     case MIN_EXPR:
11087     case LE_EXPR:
11088     case GE_EXPR:
11089     case LT_EXPR:
11090     case GT_EXPR:
11091     case MEMBER_REF:
11092     case DOTSTAR_EXPR:
11093       return build_x_binary_op
11094         (TREE_CODE (t),
11095          RECUR (TREE_OPERAND (t, 0)),
11096          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11097           ? ERROR_MARK
11098           : TREE_CODE (TREE_OPERAND (t, 0))),
11099          RECUR (TREE_OPERAND (t, 1)),
11100          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11101           ? ERROR_MARK
11102           : TREE_CODE (TREE_OPERAND (t, 1))),
11103          /*overloaded_p=*/NULL,
11104          complain);
11105
11106     case SCOPE_REF:
11107       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11108                                   /*address_p=*/false);
11109     case ARRAY_REF:
11110       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11111                                                 args, complain, in_decl);
11112       return build_x_binary_op (ARRAY_REF, op1,
11113                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11114                                  ? ERROR_MARK
11115                                  : TREE_CODE (TREE_OPERAND (t, 0))),
11116                                 RECUR (TREE_OPERAND (t, 1)),
11117                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11118                                  ? ERROR_MARK
11119                                  : TREE_CODE (TREE_OPERAND (t, 1))),
11120                                 /*overloaded_p=*/NULL,
11121                                 complain);
11122
11123     case SIZEOF_EXPR:
11124       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11125         return tsubst_copy (t, args, complain, in_decl);
11126       /* Fall through */
11127       
11128     case ALIGNOF_EXPR:
11129       op1 = TREE_OPERAND (t, 0);
11130       if (!args)
11131         {
11132           /* When there are no ARGS, we are trying to evaluate a
11133              non-dependent expression from the parser.  Trying to do
11134              the substitutions may not work.  */
11135           if (!TYPE_P (op1))
11136             op1 = TREE_TYPE (op1);
11137         }
11138       else
11139         {
11140           ++skip_evaluation;
11141           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11142                                        /*function_p=*/false,
11143                                        /*integral_constant_expression_p=*/false);
11144           --skip_evaluation;
11145         }
11146       if (TYPE_P (op1))
11147         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11148                                            complain & tf_error);
11149       else
11150         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11151                                            complain & tf_error);
11152
11153     case MODOP_EXPR:
11154       {
11155         tree r = build_x_modify_expr
11156           (RECUR (TREE_OPERAND (t, 0)),
11157            TREE_CODE (TREE_OPERAND (t, 1)),
11158            RECUR (TREE_OPERAND (t, 2)),
11159            complain);
11160         /* TREE_NO_WARNING must be set if either the expression was
11161            parenthesized or it uses an operator such as >>= rather
11162            than plain assignment.  In the former case, it was already
11163            set and must be copied.  In the latter case,
11164            build_x_modify_expr sets it and it must not be reset
11165            here.  */
11166         if (TREE_NO_WARNING (t))
11167           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11168         return r;
11169       }
11170
11171     case ARROW_EXPR:
11172       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11173                                                 args, complain, in_decl);
11174       /* Remember that there was a reference to this entity.  */
11175       if (DECL_P (op1))
11176         mark_used (op1);
11177       return build_x_arrow (op1);
11178
11179     case NEW_EXPR:
11180       {
11181         tree init = RECUR (TREE_OPERAND (t, 3));
11182
11183         if (TREE_OPERAND (t, 3) && !init)
11184           /* If there was an initializer in the original tree, but
11185              it instantiated to an empty list, then we should pass on
11186              VOID_ZERO_NODE to tell build_new that it was an empty
11187              initializer () rather than no initializer.  This can only
11188              happen when the initializer is a pack expansion whose
11189              parameter packs are of length zero.  */
11190           init = void_zero_node;
11191
11192         return build_new
11193           (RECUR (TREE_OPERAND (t, 0)),
11194            RECUR (TREE_OPERAND (t, 1)),
11195            RECUR (TREE_OPERAND (t, 2)),
11196            init,
11197            NEW_EXPR_USE_GLOBAL (t),
11198            complain);
11199       }
11200
11201     case DELETE_EXPR:
11202      return delete_sanity
11203        (RECUR (TREE_OPERAND (t, 0)),
11204         RECUR (TREE_OPERAND (t, 1)),
11205         DELETE_EXPR_USE_VEC (t),
11206         DELETE_EXPR_USE_GLOBAL (t));
11207
11208     case COMPOUND_EXPR:
11209       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11210                                     RECUR (TREE_OPERAND (t, 1)),
11211                                     complain);
11212
11213     case CALL_EXPR:
11214       {
11215         tree function;
11216         tree call_args;
11217         bool qualified_p;
11218         bool koenig_p;
11219
11220         function = CALL_EXPR_FN (t);
11221         /* When we parsed the expression,  we determined whether or
11222            not Koenig lookup should be performed.  */
11223         koenig_p = KOENIG_LOOKUP_P (t);
11224         if (TREE_CODE (function) == SCOPE_REF)
11225           {
11226             qualified_p = true;
11227             function = tsubst_qualified_id (function, args, complain, in_decl,
11228                                             /*done=*/false,
11229                                             /*address_p=*/false);
11230           }
11231         else
11232           {
11233             if (TREE_CODE (function) == COMPONENT_REF)
11234               {
11235                 tree op = TREE_OPERAND (function, 1);
11236
11237                 qualified_p = (TREE_CODE (op) == SCOPE_REF
11238                                || (BASELINK_P (op)
11239                                    && BASELINK_QUALIFIED_P (op)));
11240               }
11241             else
11242               qualified_p = false;
11243
11244             function = tsubst_copy_and_build (function, args, complain,
11245                                               in_decl,
11246                                               !qualified_p,
11247                                               integral_constant_expression_p);
11248
11249             if (BASELINK_P (function))
11250               qualified_p = true;
11251           }
11252
11253         /* FIXME:  Rewrite this so as not to construct an arglist.  */
11254         call_args = RECUR (CALL_EXPR_ARGS (t));
11255
11256         /* We do not perform argument-dependent lookup if normal
11257            lookup finds a non-function, in accordance with the
11258            expected resolution of DR 218.  */
11259         if (koenig_p
11260             && ((is_overloaded_fn (function)
11261                  /* If lookup found a member function, the Koenig lookup is
11262                     not appropriate, even if an unqualified-name was used
11263                     to denote the function.  */
11264                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
11265                 || TREE_CODE (function) == IDENTIFIER_NODE))
11266           function = perform_koenig_lookup (function, call_args);
11267
11268         if (TREE_CODE (function) == IDENTIFIER_NODE)
11269           {
11270             unqualified_name_lookup_error (function);
11271             return error_mark_node;
11272           }
11273
11274         /* Remember that there was a reference to this entity.  */
11275         if (DECL_P (function))
11276           mark_used (function);
11277
11278         if (TREE_CODE (function) == OFFSET_REF)
11279           return build_offset_ref_call_from_tree (function, call_args);
11280         if (TREE_CODE (function) == COMPONENT_REF)
11281           {
11282             if (!BASELINK_P (TREE_OPERAND (function, 1)))
11283               return finish_call_expr (function, call_args,
11284                                        /*disallow_virtual=*/false,
11285                                        /*koenig_p=*/false,
11286                                        complain);
11287             else
11288               return (build_new_method_call
11289                       (TREE_OPERAND (function, 0),
11290                        TREE_OPERAND (function, 1),
11291                        call_args, NULL_TREE,
11292                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11293                        /*fn_p=*/NULL,
11294                        complain));
11295           }
11296         return finish_call_expr (function, call_args,
11297                                  /*disallow_virtual=*/qualified_p,
11298                                  koenig_p,
11299                                  complain);
11300       }
11301
11302     case COND_EXPR:
11303       return build_x_conditional_expr
11304         (RECUR (TREE_OPERAND (t, 0)),
11305          RECUR (TREE_OPERAND (t, 1)),
11306          RECUR (TREE_OPERAND (t, 2)),
11307          complain);
11308
11309     case PSEUDO_DTOR_EXPR:
11310       return finish_pseudo_destructor_expr
11311         (RECUR (TREE_OPERAND (t, 0)),
11312          RECUR (TREE_OPERAND (t, 1)),
11313          RECUR (TREE_OPERAND (t, 2)));
11314
11315     case TREE_LIST:
11316       {
11317         tree purpose, value, chain;
11318
11319         if (t == void_list_node)
11320           return t;
11321
11322         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11323             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11324           {
11325             /* We have pack expansions, so expand those and
11326                create a new list out of it.  */
11327             tree purposevec = NULL_TREE;
11328             tree valuevec = NULL_TREE;
11329             tree chain;
11330             int i, len = -1;
11331
11332             /* Expand the argument expressions.  */
11333             if (TREE_PURPOSE (t))
11334               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11335                                                  complain, in_decl);
11336             if (TREE_VALUE (t))
11337               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11338                                                complain, in_decl);
11339
11340             /* Build the rest of the list.  */
11341             chain = TREE_CHAIN (t);
11342             if (chain && chain != void_type_node)
11343               chain = RECUR (chain);
11344
11345             /* Determine the number of arguments.  */
11346             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11347               {
11348                 len = TREE_VEC_LENGTH (purposevec);
11349                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11350               }
11351             else if (TREE_CODE (valuevec) == TREE_VEC)
11352               len = TREE_VEC_LENGTH (valuevec);
11353             else
11354               {
11355                 /* Since we only performed a partial substitution into
11356                    the argument pack, we only return a single list
11357                    node.  */
11358                 if (purposevec == TREE_PURPOSE (t)
11359                     && valuevec == TREE_VALUE (t)
11360                     && chain == TREE_CHAIN (t))
11361                   return t;
11362
11363                 return tree_cons (purposevec, valuevec, chain);
11364               }
11365             
11366             /* Convert the argument vectors into a TREE_LIST */
11367             i = len;
11368             while (i > 0)
11369               {
11370                 /* Grab the Ith values.  */
11371                 i--;
11372                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11373                                      : NULL_TREE;
11374                 value 
11375                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11376                              : NULL_TREE;
11377
11378                 /* Build the list (backwards).  */
11379                 chain = tree_cons (purpose, value, chain);
11380               }
11381
11382             return chain;
11383           }
11384
11385         purpose = TREE_PURPOSE (t);
11386         if (purpose)
11387           purpose = RECUR (purpose);
11388         value = TREE_VALUE (t);
11389         if (value)
11390           value = RECUR (value);
11391         chain = TREE_CHAIN (t);
11392         if (chain && chain != void_type_node)
11393           chain = RECUR (chain);
11394         if (purpose == TREE_PURPOSE (t)
11395             && value == TREE_VALUE (t)
11396             && chain == TREE_CHAIN (t))
11397           return t;
11398         return tree_cons (purpose, value, chain);
11399       }
11400
11401     case COMPONENT_REF:
11402       {
11403         tree object;
11404         tree object_type;
11405         tree member;
11406
11407         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11408                                                      args, complain, in_decl);
11409         /* Remember that there was a reference to this entity.  */
11410         if (DECL_P (object))
11411           mark_used (object);
11412         object_type = TREE_TYPE (object);
11413
11414         member = TREE_OPERAND (t, 1);
11415         if (BASELINK_P (member))
11416           member = tsubst_baselink (member,
11417                                     non_reference (TREE_TYPE (object)),
11418                                     args, complain, in_decl);
11419         else
11420           member = tsubst_copy (member, args, complain, in_decl);
11421         if (member == error_mark_node)
11422           return error_mark_node;
11423
11424         if (object_type && !CLASS_TYPE_P (object_type))
11425           {
11426             if (SCALAR_TYPE_P (object_type))
11427               {
11428                 tree s = NULL_TREE;
11429                 tree dtor = member;
11430
11431                 if (TREE_CODE (dtor) == SCOPE_REF)
11432                   {
11433                     s = TREE_OPERAND (dtor, 0);
11434                     dtor = TREE_OPERAND (dtor, 1);
11435                   }
11436                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11437                   {
11438                     dtor = TREE_OPERAND (dtor, 0);
11439                     if (TYPE_P (dtor))
11440                       return finish_pseudo_destructor_expr (object, s, dtor);
11441                   }
11442               }
11443           }
11444         else if (TREE_CODE (member) == SCOPE_REF
11445                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11446           {
11447             tree tmpl;
11448             tree args;
11449
11450             /* Lookup the template functions now that we know what the
11451                scope is.  */
11452             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11453             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11454             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11455                                             /*is_type_p=*/false,
11456                                             /*complain=*/false);
11457             if (BASELINK_P (member))
11458               {
11459                 BASELINK_FUNCTIONS (member)
11460                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11461                               args);
11462                 member = (adjust_result_of_qualified_name_lookup
11463                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11464                            object_type));
11465               }
11466             else
11467               {
11468                 qualified_name_lookup_error (object_type, tmpl, member,
11469                                              input_location);
11470                 return error_mark_node;
11471               }
11472           }
11473         else if (TREE_CODE (member) == SCOPE_REF
11474                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11475                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11476           {
11477             if (complain & tf_error)
11478               {
11479                 if (TYPE_P (TREE_OPERAND (member, 0)))
11480                   error ("%qT is not a class or namespace",
11481                          TREE_OPERAND (member, 0));
11482                 else
11483                   error ("%qD is not a class or namespace",
11484                          TREE_OPERAND (member, 0));
11485               }
11486             return error_mark_node;
11487           }
11488         else if (TREE_CODE (member) == FIELD_DECL)
11489           return finish_non_static_data_member (member, object, NULL_TREE);
11490
11491         return finish_class_member_access_expr (object, member,
11492                                                 /*template_p=*/false,
11493                                                 complain);
11494       }
11495
11496     case THROW_EXPR:
11497       return build_throw
11498         (RECUR (TREE_OPERAND (t, 0)));
11499
11500     case CONSTRUCTOR:
11501       {
11502         VEC(constructor_elt,gc) *n;
11503         constructor_elt *ce;
11504         unsigned HOST_WIDE_INT idx;
11505         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11506         bool process_index_p;
11507         int newlen;
11508         bool need_copy_p = false;
11509         tree r;
11510
11511         if (type == error_mark_node)
11512           return error_mark_node;
11513
11514         /* digest_init will do the wrong thing if we let it.  */
11515         if (type && TYPE_PTRMEMFUNC_P (type))
11516           return t;
11517
11518         /* We do not want to process the index of aggregate
11519            initializers as they are identifier nodes which will be
11520            looked up by digest_init.  */
11521         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
11522
11523         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11524         newlen = VEC_length (constructor_elt, n);
11525         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11526           {
11527             if (ce->index && process_index_p)
11528               ce->index = RECUR (ce->index);
11529
11530             if (PACK_EXPANSION_P (ce->value))
11531               {
11532                 /* Substitute into the pack expansion.  */
11533                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11534                                                   in_decl);
11535
11536                 if (ce->value == error_mark_node)
11537                   ;
11538                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11539                   /* Just move the argument into place.  */
11540                   ce->value = TREE_VEC_ELT (ce->value, 0);
11541                 else
11542                   {
11543                     /* Update the length of the final CONSTRUCTOR
11544                        arguments vector, and note that we will need to
11545                        copy.*/
11546                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11547                     need_copy_p = true;
11548                   }
11549               }
11550             else
11551               ce->value = RECUR (ce->value);
11552           }
11553
11554         if (need_copy_p)
11555           {
11556             VEC(constructor_elt,gc) *old_n = n;
11557
11558             n = VEC_alloc (constructor_elt, gc, newlen);
11559             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11560                  idx++)
11561               {
11562                 if (TREE_CODE (ce->value) == TREE_VEC)
11563                   {
11564                     int i, len = TREE_VEC_LENGTH (ce->value);
11565                     for (i = 0; i < len; ++i)
11566                       CONSTRUCTOR_APPEND_ELT (n, 0,
11567                                               TREE_VEC_ELT (ce->value, i));
11568                   }
11569                 else
11570                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11571               }
11572           }
11573
11574         r = build_constructor (init_list_type_node, n);
11575
11576         if (TREE_HAS_CONSTRUCTOR (t))
11577           return finish_compound_literal (type, r);
11578
11579         return r;
11580       }
11581
11582     case TYPEID_EXPR:
11583       {
11584         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11585         if (TYPE_P (operand_0))
11586           return get_typeid (operand_0);
11587         return build_typeid (operand_0);
11588       }
11589
11590     case VAR_DECL:
11591       if (!args)
11592         return t;
11593       /* Fall through */
11594
11595     case PARM_DECL:
11596       {
11597         tree r = tsubst_copy (t, args, complain, in_decl);
11598
11599         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11600           /* If the original type was a reference, we'll be wrapped in
11601              the appropriate INDIRECT_REF.  */
11602           r = convert_from_reference (r);
11603         return r;
11604       }
11605
11606     case VA_ARG_EXPR:
11607       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11608                              tsubst_copy (TREE_TYPE (t), args, complain,
11609                                           in_decl));
11610
11611     case OFFSETOF_EXPR:
11612       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11613
11614     case TRAIT_EXPR:
11615       {
11616         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11617                                   complain, in_decl);
11618
11619         tree type2 = TRAIT_EXPR_TYPE2 (t);
11620         if (type2)
11621           type2 = tsubst_copy (type2, args, complain, in_decl);
11622         
11623         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11624       }
11625
11626     case STMT_EXPR:
11627       {
11628         tree old_stmt_expr = cur_stmt_expr;
11629         tree stmt_expr = begin_stmt_expr ();
11630
11631         cur_stmt_expr = stmt_expr;
11632         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11633                      integral_constant_expression_p);
11634         stmt_expr = finish_stmt_expr (stmt_expr, false);
11635         cur_stmt_expr = old_stmt_expr;
11636
11637         return stmt_expr;
11638       }
11639
11640     case CONST_DECL:
11641       t = tsubst_copy (t, args, complain, in_decl);
11642       /* As in finish_id_expression, we resolve enumeration constants
11643          to their underlying values.  */
11644       if (TREE_CODE (t) == CONST_DECL)
11645         {
11646           used_types_insert (TREE_TYPE (t));
11647           return DECL_INITIAL (t);
11648         }
11649       return t;
11650
11651     default:
11652       /* Handle Objective-C++ constructs, if appropriate.  */
11653       {
11654         tree subst
11655           = objcp_tsubst_copy_and_build (t, args, complain,
11656                                          in_decl, /*function_p=*/false);
11657         if (subst)
11658           return subst;
11659       }
11660       return tsubst_copy (t, args, complain, in_decl);
11661     }
11662
11663 #undef RECUR
11664 }
11665
11666 /* Verify that the instantiated ARGS are valid. For type arguments,
11667    make sure that the type's linkage is ok. For non-type arguments,
11668    make sure they are constants if they are integral or enumerations.
11669    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11670
11671 static bool
11672 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11673 {
11674   int ix, len = DECL_NTPARMS (tmpl);
11675   bool result = false;
11676
11677   for (ix = 0; ix != len; ix++)
11678     {
11679       tree t = TREE_VEC_ELT (args, ix);
11680
11681       if (TYPE_P (t))
11682         {
11683           /* [basic.link]: A name with no linkage (notably, the name
11684              of a class or enumeration declared in a local scope)
11685              shall not be used to declare an entity with linkage.
11686              This implies that names with no linkage cannot be used as
11687              template arguments.  */
11688           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11689
11690           if (nt)
11691             {
11692               /* DR 488 makes use of a type with no linkage cause
11693                  type deduction to fail.  */
11694               if (complain & tf_error)
11695                 {
11696                   if (TYPE_ANONYMOUS_P (nt))
11697                     error ("%qT is/uses anonymous type", t);
11698                   else
11699                     error ("template argument for %qD uses local type %qT",
11700                            tmpl, t);
11701                 }
11702               result = true;
11703             }
11704           /* In order to avoid all sorts of complications, we do not
11705              allow variably-modified types as template arguments.  */
11706           else if (variably_modified_type_p (t, NULL_TREE))
11707             {
11708               if (complain & tf_error)
11709                 error ("%qT is a variably modified type", t);
11710               result = true;
11711             }
11712         }
11713       /* A non-type argument of integral or enumerated type must be a
11714          constant.  */
11715       else if (TREE_TYPE (t)
11716                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11717                && !TREE_CONSTANT (t))
11718         {
11719           if (complain & tf_error)
11720             error ("integral expression %qE is not constant", t);
11721           result = true;
11722         }
11723     }
11724   if (result && (complain & tf_error))
11725     error ("  trying to instantiate %qD", tmpl);
11726   return result;
11727 }
11728
11729 /* Instantiate the indicated variable or function template TMPL with
11730    the template arguments in TARG_PTR.  */
11731
11732 tree
11733 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11734 {
11735   tree fndecl;
11736   tree gen_tmpl;
11737   tree spec;
11738   HOST_WIDE_INT saved_processing_template_decl;
11739
11740   if (tmpl == error_mark_node)
11741     return error_mark_node;
11742
11743   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11744
11745   /* If this function is a clone, handle it specially.  */
11746   if (DECL_CLONED_FUNCTION_P (tmpl))
11747     {
11748       tree spec;
11749       tree clone;
11750
11751       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11752                                    complain);
11753       if (spec == error_mark_node)
11754         return error_mark_node;
11755
11756       /* Look for the clone.  */
11757       FOR_EACH_CLONE (clone, spec)
11758         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11759           return clone;
11760       /* We should always have found the clone by now.  */
11761       gcc_unreachable ();
11762       return NULL_TREE;
11763     }
11764
11765   /* Check to see if we already have this specialization.  */
11766   spec = retrieve_specialization (tmpl, targ_ptr,
11767                                   /*class_specializations_p=*/false);
11768   if (spec != NULL_TREE)
11769     return spec;
11770
11771   gen_tmpl = most_general_template (tmpl);
11772   if (tmpl != gen_tmpl)
11773     {
11774       /* The TMPL is a partial instantiation.  To get a full set of
11775          arguments we must add the arguments used to perform the
11776          partial instantiation.  */
11777       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11778                                               targ_ptr);
11779
11780       /* Check to see if we already have this specialization.  */
11781       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11782                                       /*class_specializations_p=*/false);
11783       if (spec != NULL_TREE)
11784         return spec;
11785     }
11786
11787   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11788                                complain))
11789     return error_mark_node;
11790
11791   /* We are building a FUNCTION_DECL, during which the access of its
11792      parameters and return types have to be checked.  However this
11793      FUNCTION_DECL which is the desired context for access checking
11794      is not built yet.  We solve this chicken-and-egg problem by
11795      deferring all checks until we have the FUNCTION_DECL.  */
11796   push_deferring_access_checks (dk_deferred);
11797
11798   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11799      (because, for example, we have encountered a non-dependent
11800      function call in the body of a template function and must now
11801      determine which of several overloaded functions will be called),
11802      within the instantiation itself we are not processing a
11803      template.  */  
11804   saved_processing_template_decl = processing_template_decl;
11805   processing_template_decl = 0;
11806   /* Substitute template parameters to obtain the specialization.  */
11807   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11808                    targ_ptr, complain, gen_tmpl);
11809   processing_template_decl = saved_processing_template_decl;
11810   if (fndecl == error_mark_node)
11811     return error_mark_node;
11812
11813   /* Now we know the specialization, compute access previously
11814      deferred.  */
11815   push_access_scope (fndecl);
11816   perform_deferred_access_checks ();
11817   pop_access_scope (fndecl);
11818   pop_deferring_access_checks ();
11819
11820   /* The DECL_TI_TEMPLATE should always be the immediate parent
11821      template, not the most general template.  */
11822   DECL_TI_TEMPLATE (fndecl) = tmpl;
11823
11824   /* If we've just instantiated the main entry point for a function,
11825      instantiate all the alternate entry points as well.  We do this
11826      by cloning the instantiation of the main entry point, not by
11827      instantiating the template clones.  */
11828   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11829     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11830
11831   return fndecl;
11832 }
11833
11834 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11835    arguments that are being used when calling it.  TARGS is a vector
11836    into which the deduced template arguments are placed.
11837
11838    Return zero for success, 2 for an incomplete match that doesn't resolve
11839    all the types, and 1 for complete failure.  An error message will be
11840    printed only for an incomplete match.
11841
11842    If FN is a conversion operator, or we are trying to produce a specific
11843    specialization, RETURN_TYPE is the return type desired.
11844
11845    The EXPLICIT_TARGS are explicit template arguments provided via a
11846    template-id.
11847
11848    The parameter STRICT is one of:
11849
11850    DEDUCE_CALL:
11851      We are deducing arguments for a function call, as in
11852      [temp.deduct.call].
11853
11854    DEDUCE_CONV:
11855      We are deducing arguments for a conversion function, as in
11856      [temp.deduct.conv].
11857
11858    DEDUCE_EXACT:
11859      We are deducing arguments when doing an explicit instantiation
11860      as in [temp.explicit], when determining an explicit specialization
11861      as in [temp.expl.spec], or when taking the address of a function
11862      template, as in [temp.deduct.funcaddr].  */
11863
11864 int
11865 fn_type_unification (tree fn,
11866                      tree explicit_targs,
11867                      tree targs,
11868                      tree args,
11869                      tree return_type,
11870                      unification_kind_t strict,
11871                      int flags)
11872 {
11873   tree parms;
11874   tree fntype;
11875   int result;
11876   bool incomplete_argument_packs_p = false;
11877
11878   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11879
11880   fntype = TREE_TYPE (fn);
11881   if (explicit_targs)
11882     {
11883       /* [temp.deduct]
11884
11885          The specified template arguments must match the template
11886          parameters in kind (i.e., type, nontype, template), and there
11887          must not be more arguments than there are parameters;
11888          otherwise type deduction fails.
11889
11890          Nontype arguments must match the types of the corresponding
11891          nontype template parameters, or must be convertible to the
11892          types of the corresponding nontype parameters as specified in
11893          _temp.arg.nontype_, otherwise type deduction fails.
11894
11895          All references in the function type of the function template
11896          to the corresponding template parameters are replaced by the
11897          specified template argument values.  If a substitution in a
11898          template parameter or in the function type of the function
11899          template results in an invalid type, type deduction fails.  */
11900       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11901       int i, len = TREE_VEC_LENGTH (tparms);
11902       tree converted_args;
11903       bool incomplete = false;
11904
11905       if (explicit_targs == error_mark_node)
11906         return 1;
11907
11908       converted_args
11909         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11910                                   /*require_all_args=*/false,
11911                                   /*use_default_args=*/false));
11912       if (converted_args == error_mark_node)
11913         return 1;
11914
11915       /* Substitute the explicit args into the function type.  This is
11916          necessary so that, for instance, explicitly declared function
11917          arguments can match null pointed constants.  If we were given
11918          an incomplete set of explicit args, we must not do semantic
11919          processing during substitution as we could create partial
11920          instantiations.  */
11921       for (i = 0; i < len; i++)
11922         {
11923           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11924           bool parameter_pack = false;
11925
11926           /* Dig out the actual parm.  */
11927           if (TREE_CODE (parm) == TYPE_DECL
11928               || TREE_CODE (parm) == TEMPLATE_DECL)
11929             {
11930               parm = TREE_TYPE (parm);
11931               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11932             }
11933           else if (TREE_CODE (parm) == PARM_DECL)
11934             {
11935               parm = DECL_INITIAL (parm);
11936               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11937             }
11938
11939           if (parameter_pack)
11940             {
11941               int level, idx;
11942               tree targ;
11943               template_parm_level_and_index (parm, &level, &idx);
11944
11945               /* Mark the argument pack as "incomplete". We could
11946                  still deduce more arguments during unification.  */
11947               targ = TMPL_ARG (converted_args, level, idx);
11948               if (targ)
11949                 {
11950                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11951                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11952                     = ARGUMENT_PACK_ARGS (targ);
11953                 }
11954
11955               /* We have some incomplete argument packs.  */
11956               incomplete_argument_packs_p = true;
11957             }
11958         }
11959
11960       if (incomplete_argument_packs_p)
11961         /* Any substitution is guaranteed to be incomplete if there
11962            are incomplete argument packs, because we can still deduce
11963            more arguments.  */
11964         incomplete = 1;
11965       else
11966         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11967
11968       processing_template_decl += incomplete;
11969       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11970       processing_template_decl -= incomplete;
11971
11972       if (fntype == error_mark_node)
11973         return 1;
11974
11975       /* Place the explicitly specified arguments in TARGS.  */
11976       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11977         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11978     }
11979
11980   /* Never do unification on the 'this' parameter.  */
11981   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11982
11983   if (return_type)
11984     {
11985       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11986       args = tree_cons (NULL_TREE, return_type, args);
11987     }
11988
11989   /* We allow incomplete unification without an error message here
11990      because the standard doesn't seem to explicitly prohibit it.  Our
11991      callers must be ready to deal with unification failures in any
11992      event.  */
11993   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11994                                   targs, parms, args, /*subr=*/0,
11995                                   strict, flags);
11996
11997   if (result == 0 && incomplete_argument_packs_p)
11998     {
11999       int i, len = NUM_TMPL_ARGS (targs);
12000
12001       /* Clear the "incomplete" flags on all argument packs.  */
12002       for (i = 0; i < len; i++)
12003         {
12004           tree arg = TREE_VEC_ELT (targs, i);
12005           if (ARGUMENT_PACK_P (arg))
12006             {
12007               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
12008               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
12009             }
12010         }
12011     }
12012
12013   /* Now that we have bindings for all of the template arguments,
12014      ensure that the arguments deduced for the template template
12015      parameters have compatible template parameter lists.  We cannot
12016      check this property before we have deduced all template
12017      arguments, because the template parameter types of a template
12018      template parameter might depend on prior template parameters
12019      deduced after the template template parameter.  The following
12020      ill-formed example illustrates this issue:
12021
12022        template<typename T, template<T> class C> void f(C<5>, T);
12023
12024        template<int N> struct X {};
12025
12026        void g() {
12027          f(X<5>(), 5l); // error: template argument deduction fails
12028        }
12029
12030      The template parameter list of 'C' depends on the template type
12031      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12032      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12033      time that we deduce 'C'.  */
12034   if (result == 0
12035       && !template_template_parm_bindings_ok_p 
12036            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12037     return 1;
12038
12039   if (result == 0)
12040     /* All is well so far.  Now, check:
12041
12042        [temp.deduct]
12043
12044        When all template arguments have been deduced, all uses of
12045        template parameters in nondeduced contexts are replaced with
12046        the corresponding deduced argument values.  If the
12047        substitution results in an invalid type, as described above,
12048        type deduction fails.  */
12049     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
12050         == error_mark_node)
12051       return 1;
12052
12053   return result;
12054 }
12055
12056 /* Adjust types before performing type deduction, as described in
12057    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12058    sections are symmetric.  PARM is the type of a function parameter
12059    or the return type of the conversion function.  ARG is the type of
12060    the argument passed to the call, or the type of the value
12061    initialized with the result of the conversion function.
12062    ARG_EXPR is the original argument expression, which may be null.  */
12063
12064 static int
12065 maybe_adjust_types_for_deduction (unification_kind_t strict,
12066                                   tree* parm,
12067                                   tree* arg,
12068                                   tree arg_expr)
12069 {
12070   int result = 0;
12071
12072   switch (strict)
12073     {
12074     case DEDUCE_CALL:
12075       break;
12076
12077     case DEDUCE_CONV:
12078       {
12079         /* Swap PARM and ARG throughout the remainder of this
12080            function; the handling is precisely symmetric since PARM
12081            will initialize ARG rather than vice versa.  */
12082         tree* temp = parm;
12083         parm = arg;
12084         arg = temp;
12085         break;
12086       }
12087
12088     case DEDUCE_EXACT:
12089       /* There is nothing to do in this case.  */
12090       return 0;
12091
12092     default:
12093       gcc_unreachable ();
12094     }
12095
12096   if (TREE_CODE (*parm) != REFERENCE_TYPE)
12097     {
12098       /* [temp.deduct.call]
12099
12100          If P is not a reference type:
12101
12102          --If A is an array type, the pointer type produced by the
12103          array-to-pointer standard conversion (_conv.array_) is
12104          used in place of A for type deduction; otherwise,
12105
12106          --If A is a function type, the pointer type produced by
12107          the function-to-pointer standard conversion
12108          (_conv.func_) is used in place of A for type deduction;
12109          otherwise,
12110
12111          --If A is a cv-qualified type, the top level
12112          cv-qualifiers of A's type are ignored for type
12113          deduction.  */
12114       if (TREE_CODE (*arg) == ARRAY_TYPE)
12115         *arg = build_pointer_type (TREE_TYPE (*arg));
12116       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
12117         *arg = build_pointer_type (*arg);
12118       else
12119         *arg = TYPE_MAIN_VARIANT (*arg);
12120     }
12121
12122   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
12123      of the form T&&, where T is a template parameter, and the argument
12124      is an lvalue, T is deduced as A& */
12125   if (TREE_CODE (*parm) == REFERENCE_TYPE
12126       && TYPE_REF_IS_RVALUE (*parm)
12127       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12128       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12129       && arg_expr && real_lvalue_p (arg_expr))
12130     *arg = build_reference_type (*arg);
12131
12132   /* [temp.deduct.call]
12133
12134      If P is a cv-qualified type, the top level cv-qualifiers
12135      of P's type are ignored for type deduction.  If P is a
12136      reference type, the type referred to by P is used for
12137      type deduction.  */
12138   *parm = TYPE_MAIN_VARIANT (*parm);
12139   if (TREE_CODE (*parm) == REFERENCE_TYPE)
12140     {
12141       *parm = TREE_TYPE (*parm);
12142       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12143     }
12144
12145   /* DR 322. For conversion deduction, remove a reference type on parm
12146      too (which has been swapped into ARG).  */
12147   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
12148     *arg = TREE_TYPE (*arg);
12149
12150   return result;
12151 }
12152
12153 /* Most parms like fn_type_unification.
12154
12155    If SUBR is 1, we're being called recursively (to unify the
12156    arguments of a function or method parameter of a function
12157    template). */
12158
12159 static int
12160 type_unification_real (tree tparms,
12161                        tree targs,
12162                        tree xparms,
12163                        tree xargs,
12164                        int subr,
12165                        unification_kind_t strict,
12166                        int flags)
12167 {
12168   tree parm, arg, arg_expr;
12169   int i;
12170   int ntparms = TREE_VEC_LENGTH (tparms);
12171   int sub_strict;
12172   int saw_undeduced = 0;
12173   tree parms, args;
12174
12175   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
12176   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
12177   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
12178   gcc_assert (ntparms > 0);
12179
12180   switch (strict)
12181     {
12182     case DEDUCE_CALL:
12183       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
12184                     | UNIFY_ALLOW_DERIVED);
12185       break;
12186
12187     case DEDUCE_CONV:
12188       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12189       break;
12190
12191     case DEDUCE_EXACT:
12192       sub_strict = UNIFY_ALLOW_NONE;
12193       break;
12194
12195     default:
12196       gcc_unreachable ();
12197     }
12198
12199  again:
12200   parms = xparms;
12201   args = xargs;
12202
12203   while (parms && parms != void_list_node
12204          && args && args != void_list_node)
12205     {
12206       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12207         break;
12208
12209       parm = TREE_VALUE (parms);
12210       parms = TREE_CHAIN (parms);
12211       arg = TREE_VALUE (args);
12212       args = TREE_CHAIN (args);
12213       arg_expr = NULL;
12214
12215       if (arg == error_mark_node)
12216         return 1;
12217       if (arg == unknown_type_node)
12218         /* We can't deduce anything from this, but we might get all the
12219            template args from other function args.  */
12220         continue;
12221
12222       /* Conversions will be performed on a function argument that
12223          corresponds with a function parameter that contains only
12224          non-deducible template parameters and explicitly specified
12225          template parameters.  */
12226       if (!uses_template_parms (parm))
12227         {
12228           tree type;
12229
12230           if (!TYPE_P (arg))
12231             type = TREE_TYPE (arg);
12232           else
12233             type = arg;
12234
12235           if (same_type_p (parm, type))
12236             continue;
12237           if (strict != DEDUCE_EXACT
12238               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
12239                                   flags))
12240             continue;
12241
12242           return 1;
12243         }
12244
12245       if (!TYPE_P (arg))
12246         {
12247           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12248           if (type_unknown_p (arg))
12249             {
12250               /* [temp.deduct.type] 
12251
12252                  A template-argument can be deduced from a pointer to
12253                  function or pointer to member function argument if
12254                  the set of overloaded functions does not contain
12255                  function templates and at most one of a set of
12256                  overloaded functions provides a unique match.  */
12257               if (resolve_overloaded_unification
12258                   (tparms, targs, parm, arg, strict, sub_strict))
12259                 continue;
12260
12261               return 1;
12262             }
12263           arg_expr = arg;
12264           arg = unlowered_expr_type (arg);
12265           if (arg == error_mark_node)
12266             return 1;
12267         }
12268
12269       {
12270         int arg_strict = sub_strict;
12271
12272         if (!subr)
12273           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
12274                                                           arg_expr);
12275
12276         if (arg == init_list_type_node && arg_expr)
12277           arg = arg_expr;
12278         if (unify (tparms, targs, parm, arg, arg_strict))
12279           return 1;
12280       }
12281     }
12282
12283
12284   if (parms 
12285       && parms != void_list_node
12286       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12287     {
12288       /* Unify the remaining arguments with the pack expansion type.  */
12289       tree argvec;
12290       tree parmvec = make_tree_vec (1);
12291       int len = 0;
12292       tree t;
12293
12294       /* Count the number of arguments that remain.  */
12295       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12296         len++;
12297         
12298       /* Allocate a TREE_VEC and copy in all of the arguments */ 
12299       argvec = make_tree_vec (len);
12300       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12301         {
12302           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12303           ++i;
12304         }
12305
12306       /* Copy the parameter into parmvec.  */
12307       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12308       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12309                                 /*call_args_p=*/true, /*subr=*/subr))
12310         return 1;
12311
12312       /* Advance to the end of the list of parameters.  */
12313       parms = TREE_CHAIN (parms);
12314     }
12315
12316   /* Fail if we've reached the end of the parm list, and more args
12317      are present, and the parm list isn't variadic.  */
12318   if (args && args != void_list_node && parms == void_list_node)
12319     return 1;
12320   /* Fail if parms are left and they don't have default values.  */
12321   if (parms && parms != void_list_node
12322       && TREE_PURPOSE (parms) == NULL_TREE)
12323     return 1;
12324
12325   if (!subr)
12326     for (i = 0; i < ntparms; i++)
12327       if (!TREE_VEC_ELT (targs, i))
12328         {
12329           tree tparm;
12330
12331           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12332             continue;
12333
12334           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12335
12336           /* If this is an undeduced nontype parameter that depends on
12337              a type parameter, try another pass; its type may have been
12338              deduced from a later argument than the one from which
12339              this parameter can be deduced.  */
12340           if (TREE_CODE (tparm) == PARM_DECL
12341               && uses_template_parms (TREE_TYPE (tparm))
12342               && !saw_undeduced++)
12343             goto again;
12344
12345           /* Core issue #226 (C++0x) [temp.deduct]:
12346
12347                If a template argument has not been deduced, its
12348                default template argument, if any, is used. 
12349
12350              When we are in C++98 mode, TREE_PURPOSE will either
12351              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12352              to explicitly check cxx_dialect here.  */
12353           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12354             {
12355               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12356                                  targs, tf_none, NULL_TREE);
12357               if (arg == error_mark_node)
12358                 return 1;
12359               else
12360                 {
12361                   TREE_VEC_ELT (targs, i) = arg;
12362                   continue;
12363                 }
12364             }
12365
12366           /* If the type parameter is a parameter pack, then it will
12367              be deduced to an empty parameter pack.  */
12368           if (template_parameter_pack_p (tparm))
12369             {
12370               tree arg;
12371
12372               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12373                 {
12374                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12375                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12376                   TREE_CONSTANT (arg) = 1;
12377                 }
12378               else
12379                 arg = make_node (TYPE_ARGUMENT_PACK);
12380
12381               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12382
12383               TREE_VEC_ELT (targs, i) = arg;
12384               continue;
12385             }
12386
12387           return 2;
12388         }
12389
12390   return 0;
12391 }
12392
12393 /* Subroutine of type_unification_real.  Args are like the variables
12394    at the call site.  ARG is an overloaded function (or template-id);
12395    we try deducing template args from each of the overloads, and if
12396    only one succeeds, we go with that.  Modifies TARGS and returns
12397    true on success.  */
12398
12399 static bool
12400 resolve_overloaded_unification (tree tparms,
12401                                 tree targs,
12402                                 tree parm,
12403                                 tree arg,
12404                                 unification_kind_t strict,
12405                                 int sub_strict)
12406 {
12407   tree tempargs = copy_node (targs);
12408   int good = 0;
12409   bool addr_p;
12410
12411   if (TREE_CODE (arg) == ADDR_EXPR)
12412     {
12413       arg = TREE_OPERAND (arg, 0);
12414       addr_p = true;
12415     }
12416   else
12417     addr_p = false;
12418
12419   if (TREE_CODE (arg) == COMPONENT_REF)
12420     /* Handle `&x' where `x' is some static or non-static member
12421        function name.  */
12422     arg = TREE_OPERAND (arg, 1);
12423
12424   if (TREE_CODE (arg) == OFFSET_REF)
12425     arg = TREE_OPERAND (arg, 1);
12426
12427   /* Strip baselink information.  */
12428   if (BASELINK_P (arg))
12429     arg = BASELINK_FUNCTIONS (arg);
12430
12431   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12432     {
12433       /* If we got some explicit template args, we need to plug them into
12434          the affected templates before we try to unify, in case the
12435          explicit args will completely resolve the templates in question.  */
12436
12437       tree expl_subargs = TREE_OPERAND (arg, 1);
12438       arg = TREE_OPERAND (arg, 0);
12439
12440       for (; arg; arg = OVL_NEXT (arg))
12441         {
12442           tree fn = OVL_CURRENT (arg);
12443           tree subargs, elem;
12444
12445           if (TREE_CODE (fn) != TEMPLATE_DECL)
12446             continue;
12447
12448           ++processing_template_decl;
12449           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12450                                   expl_subargs, /*check_ret=*/false);
12451           if (subargs)
12452             {
12453               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12454               good += try_one_overload (tparms, targs, tempargs, parm,
12455                                         elem, strict, sub_strict, addr_p);
12456             }
12457           --processing_template_decl;
12458         }
12459     }
12460   else if (TREE_CODE (arg) != OVERLOAD
12461            && TREE_CODE (arg) != FUNCTION_DECL)
12462     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12463        -- but the deduction does not succeed because the expression is
12464        not just the function on its own.  */
12465     return false;
12466   else
12467     for (; arg; arg = OVL_NEXT (arg))
12468       good += try_one_overload (tparms, targs, tempargs, parm,
12469                                 TREE_TYPE (OVL_CURRENT (arg)),
12470                                 strict, sub_strict, addr_p);
12471
12472   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12473      to function or pointer to member function argument if the set of
12474      overloaded functions does not contain function templates and at most
12475      one of a set of overloaded functions provides a unique match.
12476
12477      So if we found multiple possibilities, we return success but don't
12478      deduce anything.  */
12479
12480   if (good == 1)
12481     {
12482       int i = TREE_VEC_LENGTH (targs);
12483       for (; i--; )
12484         if (TREE_VEC_ELT (tempargs, i))
12485           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12486     }
12487   if (good)
12488     return true;
12489
12490   return false;
12491 }
12492
12493 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12494    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12495    different overloads deduce different arguments for a given parm.
12496    ADDR_P is true if the expression for which deduction is being
12497    performed was of the form "& fn" rather than simply "fn".
12498
12499    Returns 1 on success.  */
12500
12501 static int
12502 try_one_overload (tree tparms,
12503                   tree orig_targs,
12504                   tree targs,
12505                   tree parm,
12506                   tree arg,
12507                   unification_kind_t strict,
12508                   int sub_strict,
12509                   bool addr_p)
12510 {
12511   int nargs;
12512   tree tempargs;
12513   int i;
12514
12515   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12516      to function or pointer to member function argument if the set of
12517      overloaded functions does not contain function templates and at most
12518      one of a set of overloaded functions provides a unique match.
12519
12520      So if this is a template, just return success.  */
12521
12522   if (uses_template_parms (arg))
12523     return 1;
12524
12525   if (TREE_CODE (arg) == METHOD_TYPE)
12526     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12527   else if (addr_p)
12528     arg = build_pointer_type (arg);
12529
12530   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12531
12532   /* We don't copy orig_targs for this because if we have already deduced
12533      some template args from previous args, unify would complain when we
12534      try to deduce a template parameter for the same argument, even though
12535      there isn't really a conflict.  */
12536   nargs = TREE_VEC_LENGTH (targs);
12537   tempargs = make_tree_vec (nargs);
12538
12539   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12540     return 0;
12541
12542   /* First make sure we didn't deduce anything that conflicts with
12543      explicitly specified args.  */
12544   for (i = nargs; i--; )
12545     {
12546       tree elt = TREE_VEC_ELT (tempargs, i);
12547       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12548
12549       if (!elt)
12550         /*NOP*/;
12551       else if (uses_template_parms (elt))
12552         /* Since we're unifying against ourselves, we will fill in
12553            template args used in the function parm list with our own
12554            template parms.  Discard them.  */
12555         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12556       else if (oldelt && !template_args_equal (oldelt, elt))
12557         return 0;
12558     }
12559
12560   for (i = nargs; i--; )
12561     {
12562       tree elt = TREE_VEC_ELT (tempargs, i);
12563
12564       if (elt)
12565         TREE_VEC_ELT (targs, i) = elt;
12566     }
12567
12568   return 1;
12569 }
12570
12571 /* PARM is a template class (perhaps with unbound template
12572    parameters).  ARG is a fully instantiated type.  If ARG can be
12573    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12574    TARGS are as for unify.  */
12575
12576 static tree
12577 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12578 {
12579   tree copy_of_targs;
12580
12581   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12582       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12583           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12584     return NULL_TREE;
12585
12586   /* We need to make a new template argument vector for the call to
12587      unify.  If we used TARGS, we'd clutter it up with the result of
12588      the attempted unification, even if this class didn't work out.
12589      We also don't want to commit ourselves to all the unifications
12590      we've already done, since unification is supposed to be done on
12591      an argument-by-argument basis.  In other words, consider the
12592      following pathological case:
12593
12594        template <int I, int J, int K>
12595        struct S {};
12596
12597        template <int I, int J>
12598        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12599
12600        template <int I, int J, int K>
12601        void f(S<I, J, K>, S<I, I, I>);
12602
12603        void g() {
12604          S<0, 0, 0> s0;
12605          S<0, 1, 2> s2;
12606
12607          f(s0, s2);
12608        }
12609
12610      Now, by the time we consider the unification involving `s2', we
12611      already know that we must have `f<0, 0, 0>'.  But, even though
12612      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12613      because there are two ways to unify base classes of S<0, 1, 2>
12614      with S<I, I, I>.  If we kept the already deduced knowledge, we
12615      would reject the possibility I=1.  */
12616   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12617
12618   /* If unification failed, we're done.  */
12619   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12620              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12621     return NULL_TREE;
12622
12623   return arg;
12624 }
12625
12626 /* Given a template type PARM and a class type ARG, find the unique
12627    base type in ARG that is an instance of PARM.  We do not examine
12628    ARG itself; only its base-classes.  If there is not exactly one
12629    appropriate base class, return NULL_TREE.  PARM may be the type of
12630    a partial specialization, as well as a plain template type.  Used
12631    by unify.  */
12632
12633 static tree
12634 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12635 {
12636   tree rval = NULL_TREE;
12637   tree binfo;
12638
12639   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
12640
12641   binfo = TYPE_BINFO (complete_type (arg));
12642   if (!binfo)
12643     /* The type could not be completed.  */
12644     return NULL_TREE;
12645
12646   /* Walk in inheritance graph order.  The search order is not
12647      important, and this avoids multiple walks of virtual bases.  */
12648   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12649     {
12650       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12651
12652       if (r)
12653         {
12654           /* If there is more than one satisfactory baseclass, then:
12655
12656                [temp.deduct.call]
12657
12658               If they yield more than one possible deduced A, the type
12659               deduction fails.
12660
12661              applies.  */
12662           if (rval && !same_type_p (r, rval))
12663             return NULL_TREE;
12664
12665           rval = r;
12666         }
12667     }
12668
12669   return rval;
12670 }
12671
12672 /* Returns the level of DECL, which declares a template parameter.  */
12673
12674 static int
12675 template_decl_level (tree decl)
12676 {
12677   switch (TREE_CODE (decl))
12678     {
12679     case TYPE_DECL:
12680     case TEMPLATE_DECL:
12681       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12682
12683     case PARM_DECL:
12684       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12685
12686     default:
12687       gcc_unreachable ();
12688     }
12689   return 0;
12690 }
12691
12692 /* Decide whether ARG can be unified with PARM, considering only the
12693    cv-qualifiers of each type, given STRICT as documented for unify.
12694    Returns nonzero iff the unification is OK on that basis.  */
12695
12696 static int
12697 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12698 {
12699   int arg_quals = cp_type_quals (arg);
12700   int parm_quals = cp_type_quals (parm);
12701
12702   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12703       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12704     {
12705       /*  Although a CVR qualifier is ignored when being applied to a
12706           substituted template parameter ([8.3.2]/1 for example), that
12707           does not apply during deduction [14.8.2.4]/1, (even though
12708           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12709           this).  Except when we're allowing additional CV qualifiers
12710           at the outer level [14.8.2.1]/3,1st bullet.  */
12711       if ((TREE_CODE (arg) == REFERENCE_TYPE
12712            || TREE_CODE (arg) == FUNCTION_TYPE
12713            || TREE_CODE (arg) == METHOD_TYPE)
12714           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12715         return 0;
12716
12717       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12718           && (parm_quals & TYPE_QUAL_RESTRICT))
12719         return 0;
12720     }
12721
12722   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12723       && (arg_quals & parm_quals) != parm_quals)
12724     return 0;
12725
12726   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12727       && (parm_quals & arg_quals) != arg_quals)
12728     return 0;
12729
12730   return 1;
12731 }
12732
12733 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12734 void 
12735 template_parm_level_and_index (tree parm, int* level, int* index)
12736 {
12737   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12738       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12739       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12740     {
12741       *index = TEMPLATE_TYPE_IDX (parm);
12742       *level = TEMPLATE_TYPE_LEVEL (parm);
12743     }
12744   else
12745     {
12746       *index = TEMPLATE_PARM_IDX (parm);
12747       *level = TEMPLATE_PARM_LEVEL (parm);
12748     }
12749 }
12750
12751 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12752    expansion at the end of PACKED_PARMS. Returns 0 if the type
12753    deduction succeeds, 1 otherwise. STRICT is the same as in
12754    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12755    call argument list. We'll need to adjust the arguments to make them
12756    types. SUBR tells us if this is from a recursive call to
12757    type_unification_real.  */
12758 int
12759 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12760                       tree packed_args, int strict, bool call_args_p,
12761                       bool subr)
12762 {
12763   tree parm 
12764     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12765   tree pattern = PACK_EXPANSION_PATTERN (parm);
12766   tree pack, packs = NULL_TREE;
12767   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12768   int len = TREE_VEC_LENGTH (packed_args);
12769
12770   /* Determine the parameter packs we will be deducing from the
12771      pattern, and record their current deductions.  */
12772   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12773        pack; pack = TREE_CHAIN (pack))
12774     {
12775       tree parm_pack = TREE_VALUE (pack);
12776       int idx, level;
12777
12778       /* Determine the index and level of this parameter pack.  */
12779       template_parm_level_and_index (parm_pack, &level, &idx);
12780
12781       /* Keep track of the parameter packs and their corresponding
12782          argument packs.  */
12783       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12784       TREE_TYPE (packs) = make_tree_vec (len - start);
12785     }
12786   
12787   /* Loop through all of the arguments that have not yet been
12788      unified and unify each with the pattern.  */
12789   for (i = start; i < len; i++)
12790     {
12791       tree parm = pattern;
12792
12793       /* For each parameter pack, clear out the deduced value so that
12794          we can deduce it again.  */
12795       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12796         {
12797           int idx, level;
12798           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12799
12800           TMPL_ARG (targs, level, idx) = NULL_TREE;
12801         }
12802
12803       /* Unify the pattern with the current argument.  */
12804       {
12805         tree arg = TREE_VEC_ELT (packed_args, i);
12806         tree arg_expr = NULL_TREE;
12807         int arg_strict = strict;
12808         bool skip_arg_p = false;
12809
12810         if (call_args_p)
12811           {
12812             int sub_strict;
12813
12814             /* This mirrors what we do in type_unification_real.  */
12815             switch (strict)
12816               {
12817               case DEDUCE_CALL:
12818                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12819                               | UNIFY_ALLOW_MORE_CV_QUAL
12820                               | UNIFY_ALLOW_DERIVED);
12821                 break;
12822                 
12823               case DEDUCE_CONV:
12824                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12825                 break;
12826                 
12827               case DEDUCE_EXACT:
12828                 sub_strict = UNIFY_ALLOW_NONE;
12829                 break;
12830                 
12831               default:
12832                 gcc_unreachable ();
12833               }
12834
12835             if (!TYPE_P (arg))
12836               {
12837                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12838                 if (type_unknown_p (arg))
12839                   {
12840                     /* [temp.deduct.type] A template-argument can be
12841                        deduced from a pointer to function or pointer
12842                        to member function argument if the set of
12843                        overloaded functions does not contain function
12844                        templates and at most one of a set of
12845                        overloaded functions provides a unique
12846                        match.  */
12847
12848                     if (resolve_overloaded_unification
12849                         (tparms, targs, parm, arg, strict, sub_strict)
12850                         != 0)
12851                       return 1;
12852                     skip_arg_p = true;
12853                   }
12854
12855                 if (!skip_arg_p)
12856                   {
12857                     arg_expr = arg;
12858                     arg = unlowered_expr_type (arg);
12859                     if (arg == error_mark_node)
12860                       return 1;
12861                   }
12862               }
12863       
12864             arg_strict = sub_strict;
12865
12866             if (!subr)
12867               arg_strict |= 
12868                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12869                                                   arg_expr);
12870           }
12871
12872         if (!skip_arg_p)
12873           {
12874             if (unify (tparms, targs, parm, arg, arg_strict))
12875               return 1;
12876           }
12877       }
12878
12879       /* For each parameter pack, collect the deduced value.  */
12880       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12881         {
12882           int idx, level;
12883           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12884
12885           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12886             TMPL_ARG (targs, level, idx);
12887         }
12888     }
12889
12890   /* Verify that the results of unification with the parameter packs
12891      produce results consistent with what we've seen before, and make
12892      the deduced argument packs available.  */
12893   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12894     {
12895       tree old_pack = TREE_VALUE (pack);
12896       tree new_args = TREE_TYPE (pack);
12897       int i, len = TREE_VEC_LENGTH (new_args);
12898       bool nondeduced_p = false;
12899
12900       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12901          actually deduce anything.  */
12902       for (i = 0; i < len && !nondeduced_p; ++i)
12903         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12904           nondeduced_p = true;
12905       if (nondeduced_p)
12906         continue;
12907
12908       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12909         {
12910           /* Prepend the explicit arguments onto NEW_ARGS.  */
12911           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12912           tree old_args = new_args;
12913           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12914           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12915
12916           /* Copy the explicit arguments.  */
12917           new_args = make_tree_vec (len);
12918           for (i = 0; i < explicit_len; i++)
12919             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12920
12921           /* Copy the deduced arguments.  */
12922           for (; i < len; i++)
12923             TREE_VEC_ELT (new_args, i) =
12924               TREE_VEC_ELT (old_args, i - explicit_len);
12925         }
12926
12927       if (!old_pack)
12928         {
12929           tree result;
12930           int idx, level;
12931           
12932           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12933
12934           /* Build the deduced *_ARGUMENT_PACK.  */
12935           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12936             {
12937               result = make_node (NONTYPE_ARGUMENT_PACK);
12938               TREE_TYPE (result) = 
12939                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12940               TREE_CONSTANT (result) = 1;
12941             }
12942           else
12943             result = make_node (TYPE_ARGUMENT_PACK);
12944
12945           SET_ARGUMENT_PACK_ARGS (result, new_args);
12946
12947           /* Note the deduced argument packs for this parameter
12948              pack.  */
12949           TMPL_ARG (targs, level, idx) = result;
12950         }
12951       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12952                && (ARGUMENT_PACK_ARGS (old_pack) 
12953                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12954         {
12955           /* We only had the explicitly-provided arguments before, but
12956              now we have a complete set of arguments.  */
12957           int idx, level;
12958           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12959           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12960
12961           /* Keep the original deduced argument pack.  */
12962           TMPL_ARG (targs, level, idx) = old_pack;
12963
12964           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12965           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12966           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12967         }
12968       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12969                                     new_args))
12970         /* Inconsistent unification of this parameter pack.  */
12971         return 1;
12972       else
12973         {
12974           int idx, level;
12975           
12976           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12977
12978           /* Keep the original deduced argument pack.  */
12979           TMPL_ARG (targs, level, idx) = old_pack;
12980         }
12981     }
12982
12983   return 0;
12984 }
12985
12986 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12987    set of template parameters to a template.  TARGS is the bindings
12988    for those template parameters, as determined thus far; TARGS may
12989    include template arguments for outer levels of template parameters
12990    as well.  PARM is a parameter to a template function, or a
12991    subcomponent of that parameter; ARG is the corresponding argument.
12992    This function attempts to match PARM with ARG in a manner
12993    consistent with the existing assignments in TARGS.  If more values
12994    are deduced, then TARGS is updated.
12995
12996    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12997    parameter STRICT is a bitwise or of the following flags:
12998
12999      UNIFY_ALLOW_NONE:
13000        Require an exact match between PARM and ARG.
13001      UNIFY_ALLOW_MORE_CV_QUAL:
13002        Allow the deduced ARG to be more cv-qualified (by qualification
13003        conversion) than ARG.
13004      UNIFY_ALLOW_LESS_CV_QUAL:
13005        Allow the deduced ARG to be less cv-qualified than ARG.
13006      UNIFY_ALLOW_DERIVED:
13007        Allow the deduced ARG to be a template base class of ARG,
13008        or a pointer to a template base class of the type pointed to by
13009        ARG.
13010      UNIFY_ALLOW_INTEGER:
13011        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
13012        case for more information.
13013      UNIFY_ALLOW_OUTER_LEVEL:
13014        This is the outermost level of a deduction. Used to determine validity
13015        of qualification conversions. A valid qualification conversion must
13016        have const qualified pointers leading up to the inner type which
13017        requires additional CV quals, except at the outer level, where const
13018        is not required [conv.qual]. It would be normal to set this flag in
13019        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
13020      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
13021        This is the outermost level of a deduction, and PARM can be more CV
13022        qualified at this point.
13023      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
13024        This is the outermost level of a deduction, and PARM can be less CV
13025        qualified at this point.  */
13026
13027 static int
13028 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
13029 {
13030   int idx;
13031   tree targ;
13032   tree tparm;
13033   int strict_in = strict;
13034
13035   /* I don't think this will do the right thing with respect to types.
13036      But the only case I've seen it in so far has been array bounds, where
13037      signedness is the only information lost, and I think that will be
13038      okay.  */
13039   while (TREE_CODE (parm) == NOP_EXPR)
13040     parm = TREE_OPERAND (parm, 0);
13041
13042   if (arg == error_mark_node)
13043     return 1;
13044   if (arg == unknown_type_node
13045       || arg == init_list_type_node)
13046     /* We can't deduce anything from this, but we might get all the
13047        template args from other function args.  */
13048     return 0;
13049
13050   /* If PARM uses template parameters, then we can't bail out here,
13051      even if ARG == PARM, since we won't record unifications for the
13052      template parameters.  We might need them if we're trying to
13053      figure out which of two things is more specialized.  */
13054   if (arg == parm && !uses_template_parms (parm))
13055     return 0;
13056
13057   /* Handle init lists early, so the rest of the function can assume
13058      we're dealing with a type. */
13059   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
13060     {
13061       tree elt, elttype;
13062       unsigned i;
13063
13064       if (!is_std_init_list (parm))
13065         /* We can only deduce from an initializer list argument if the
13066            parameter is std::initializer_list; otherwise this is a
13067            non-deduced context. */
13068         return 0;
13069
13070       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
13071
13072       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
13073         {
13074           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
13075             elt = TREE_TYPE (elt);
13076           if (unify (tparms, targs, elttype, elt, UNIFY_ALLOW_NONE))
13077             return 1;
13078         }
13079       return 0;
13080     }
13081
13082   /* Immediately reject some pairs that won't unify because of
13083      cv-qualification mismatches.  */
13084   if (TREE_CODE (arg) == TREE_CODE (parm)
13085       && TYPE_P (arg)
13086       /* It is the elements of the array which hold the cv quals of an array
13087          type, and the elements might be template type parms. We'll check
13088          when we recurse.  */
13089       && TREE_CODE (arg) != ARRAY_TYPE
13090       /* We check the cv-qualifiers when unifying with template type
13091          parameters below.  We want to allow ARG `const T' to unify with
13092          PARM `T' for example, when computing which of two templates
13093          is more specialized, for example.  */
13094       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
13095       && !check_cv_quals_for_unify (strict_in, arg, parm))
13096     return 1;
13097
13098   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
13099       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
13100     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
13101   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
13102   strict &= ~UNIFY_ALLOW_DERIVED;
13103   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13104   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
13105
13106   switch (TREE_CODE (parm))
13107     {
13108     case TYPENAME_TYPE:
13109     case SCOPE_REF:
13110     case UNBOUND_CLASS_TEMPLATE:
13111       /* In a type which contains a nested-name-specifier, template
13112          argument values cannot be deduced for template parameters used
13113          within the nested-name-specifier.  */
13114       return 0;
13115
13116     case TEMPLATE_TYPE_PARM:
13117     case TEMPLATE_TEMPLATE_PARM:
13118     case BOUND_TEMPLATE_TEMPLATE_PARM:
13119       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13120       if (tparm == error_mark_node)
13121         return 1;
13122
13123       if (TEMPLATE_TYPE_LEVEL (parm)
13124           != template_decl_level (tparm))
13125         /* The PARM is not one we're trying to unify.  Just check
13126            to see if it matches ARG.  */
13127         return (TREE_CODE (arg) == TREE_CODE (parm)
13128                 && same_type_p (parm, arg)) ? 0 : 1;
13129       idx = TEMPLATE_TYPE_IDX (parm);
13130       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13131       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
13132
13133       /* Check for mixed types and values.  */
13134       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13135            && TREE_CODE (tparm) != TYPE_DECL)
13136           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13137               && TREE_CODE (tparm) != TEMPLATE_DECL))
13138         return 1;
13139
13140       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13141         {
13142           /* ARG must be constructed from a template class or a template
13143              template parameter.  */
13144           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
13145               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
13146             return 1;
13147
13148           {
13149             tree parmvec = TYPE_TI_ARGS (parm);
13150             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
13151             tree parm_parms 
13152               = DECL_INNERMOST_TEMPLATE_PARMS
13153                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
13154             int i, len;
13155             int parm_variadic_p = 0;
13156
13157             /* The resolution to DR150 makes clear that default
13158                arguments for an N-argument may not be used to bind T
13159                to a template template parameter with fewer than N
13160                parameters.  It is not safe to permit the binding of
13161                default arguments as an extension, as that may change
13162                the meaning of a conforming program.  Consider:
13163
13164                   struct Dense { static const unsigned int dim = 1; };
13165
13166                   template <template <typename> class View,
13167                             typename Block>
13168                   void operator+(float, View<Block> const&);
13169
13170                   template <typename Block,
13171                             unsigned int Dim = Block::dim>
13172                   struct Lvalue_proxy { operator float() const; };
13173
13174                   void
13175                   test_1d (void) {
13176                     Lvalue_proxy<Dense> p;
13177                     float b;
13178                     b + p;
13179                   }
13180
13181               Here, if Lvalue_proxy is permitted to bind to View, then
13182               the global operator+ will be used; if they are not, the
13183               Lvalue_proxy will be converted to float.  */
13184             if (coerce_template_parms (parm_parms,
13185                                        argvec,
13186                                        TYPE_TI_TEMPLATE (parm),
13187                                        tf_none,
13188                                        /*require_all_args=*/true,
13189                                        /*use_default_args=*/false)
13190                 == error_mark_node)
13191               return 1;
13192
13193             /* Deduce arguments T, i from TT<T> or TT<i>.
13194                We check each element of PARMVEC and ARGVEC individually
13195                rather than the whole TREE_VEC since they can have
13196                different number of elements.  */
13197
13198             parmvec = expand_template_argument_pack (parmvec);
13199             argvec = expand_template_argument_pack (argvec);
13200
13201             len = TREE_VEC_LENGTH (parmvec);
13202
13203             /* Check if the parameters end in a pack, making them
13204                variadic.  */
13205             if (len > 0
13206                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
13207               parm_variadic_p = 1;
13208             
13209             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
13210               return 1;
13211
13212              for (i = 0; i < len - parm_variadic_p; ++i)
13213               {
13214                 if (unify (tparms, targs,
13215                            TREE_VEC_ELT (parmvec, i),
13216                            TREE_VEC_ELT (argvec, i),
13217                            UNIFY_ALLOW_NONE))
13218                   return 1;
13219               }
13220
13221             if (parm_variadic_p
13222                 && unify_pack_expansion (tparms, targs,
13223                                          parmvec, argvec,
13224                                          UNIFY_ALLOW_NONE,
13225                                          /*call_args_p=*/false,
13226                                          /*subr=*/false))
13227               return 1;
13228           }
13229           arg = TYPE_TI_TEMPLATE (arg);
13230
13231           /* Fall through to deduce template name.  */
13232         }
13233
13234       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13235           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13236         {
13237           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
13238
13239           /* Simple cases: Value already set, does match or doesn't.  */
13240           if (targ != NULL_TREE && template_args_equal (targ, arg))
13241             return 0;
13242           else if (targ)
13243             return 1;
13244         }
13245       else
13246         {
13247           /* If PARM is `const T' and ARG is only `int', we don't have
13248              a match unless we are allowing additional qualification.
13249              If ARG is `const int' and PARM is just `T' that's OK;
13250              that binds `const int' to `T'.  */
13251           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
13252                                          arg, parm))
13253             return 1;
13254
13255           /* Consider the case where ARG is `const volatile int' and
13256              PARM is `const T'.  Then, T should be `volatile int'.  */
13257           arg = cp_build_qualified_type_real
13258             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
13259           if (arg == error_mark_node)
13260             return 1;
13261
13262           /* Simple cases: Value already set, does match or doesn't.  */
13263           if (targ != NULL_TREE && same_type_p (targ, arg))
13264             return 0;
13265           else if (targ)
13266             return 1;
13267
13268           /* Make sure that ARG is not a variable-sized array.  (Note
13269              that were talking about variable-sized arrays (like
13270              `int[n]'), rather than arrays of unknown size (like
13271              `int[]').)  We'll get very confused by such a type since
13272              the bound of the array will not be computable in an
13273              instantiation.  Besides, such types are not allowed in
13274              ISO C++, so we can do as we please here.  */
13275           if (variably_modified_type_p (arg, NULL_TREE))
13276             return 1;
13277         }
13278
13279       /* If ARG is a parameter pack or an expansion, we cannot unify
13280          against it unless PARM is also a parameter pack.  */
13281       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13282           && !template_parameter_pack_p (parm))
13283         return 1;
13284
13285       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13286       return 0;
13287
13288     case TEMPLATE_PARM_INDEX:
13289       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13290       if (tparm == error_mark_node)
13291         return 1;
13292
13293       if (TEMPLATE_PARM_LEVEL (parm)
13294           != template_decl_level (tparm))
13295         /* The PARM is not one we're trying to unify.  Just check
13296            to see if it matches ARG.  */
13297         return !(TREE_CODE (arg) == TREE_CODE (parm)
13298                  && cp_tree_equal (parm, arg));
13299
13300       idx = TEMPLATE_PARM_IDX (parm);
13301       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13302
13303       if (targ)
13304         return !cp_tree_equal (targ, arg);
13305
13306       /* [temp.deduct.type] If, in the declaration of a function template
13307          with a non-type template-parameter, the non-type
13308          template-parameter is used in an expression in the function
13309          parameter-list and, if the corresponding template-argument is
13310          deduced, the template-argument type shall match the type of the
13311          template-parameter exactly, except that a template-argument
13312          deduced from an array bound may be of any integral type.
13313          The non-type parameter might use already deduced type parameters.  */
13314       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
13315       if (!TREE_TYPE (arg))
13316         /* Template-parameter dependent expression.  Just accept it for now.
13317            It will later be processed in convert_template_argument.  */
13318         ;
13319       else if (same_type_p (TREE_TYPE (arg), tparm))
13320         /* OK */;
13321       else if ((strict & UNIFY_ALLOW_INTEGER)
13322                && (TREE_CODE (tparm) == INTEGER_TYPE
13323                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
13324         /* Convert the ARG to the type of PARM; the deduced non-type
13325            template argument must exactly match the types of the
13326            corresponding parameter.  */
13327         arg = fold (build_nop (TREE_TYPE (parm), arg));
13328       else if (uses_template_parms (tparm))
13329         /* We haven't deduced the type of this parameter yet.  Try again
13330            later.  */
13331         return 0;
13332       else
13333         return 1;
13334
13335       /* If ARG is a parameter pack or an expansion, we cannot unify
13336          against it unless PARM is also a parameter pack.  */
13337       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13338           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13339         return 1;
13340
13341       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13342       return 0;
13343
13344     case PTRMEM_CST:
13345      {
13346         /* A pointer-to-member constant can be unified only with
13347          another constant.  */
13348       if (TREE_CODE (arg) != PTRMEM_CST)
13349         return 1;
13350
13351       /* Just unify the class member. It would be useless (and possibly
13352          wrong, depending on the strict flags) to unify also
13353          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13354          arg refer to the same variable, even if through different
13355          classes. For instance:
13356
13357          struct A { int x; };
13358          struct B : A { };
13359
13360          Unification of &A::x and &B::x must succeed.  */
13361       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13362                     PTRMEM_CST_MEMBER (arg), strict);
13363      }
13364
13365     case POINTER_TYPE:
13366       {
13367         if (TREE_CODE (arg) != POINTER_TYPE)
13368           return 1;
13369
13370         /* [temp.deduct.call]
13371
13372            A can be another pointer or pointer to member type that can
13373            be converted to the deduced A via a qualification
13374            conversion (_conv.qual_).
13375
13376            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13377            This will allow for additional cv-qualification of the
13378            pointed-to types if appropriate.  */
13379
13380         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13381           /* The derived-to-base conversion only persists through one
13382              level of pointers.  */
13383           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13384
13385         return unify (tparms, targs, TREE_TYPE (parm),
13386                       TREE_TYPE (arg), strict);
13387       }
13388
13389     case REFERENCE_TYPE:
13390       if (TREE_CODE (arg) != REFERENCE_TYPE)
13391         return 1;
13392       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13393                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13394
13395     case ARRAY_TYPE:
13396       if (TREE_CODE (arg) != ARRAY_TYPE)
13397         return 1;
13398       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13399           != (TYPE_DOMAIN (arg) == NULL_TREE))
13400         return 1;
13401       if (TYPE_DOMAIN (parm) != NULL_TREE)
13402         {
13403           tree parm_max;
13404           tree arg_max;
13405           bool parm_cst;
13406           bool arg_cst;
13407
13408           /* Our representation of array types uses "N - 1" as the
13409              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13410              not an integer constant.  We cannot unify arbitrarily
13411              complex expressions, so we eliminate the MINUS_EXPRs
13412              here.  */
13413           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13414           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13415           if (!parm_cst)
13416             {
13417               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13418               parm_max = TREE_OPERAND (parm_max, 0);
13419             }
13420           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13421           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13422           if (!arg_cst)
13423             {
13424               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13425                  trying to unify the type of a variable with the type
13426                  of a template parameter.  For example:
13427
13428                    template <unsigned int N>
13429                    void f (char (&) [N]);
13430                    int g(); 
13431                    void h(int i) {
13432                      char a[g(i)];
13433                      f(a); 
13434                    }
13435
13436                 Here, the type of the ARG will be "int [g(i)]", and
13437                 may be a SAVE_EXPR, etc.  */
13438               if (TREE_CODE (arg_max) != MINUS_EXPR)
13439                 return 1;
13440               arg_max = TREE_OPERAND (arg_max, 0);
13441             }
13442
13443           /* If only one of the bounds used a MINUS_EXPR, compensate
13444              by adding one to the other bound.  */
13445           if (parm_cst && !arg_cst)
13446             parm_max = fold_build2 (PLUS_EXPR,
13447                                     integer_type_node,
13448                                     parm_max,
13449                                     integer_one_node);
13450           else if (arg_cst && !parm_cst)
13451             arg_max = fold_build2 (PLUS_EXPR,
13452                                    integer_type_node,
13453                                    arg_max,
13454                                    integer_one_node);
13455
13456           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13457             return 1;
13458         }
13459       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13460                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13461
13462     case REAL_TYPE:
13463     case COMPLEX_TYPE:
13464     case VECTOR_TYPE:
13465     case INTEGER_TYPE:
13466     case BOOLEAN_TYPE:
13467     case ENUMERAL_TYPE:
13468     case VOID_TYPE:
13469       if (TREE_CODE (arg) != TREE_CODE (parm))
13470         return 1;
13471
13472       /* We have already checked cv-qualification at the top of the
13473          function.  */
13474       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13475         return 1;
13476
13477       /* As far as unification is concerned, this wins.  Later checks
13478          will invalidate it if necessary.  */
13479       return 0;
13480
13481       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13482       /* Type INTEGER_CST can come from ordinary constant template args.  */
13483     case INTEGER_CST:
13484       while (TREE_CODE (arg) == NOP_EXPR)
13485         arg = TREE_OPERAND (arg, 0);
13486
13487       if (TREE_CODE (arg) != INTEGER_CST)
13488         return 1;
13489       return !tree_int_cst_equal (parm, arg);
13490
13491     case TREE_VEC:
13492       {
13493         int i;
13494         if (TREE_CODE (arg) != TREE_VEC)
13495           return 1;
13496         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13497           return 1;
13498         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13499           if (unify (tparms, targs,
13500                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13501                      UNIFY_ALLOW_NONE))
13502             return 1;
13503         return 0;
13504       }
13505
13506     case RECORD_TYPE:
13507     case UNION_TYPE:
13508       if (TREE_CODE (arg) != TREE_CODE (parm))
13509         return 1;
13510
13511       if (TYPE_PTRMEMFUNC_P (parm))
13512         {
13513           if (!TYPE_PTRMEMFUNC_P (arg))
13514             return 1;
13515
13516           return unify (tparms, targs,
13517                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13518                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13519                         strict);
13520         }
13521
13522       if (CLASSTYPE_TEMPLATE_INFO (parm))
13523         {
13524           tree t = NULL_TREE;
13525
13526           if (strict_in & UNIFY_ALLOW_DERIVED)
13527             {
13528               /* First, we try to unify the PARM and ARG directly.  */
13529               t = try_class_unification (tparms, targs,
13530                                          parm, arg);
13531
13532               if (!t)
13533                 {
13534                   /* Fallback to the special case allowed in
13535                      [temp.deduct.call]:
13536
13537                        If P is a class, and P has the form
13538                        template-id, then A can be a derived class of
13539                        the deduced A.  Likewise, if P is a pointer to
13540                        a class of the form template-id, A can be a
13541                        pointer to a derived class pointed to by the
13542                        deduced A.  */
13543                   t = get_template_base (tparms, targs, parm, arg);
13544
13545                   if (!t)
13546                     return 1;
13547                 }
13548             }
13549           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13550                    && (CLASSTYPE_TI_TEMPLATE (parm)
13551                        == CLASSTYPE_TI_TEMPLATE (arg)))
13552             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13553                Then, we should unify `int' and `U'.  */
13554             t = arg;
13555           else
13556             /* There's no chance of unification succeeding.  */
13557             return 1;
13558
13559           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13560                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13561         }
13562       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13563         return 1;
13564       return 0;
13565
13566     case METHOD_TYPE:
13567     case FUNCTION_TYPE:
13568       if (TREE_CODE (arg) != TREE_CODE (parm))
13569         return 1;
13570
13571       /* CV qualifications for methods can never be deduced, they must
13572          match exactly.  We need to check them explicitly here,
13573          because type_unification_real treats them as any other
13574          cv-qualified parameter.  */
13575       if (TREE_CODE (parm) == METHOD_TYPE
13576           && (!check_cv_quals_for_unify
13577               (UNIFY_ALLOW_NONE,
13578                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13579                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13580         return 1;
13581
13582       if (unify (tparms, targs, TREE_TYPE (parm),
13583                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13584         return 1;
13585       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13586                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13587                                     LOOKUP_NORMAL);
13588
13589     case OFFSET_TYPE:
13590       /* Unify a pointer to member with a pointer to member function, which
13591          deduces the type of the member as a function type. */
13592       if (TYPE_PTRMEMFUNC_P (arg))
13593         {
13594           tree method_type;
13595           tree fntype;
13596           cp_cv_quals cv_quals;
13597
13598           /* Check top-level cv qualifiers */
13599           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13600             return 1;
13601
13602           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13603                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13604             return 1;
13605
13606           /* Determine the type of the function we are unifying against. */
13607           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13608           fntype =
13609             build_function_type (TREE_TYPE (method_type),
13610                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13611
13612           /* Extract the cv-qualifiers of the member function from the
13613              implicit object parameter and place them on the function
13614              type to be restored later. */
13615           cv_quals =
13616             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13617           fntype = build_qualified_type (fntype, cv_quals);
13618           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13619         }
13620
13621       if (TREE_CODE (arg) != OFFSET_TYPE)
13622         return 1;
13623       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13624                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13625         return 1;
13626       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13627                     strict);
13628
13629     case CONST_DECL:
13630       if (DECL_TEMPLATE_PARM_P (parm))
13631         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13632       if (arg != integral_constant_value (parm))
13633         return 1;
13634       return 0;
13635
13636     case FIELD_DECL:
13637     case TEMPLATE_DECL:
13638       /* Matched cases are handled by the ARG == PARM test above.  */
13639       return 1;
13640
13641     case TYPE_ARGUMENT_PACK:
13642     case NONTYPE_ARGUMENT_PACK:
13643       {
13644         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13645         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13646         int i, len = TREE_VEC_LENGTH (packed_parms);
13647         int argslen = TREE_VEC_LENGTH (packed_args);
13648         int parm_variadic_p = 0;
13649
13650         for (i = 0; i < len; ++i)
13651           {
13652             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13653               {
13654                 if (i == len - 1)
13655                   /* We can unify against something with a trailing
13656                      parameter pack.  */
13657                   parm_variadic_p = 1;
13658                 else
13659                   /* Since there is something following the pack
13660                      expansion, we cannot unify this template argument
13661                      list.  */
13662                   return 0;
13663               }
13664           }
13665           
13666
13667         /* If we don't have enough arguments to satisfy the parameters
13668            (not counting the pack expression at the end), or we have
13669            too many arguments for a parameter list that doesn't end in
13670            a pack expression, we can't unify.  */
13671         if (argslen < (len - parm_variadic_p)
13672             || (argslen > len && !parm_variadic_p))
13673           return 1;
13674
13675         /* Unify all of the parameters that precede the (optional)
13676            pack expression.  */
13677         for (i = 0; i < len - parm_variadic_p; ++i)
13678           {
13679             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13680                        TREE_VEC_ELT (packed_args, i), strict))
13681               return 1;
13682           }
13683
13684         if (parm_variadic_p)
13685           return unify_pack_expansion (tparms, targs, 
13686                                        packed_parms, packed_args,
13687                                        strict, /*call_args_p=*/false,
13688                                        /*subr=*/false);
13689         return 0;
13690       }
13691
13692       break;
13693
13694     case TYPEOF_TYPE:
13695     case DECLTYPE_TYPE:
13696       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13697          nodes.  */
13698       return 0;
13699
13700     case ERROR_MARK:
13701       /* Unification fails if we hit an error node.  */
13702       return 1;
13703
13704     default:
13705       gcc_assert (EXPR_P (parm));
13706
13707       /* We must be looking at an expression.  This can happen with
13708          something like:
13709
13710            template <int I>
13711            void foo(S<I>, S<I + 2>);
13712
13713          This is a "nondeduced context":
13714
13715            [deduct.type]
13716
13717            The nondeduced contexts are:
13718
13719            --A type that is a template-id in which one or more of
13720              the template-arguments is an expression that references
13721              a template-parameter.
13722
13723          In these cases, we assume deduction succeeded, but don't
13724          actually infer any unifications.  */
13725
13726       if (!uses_template_parms (parm)
13727           && !template_args_equal (parm, arg))
13728         return 1;
13729       else
13730         return 0;
13731     }
13732 }
13733 \f
13734 /* Note that DECL can be defined in this translation unit, if
13735    required.  */
13736
13737 static void
13738 mark_definable (tree decl)
13739 {
13740   tree clone;
13741   DECL_NOT_REALLY_EXTERN (decl) = 1;
13742   FOR_EACH_CLONE (clone, decl)
13743     DECL_NOT_REALLY_EXTERN (clone) = 1;
13744 }
13745
13746 /* Called if RESULT is explicitly instantiated, or is a member of an
13747    explicitly instantiated class.  */
13748
13749 void
13750 mark_decl_instantiated (tree result, int extern_p)
13751 {
13752   SET_DECL_EXPLICIT_INSTANTIATION (result);
13753
13754   /* If this entity has already been written out, it's too late to
13755      make any modifications.  */
13756   if (TREE_ASM_WRITTEN (result))
13757     return;
13758
13759   if (TREE_CODE (result) != FUNCTION_DECL)
13760     /* The TREE_PUBLIC flag for function declarations will have been
13761        set correctly by tsubst.  */
13762     TREE_PUBLIC (result) = 1;
13763
13764   /* This might have been set by an earlier implicit instantiation.  */
13765   DECL_COMDAT (result) = 0;
13766
13767   if (extern_p)
13768     DECL_NOT_REALLY_EXTERN (result) = 0;
13769   else
13770     {
13771       mark_definable (result);
13772       /* Always make artificials weak.  */
13773       if (DECL_ARTIFICIAL (result) && flag_weak)
13774         comdat_linkage (result);
13775       /* For WIN32 we also want to put explicit instantiations in
13776          linkonce sections.  */
13777       else if (TREE_PUBLIC (result))
13778         maybe_make_one_only (result);
13779     }
13780
13781   /* If EXTERN_P, then this function will not be emitted -- unless
13782      followed by an explicit instantiation, at which point its linkage
13783      will be adjusted.  If !EXTERN_P, then this function will be
13784      emitted here.  In neither circumstance do we want
13785      import_export_decl to adjust the linkage.  */
13786   DECL_INTERFACE_KNOWN (result) = 1;
13787 }
13788
13789 /* Given two function templates PAT1 and PAT2, return:
13790
13791    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13792    -1 if PAT2 is more specialized than PAT1.
13793    0 if neither is more specialized.
13794
13795    LEN indicates the number of parameters we should consider
13796    (defaulted parameters should not be considered).
13797
13798    The 1998 std underspecified function template partial ordering, and
13799    DR214 addresses the issue.  We take pairs of arguments, one from
13800    each of the templates, and deduce them against each other.  One of
13801    the templates will be more specialized if all the *other*
13802    template's arguments deduce against its arguments and at least one
13803    of its arguments *does* *not* deduce against the other template's
13804    corresponding argument.  Deduction is done as for class templates.
13805    The arguments used in deduction have reference and top level cv
13806    qualifiers removed.  Iff both arguments were originally reference
13807    types *and* deduction succeeds in both directions, the template
13808    with the more cv-qualified argument wins for that pairing (if
13809    neither is more cv-qualified, they both are equal).  Unlike regular
13810    deduction, after all the arguments have been deduced in this way,
13811    we do *not* verify the deduced template argument values can be
13812    substituted into non-deduced contexts, nor do we have to verify
13813    that all template arguments have been deduced.  */
13814
13815 int
13816 more_specialized_fn (tree pat1, tree pat2, int len)
13817 {
13818   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13819   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13820   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13821   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13822   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13823   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13824   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13825   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13826   int better1 = 0;
13827   int better2 = 0;
13828
13829   /* Remove the this parameter from non-static member functions.  If
13830      one is a non-static member function and the other is not a static
13831      member function, remove the first parameter from that function
13832      also.  This situation occurs for operator functions where we
13833      locate both a member function (with this pointer) and non-member
13834      operator (with explicit first operand).  */
13835   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13836     {
13837       len--; /* LEN is the number of significant arguments for DECL1 */
13838       args1 = TREE_CHAIN (args1);
13839       if (!DECL_STATIC_FUNCTION_P (decl2))
13840         args2 = TREE_CHAIN (args2);
13841     }
13842   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13843     {
13844       args2 = TREE_CHAIN (args2);
13845       if (!DECL_STATIC_FUNCTION_P (decl1))
13846         {
13847           len--;
13848           args1 = TREE_CHAIN (args1);
13849         }
13850     }
13851
13852   /* If only one is a conversion operator, they are unordered.  */
13853   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13854     return 0;
13855
13856   /* Consider the return type for a conversion function */
13857   if (DECL_CONV_FN_P (decl1))
13858     {
13859       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13860       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13861       len++;
13862     }
13863
13864   processing_template_decl++;
13865
13866   while (len--
13867          /* Stop when an ellipsis is seen.  */
13868          && args1 != NULL_TREE && args2 != NULL_TREE)
13869     {
13870       tree arg1 = TREE_VALUE (args1);
13871       tree arg2 = TREE_VALUE (args2);
13872       int deduce1, deduce2;
13873       int quals1 = -1;
13874       int quals2 = -1;
13875
13876       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13877           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13878         {
13879           /* When both arguments are pack expansions, we need only
13880              unify the patterns themselves.  */
13881           arg1 = PACK_EXPANSION_PATTERN (arg1);
13882           arg2 = PACK_EXPANSION_PATTERN (arg2);
13883
13884           /* This is the last comparison we need to do.  */
13885           len = 0;
13886         }
13887
13888       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13889         {
13890           arg1 = TREE_TYPE (arg1);
13891           quals1 = cp_type_quals (arg1);
13892         }
13893
13894       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13895         {
13896           arg2 = TREE_TYPE (arg2);
13897           quals2 = cp_type_quals (arg2);
13898         }
13899
13900       if ((quals1 < 0) != (quals2 < 0))
13901         {
13902           /* Only of the args is a reference, see if we should apply
13903              array/function pointer decay to it.  This is not part of
13904              DR214, but is, IMHO, consistent with the deduction rules
13905              for the function call itself, and with our earlier
13906              implementation of the underspecified partial ordering
13907              rules.  (nathan).  */
13908           if (quals1 >= 0)
13909             {
13910               switch (TREE_CODE (arg1))
13911                 {
13912                 case ARRAY_TYPE:
13913                   arg1 = TREE_TYPE (arg1);
13914                   /* FALLTHROUGH. */
13915                 case FUNCTION_TYPE:
13916                   arg1 = build_pointer_type (arg1);
13917                   break;
13918
13919                 default:
13920                   break;
13921                 }
13922             }
13923           else
13924             {
13925               switch (TREE_CODE (arg2))
13926                 {
13927                 case ARRAY_TYPE:
13928                   arg2 = TREE_TYPE (arg2);
13929                   /* FALLTHROUGH. */
13930                 case FUNCTION_TYPE:
13931                   arg2 = build_pointer_type (arg2);
13932                   break;
13933
13934                 default:
13935                   break;
13936                 }
13937             }
13938         }
13939
13940       arg1 = TYPE_MAIN_VARIANT (arg1);
13941       arg2 = TYPE_MAIN_VARIANT (arg2);
13942
13943       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13944         {
13945           int i, len2 = list_length (args2);
13946           tree parmvec = make_tree_vec (1);
13947           tree argvec = make_tree_vec (len2);
13948           tree ta = args2;
13949
13950           /* Setup the parameter vector, which contains only ARG1.  */
13951           TREE_VEC_ELT (parmvec, 0) = arg1;
13952
13953           /* Setup the argument vector, which contains the remaining
13954              arguments.  */
13955           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13956             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13957
13958           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13959                                            argvec, UNIFY_ALLOW_NONE, 
13960                                            /*call_args_p=*/false, 
13961                                            /*subr=*/0);
13962
13963           /* We cannot deduce in the other direction, because ARG1 is
13964              a pack expansion but ARG2 is not.  */
13965           deduce2 = 0;
13966         }
13967       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13968         {
13969           int i, len1 = list_length (args1);
13970           tree parmvec = make_tree_vec (1);
13971           tree argvec = make_tree_vec (len1);
13972           tree ta = args1;
13973
13974           /* Setup the parameter vector, which contains only ARG1.  */
13975           TREE_VEC_ELT (parmvec, 0) = arg2;
13976
13977           /* Setup the argument vector, which contains the remaining
13978              arguments.  */
13979           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13980             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13981
13982           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13983                                            argvec, UNIFY_ALLOW_NONE, 
13984                                            /*call_args_p=*/false, 
13985                                            /*subr=*/0);
13986
13987           /* We cannot deduce in the other direction, because ARG2 is
13988              a pack expansion but ARG1 is not.*/
13989           deduce1 = 0;
13990         }
13991
13992       else
13993         {
13994           /* The normal case, where neither argument is a pack
13995              expansion.  */
13996           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13997           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13998         }
13999
14000       if (!deduce1)
14001         better2 = -1;
14002       if (!deduce2)
14003         better1 = -1;
14004       if (better1 < 0 && better2 < 0)
14005         /* We've failed to deduce something in either direction.
14006            These must be unordered.  */
14007         break;
14008
14009       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
14010         {
14011           /* Deduces in both directions, see if quals can
14012              disambiguate.  Pretend the worse one failed to deduce. */
14013           if ((quals1 & quals2) == quals2)
14014             deduce1 = 0;
14015           if ((quals1 & quals2) == quals1)
14016             deduce2 = 0;
14017         }
14018       if (deduce1 && !deduce2 && !better2)
14019         better2 = 1;
14020       if (deduce2 && !deduce1 && !better1)
14021         better1 = 1;
14022
14023       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14024           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14025         /* We have already processed all of the arguments in our
14026            handing of the pack expansion type.  */
14027         len = 0;
14028
14029       args1 = TREE_CHAIN (args1);
14030       args2 = TREE_CHAIN (args2);
14031     }
14032
14033   processing_template_decl--;
14034
14035   /* All things being equal, if the next argument is a pack expansion
14036      for one function but not for the other, prefer the
14037      non-variadic function.  */
14038   if ((better1 > 0) - (better2 > 0) == 0
14039       && args1 && TREE_VALUE (args1)
14040       && args2 && TREE_VALUE (args2))
14041     {
14042       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
14043         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
14044       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
14045         return 1;
14046     }
14047
14048   return (better1 > 0) - (better2 > 0);
14049 }
14050
14051 /* Determine which of two partial specializations is more specialized.
14052
14053    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
14054    to the first partial specialization.  The TREE_VALUE is the
14055    innermost set of template parameters for the partial
14056    specialization.  PAT2 is similar, but for the second template.
14057
14058    Return 1 if the first partial specialization is more specialized;
14059    -1 if the second is more specialized; 0 if neither is more
14060    specialized.
14061
14062    See [temp.class.order] for information about determining which of
14063    two templates is more specialized.  */
14064
14065 static int
14066 more_specialized_class (tree pat1, tree pat2)
14067 {
14068   tree targs;
14069   tree tmpl1, tmpl2;
14070   int winner = 0;
14071   bool any_deductions = false;
14072
14073   tmpl1 = TREE_TYPE (pat1);
14074   tmpl2 = TREE_TYPE (pat2);
14075
14076   /* Just like what happens for functions, if we are ordering between
14077      different class template specializations, we may encounter dependent
14078      types in the arguments, and we need our dependency check functions
14079      to behave correctly.  */
14080   ++processing_template_decl;
14081   targs = get_class_bindings (TREE_VALUE (pat1),
14082                               CLASSTYPE_TI_ARGS (tmpl1),
14083                               CLASSTYPE_TI_ARGS (tmpl2));
14084   if (targs)
14085     {
14086       --winner;
14087       any_deductions = true;
14088     }
14089
14090   targs = get_class_bindings (TREE_VALUE (pat2),
14091                               CLASSTYPE_TI_ARGS (tmpl2),
14092                               CLASSTYPE_TI_ARGS (tmpl1));
14093   if (targs)
14094     {
14095       ++winner;
14096       any_deductions = true;
14097     }
14098   --processing_template_decl;
14099
14100   /* In the case of a tie where at least one of the class templates
14101      has a parameter pack at the end, the template with the most
14102      non-packed parameters wins.  */
14103   if (winner == 0
14104       && any_deductions
14105       && (template_args_variadic_p (TREE_PURPOSE (pat1))
14106           || template_args_variadic_p (TREE_PURPOSE (pat2))))
14107     {
14108       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
14109       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
14110       int len1 = TREE_VEC_LENGTH (args1);
14111       int len2 = TREE_VEC_LENGTH (args2);
14112
14113       /* We don't count the pack expansion at the end.  */
14114       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
14115         --len1;
14116       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
14117         --len2;
14118
14119       if (len1 > len2)
14120         return 1;
14121       else if (len1 < len2)
14122         return -1;
14123     }
14124
14125   return winner;
14126 }
14127
14128 /* Return the template arguments that will produce the function signature
14129    DECL from the function template FN, with the explicit template
14130    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
14131    also match.  Return NULL_TREE if no satisfactory arguments could be
14132    found.  */
14133
14134 static tree
14135 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
14136 {
14137   int ntparms = DECL_NTPARMS (fn);
14138   tree targs = make_tree_vec (ntparms);
14139   tree decl_type;
14140   tree decl_arg_types;
14141
14142   /* Substitute the explicit template arguments into the type of DECL.
14143      The call to fn_type_unification will handle substitution into the
14144      FN.  */
14145   decl_type = TREE_TYPE (decl);
14146   if (explicit_args && uses_template_parms (decl_type))
14147     {
14148       tree tmpl;
14149       tree converted_args;
14150
14151       if (DECL_TEMPLATE_INFO (decl))
14152         tmpl = DECL_TI_TEMPLATE (decl);
14153       else
14154         /* We can get here for some invalid specializations.  */
14155         return NULL_TREE;
14156
14157       converted_args
14158         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
14159                                  explicit_args, NULL_TREE,
14160                                  tf_none,
14161                                  /*require_all_args=*/false,
14162                                  /*use_default_args=*/false);
14163       if (converted_args == error_mark_node)
14164         return NULL_TREE;
14165
14166       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
14167       if (decl_type == error_mark_node)
14168         return NULL_TREE;
14169     }
14170
14171   /* Never do unification on the 'this' parameter.  */
14172   decl_arg_types = skip_artificial_parms_for (decl, 
14173                                               TYPE_ARG_TYPES (decl_type));
14174
14175   if (fn_type_unification (fn, explicit_args, targs,
14176                            decl_arg_types,
14177                            (check_rettype || DECL_CONV_FN_P (fn)
14178                             ? TREE_TYPE (decl_type) : NULL_TREE),
14179                            DEDUCE_EXACT, LOOKUP_NORMAL))
14180     return NULL_TREE;
14181
14182   return targs;
14183 }
14184
14185 /* Return the innermost template arguments that, when applied to a
14186    template specialization whose innermost template parameters are
14187    TPARMS, and whose specialization arguments are PARMS, yield the
14188    ARGS.
14189
14190    For example, suppose we have:
14191
14192      template <class T, class U> struct S {};
14193      template <class T> struct S<T*, int> {};
14194
14195    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
14196    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
14197    int}.  The resulting vector will be {double}, indicating that `T'
14198    is bound to `double'.  */
14199
14200 static tree
14201 get_class_bindings (tree tparms, tree spec_args, tree args)
14202 {
14203   int i, ntparms = TREE_VEC_LENGTH (tparms);
14204   tree deduced_args;
14205   tree innermost_deduced_args;
14206
14207   innermost_deduced_args = make_tree_vec (ntparms);
14208   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14209     {
14210       deduced_args = copy_node (args);
14211       SET_TMPL_ARGS_LEVEL (deduced_args,
14212                            TMPL_ARGS_DEPTH (deduced_args),
14213                            innermost_deduced_args);
14214     }
14215   else
14216     deduced_args = innermost_deduced_args;
14217
14218   if (unify (tparms, deduced_args,
14219              INNERMOST_TEMPLATE_ARGS (spec_args),
14220              INNERMOST_TEMPLATE_ARGS (args),
14221              UNIFY_ALLOW_NONE))
14222     return NULL_TREE;
14223
14224   for (i =  0; i < ntparms; ++i)
14225     if (! TREE_VEC_ELT (innermost_deduced_args, i))
14226       return NULL_TREE;
14227
14228   /* Verify that nondeduced template arguments agree with the type
14229      obtained from argument deduction.
14230
14231      For example:
14232
14233        struct A { typedef int X; };
14234        template <class T, class U> struct C {};
14235        template <class T> struct C<T, typename T::X> {};
14236
14237      Then with the instantiation `C<A, int>', we can deduce that
14238      `T' is `A' but unify () does not check whether `typename T::X'
14239      is `int'.  */
14240   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
14241   if (spec_args == error_mark_node
14242       /* We only need to check the innermost arguments; the other
14243          arguments will always agree.  */
14244       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
14245                               INNERMOST_TEMPLATE_ARGS (args)))
14246     return NULL_TREE;
14247
14248   /* Now that we have bindings for all of the template arguments,
14249      ensure that the arguments deduced for the template template
14250      parameters have compatible template parameter lists.  See the use
14251      of template_template_parm_bindings_ok_p in fn_type_unification
14252      for more information.  */
14253   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
14254     return NULL_TREE;
14255
14256   return deduced_args;
14257 }
14258
14259 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
14260    Return the TREE_LIST node with the most specialized template, if
14261    any.  If there is no most specialized template, the error_mark_node
14262    is returned.
14263
14264    Note that this function does not look at, or modify, the
14265    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
14266    returned is one of the elements of INSTANTIATIONS, callers may
14267    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
14268    and retrieve it from the value returned.  */
14269
14270 tree
14271 most_specialized_instantiation (tree templates)
14272 {
14273   tree fn, champ;
14274
14275   ++processing_template_decl;
14276
14277   champ = templates;
14278   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
14279     {
14280       int fate = 0;
14281
14282       if (get_bindings (TREE_VALUE (champ),
14283                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14284                         NULL_TREE, /*check_ret=*/false))
14285         fate--;
14286
14287       if (get_bindings (TREE_VALUE (fn),
14288                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14289                         NULL_TREE, /*check_ret=*/false))
14290         fate++;
14291
14292       if (fate == -1)
14293         champ = fn;
14294       else if (!fate)
14295         {
14296           /* Equally specialized, move to next function.  If there
14297              is no next function, nothing's most specialized.  */
14298           fn = TREE_CHAIN (fn);
14299           champ = fn;
14300           if (!fn)
14301             break;
14302         }
14303     }
14304
14305   if (champ)
14306     /* Now verify that champ is better than everything earlier in the
14307        instantiation list.  */
14308     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
14309       if (get_bindings (TREE_VALUE (champ),
14310                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14311                         NULL_TREE, /*check_ret=*/false)
14312           || !get_bindings (TREE_VALUE (fn),
14313                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14314                             NULL_TREE, /*check_ret=*/false))
14315         {
14316           champ = NULL_TREE;
14317           break;
14318         }
14319
14320   processing_template_decl--;
14321
14322   if (!champ)
14323     return error_mark_node;
14324
14325   return champ;
14326 }
14327
14328 /* If DECL is a specialization of some template, return the most
14329    general such template.  Otherwise, returns NULL_TREE.
14330
14331    For example, given:
14332
14333      template <class T> struct S { template <class U> void f(U); };
14334
14335    if TMPL is `template <class U> void S<int>::f(U)' this will return
14336    the full template.  This function will not trace past partial
14337    specializations, however.  For example, given in addition:
14338
14339      template <class T> struct S<T*> { template <class U> void f(U); };
14340
14341    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14342    `template <class T> template <class U> S<T*>::f(U)'.  */
14343
14344 tree
14345 most_general_template (tree decl)
14346 {
14347   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14348      an immediate specialization.  */
14349   if (TREE_CODE (decl) == FUNCTION_DECL)
14350     {
14351       if (DECL_TEMPLATE_INFO (decl)) {
14352         decl = DECL_TI_TEMPLATE (decl);
14353
14354         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14355            template friend.  */
14356         if (TREE_CODE (decl) != TEMPLATE_DECL)
14357           return NULL_TREE;
14358       } else
14359         return NULL_TREE;
14360     }
14361
14362   /* Look for more and more general templates.  */
14363   while (DECL_TEMPLATE_INFO (decl))
14364     {
14365       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14366          (See cp-tree.h for details.)  */
14367       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14368         break;
14369
14370       if (CLASS_TYPE_P (TREE_TYPE (decl))
14371           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14372         break;
14373
14374       /* Stop if we run into an explicitly specialized class template.  */
14375       if (!DECL_NAMESPACE_SCOPE_P (decl)
14376           && DECL_CONTEXT (decl)
14377           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14378         break;
14379
14380       decl = DECL_TI_TEMPLATE (decl);
14381     }
14382
14383   return decl;
14384 }
14385
14386 /* Return the most specialized of the class template partial
14387    specializations of TMPL which can produce TYPE, a specialization of
14388    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14389    a _TYPE node corresponding to the partial specialization, while the
14390    TREE_PURPOSE is the set of template arguments that must be
14391    substituted into the TREE_TYPE in order to generate TYPE.
14392
14393    If the choice of partial specialization is ambiguous, a diagnostic
14394    is issued, and the error_mark_node is returned.  If there are no
14395    partial specializations of TMPL matching TYPE, then NULL_TREE is
14396    returned.  */
14397
14398 static tree
14399 most_specialized_class (tree type, tree tmpl)
14400 {
14401   tree list = NULL_TREE;
14402   tree t;
14403   tree champ;
14404   int fate;
14405   bool ambiguous_p;
14406   tree args;
14407   tree outer_args = NULL_TREE;
14408
14409   tmpl = most_general_template (tmpl);
14410   args = CLASSTYPE_TI_ARGS (type);
14411
14412   /* For determining which partial specialization to use, only the
14413      innermost args are interesting.  */
14414   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14415     {
14416       outer_args = strip_innermost_template_args (args, 1);
14417       args = INNERMOST_TEMPLATE_ARGS (args);
14418     }
14419
14420   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14421     {
14422       tree partial_spec_args;
14423       tree spec_args;
14424       tree parms = TREE_VALUE (t);
14425
14426       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14427       if (outer_args)
14428         {
14429           int i;
14430
14431           ++processing_template_decl;
14432
14433           /* Discard the outer levels of args, and then substitute in the
14434              template args from the enclosing class.  */
14435           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14436           partial_spec_args = tsubst_template_args
14437             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14438
14439           /* PARMS already refers to just the innermost parms, but the
14440              template parms in partial_spec_args had their levels lowered
14441              by tsubst, so we need to do the same for the parm list.  We
14442              can't just tsubst the TREE_VEC itself, as tsubst wants to
14443              treat a TREE_VEC as an argument vector.  */
14444           parms = copy_node (parms);
14445           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14446             TREE_VEC_ELT (parms, i) =
14447               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14448
14449           --processing_template_decl;
14450         }
14451       spec_args = get_class_bindings (parms,
14452                                       partial_spec_args,
14453                                       args);
14454       if (spec_args)
14455         {
14456           if (outer_args)
14457             spec_args = add_to_template_args (outer_args, spec_args);
14458           list = tree_cons (spec_args, TREE_VALUE (t), list);
14459           TREE_TYPE (list) = TREE_TYPE (t);
14460         }
14461     }
14462
14463   if (! list)
14464     return NULL_TREE;
14465
14466   ambiguous_p = false;
14467   t = list;
14468   champ = t;
14469   t = TREE_CHAIN (t);
14470   for (; t; t = TREE_CHAIN (t))
14471     {
14472       fate = more_specialized_class (champ, t);
14473       if (fate == 1)
14474         ;
14475       else
14476         {
14477           if (fate == 0)
14478             {
14479               t = TREE_CHAIN (t);
14480               if (! t)
14481                 {
14482                   ambiguous_p = true;
14483                   break;
14484                 }
14485             }
14486           champ = t;
14487         }
14488     }
14489
14490   if (!ambiguous_p)
14491     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14492       {
14493         fate = more_specialized_class (champ, t);
14494         if (fate != 1)
14495           {
14496             ambiguous_p = true;
14497             break;
14498           }
14499       }
14500
14501   if (ambiguous_p)
14502     {
14503       const char *str = "candidates are:";
14504       error ("ambiguous class template instantiation for %q#T", type);
14505       for (t = list; t; t = TREE_CHAIN (t))
14506         {
14507           error ("%s %+#T", str, TREE_TYPE (t));
14508           str = "               ";
14509         }
14510       return error_mark_node;
14511     }
14512
14513   return champ;
14514 }
14515
14516 /* Explicitly instantiate DECL.  */
14517
14518 void
14519 do_decl_instantiation (tree decl, tree storage)
14520 {
14521   tree result = NULL_TREE;
14522   int extern_p = 0;
14523
14524   if (!decl || decl == error_mark_node)
14525     /* An error occurred, for which grokdeclarator has already issued
14526        an appropriate message.  */
14527     return;
14528   else if (! DECL_LANG_SPECIFIC (decl))
14529     {
14530       error ("explicit instantiation of non-template %q#D", decl);
14531       return;
14532     }
14533   else if (TREE_CODE (decl) == VAR_DECL)
14534     {
14535       /* There is an asymmetry here in the way VAR_DECLs and
14536          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14537          the latter, the DECL we get back will be marked as a
14538          template instantiation, and the appropriate
14539          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14540          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14541          should handle VAR_DECLs as it currently handles
14542          FUNCTION_DECLs.  */
14543       if (!DECL_CLASS_SCOPE_P (decl))
14544         {
14545           error ("%qD is not a static data member of a class template", decl);
14546           return;
14547         }
14548       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14549       if (!result || TREE_CODE (result) != VAR_DECL)
14550         {
14551           error ("no matching template for %qD found", decl);
14552           return;
14553         }
14554       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14555         {
14556           error ("type %qT for explicit instantiation %qD does not match "
14557                  "declared type %qT", TREE_TYPE (result), decl,
14558                  TREE_TYPE (decl));
14559           return;
14560         }
14561     }
14562   else if (TREE_CODE (decl) != FUNCTION_DECL)
14563     {
14564       error ("explicit instantiation of %q#D", decl);
14565       return;
14566     }
14567   else
14568     result = decl;
14569
14570   /* Check for various error cases.  Note that if the explicit
14571      instantiation is valid the RESULT will currently be marked as an
14572      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14573      until we get here.  */
14574
14575   if (DECL_TEMPLATE_SPECIALIZATION (result))
14576     {
14577       /* DR 259 [temp.spec].
14578
14579          Both an explicit instantiation and a declaration of an explicit
14580          specialization shall not appear in a program unless the explicit
14581          instantiation follows a declaration of the explicit specialization.
14582
14583          For a given set of template parameters, if an explicit
14584          instantiation of a template appears after a declaration of an
14585          explicit specialization for that template, the explicit
14586          instantiation has no effect.  */
14587       return;
14588     }
14589   else if (DECL_EXPLICIT_INSTANTIATION (result))
14590     {
14591       /* [temp.spec]
14592
14593          No program shall explicitly instantiate any template more
14594          than once.
14595
14596          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14597          the first instantiation was `extern' and the second is not,
14598          and EXTERN_P for the opposite case.  */
14599       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14600         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
14601       /* If an "extern" explicit instantiation follows an ordinary
14602          explicit instantiation, the template is instantiated.  */
14603       if (extern_p)
14604         return;
14605     }
14606   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14607     {
14608       error ("no matching template for %qD found", result);
14609       return;
14610     }
14611   else if (!DECL_TEMPLATE_INFO (result))
14612     {
14613       permerror (input_location, "explicit instantiation of non-template %q#D", result);
14614       return;
14615     }
14616
14617   if (storage == NULL_TREE)
14618     ;
14619   else if (storage == ridpointers[(int) RID_EXTERN])
14620     {
14621       if (!in_system_header && (cxx_dialect == cxx98))
14622         pedwarn (input_location, OPT_pedantic, 
14623                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
14624                  "instantiations");
14625       extern_p = 1;
14626     }
14627   else
14628     error ("storage class %qD applied to template instantiation", storage);
14629
14630   check_explicit_instantiation_namespace (result);
14631   mark_decl_instantiated (result, extern_p);
14632   if (! extern_p)
14633     instantiate_decl (result, /*defer_ok=*/1,
14634                       /*expl_inst_class_mem_p=*/false);
14635 }
14636
14637 static void
14638 mark_class_instantiated (tree t, int extern_p)
14639 {
14640   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14641   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14642   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14643   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14644   if (! extern_p)
14645     {
14646       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14647       rest_of_type_compilation (t, 1);
14648     }
14649 }
14650
14651 /* Called from do_type_instantiation through binding_table_foreach to
14652    do recursive instantiation for the type bound in ENTRY.  */
14653 static void
14654 bt_instantiate_type_proc (binding_entry entry, void *data)
14655 {
14656   tree storage = *(tree *) data;
14657
14658   if (MAYBE_CLASS_TYPE_P (entry->type)
14659       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14660     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14661 }
14662
14663 /* Called from do_type_instantiation to instantiate a member
14664    (a member function or a static member variable) of an
14665    explicitly instantiated class template.  */
14666 static void
14667 instantiate_class_member (tree decl, int extern_p)
14668 {
14669   mark_decl_instantiated (decl, extern_p);
14670   if (! extern_p)
14671     instantiate_decl (decl, /*defer_ok=*/1,
14672                       /*expl_inst_class_mem_p=*/true);
14673 }
14674
14675 /* Perform an explicit instantiation of template class T.  STORAGE, if
14676    non-null, is the RID for extern, inline or static.  COMPLAIN is
14677    nonzero if this is called from the parser, zero if called recursively,
14678    since the standard is unclear (as detailed below).  */
14679
14680 void
14681 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14682 {
14683   int extern_p = 0;
14684   int nomem_p = 0;
14685   int static_p = 0;
14686   int previous_instantiation_extern_p = 0;
14687
14688   if (TREE_CODE (t) == TYPE_DECL)
14689     t = TREE_TYPE (t);
14690
14691   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14692     {
14693       error ("explicit instantiation of non-template type %qT", t);
14694       return;
14695     }
14696
14697   complete_type (t);
14698
14699   if (!COMPLETE_TYPE_P (t))
14700     {
14701       if (complain & tf_error)
14702         error ("explicit instantiation of %q#T before definition of template",
14703                t);
14704       return;
14705     }
14706
14707   if (storage != NULL_TREE)
14708     {
14709       if (!in_system_header)
14710         {
14711           if (storage == ridpointers[(int) RID_EXTERN])
14712             {
14713               if (cxx_dialect == cxx98)
14714                 pedwarn (input_location, OPT_pedantic, 
14715                          "ISO C++ 1998 forbids the use of %<extern%> on "
14716                          "explicit instantiations");
14717             }
14718           else
14719             pedwarn (input_location, OPT_pedantic, 
14720                      "ISO C++ forbids the use of %qE"
14721                      " on explicit instantiations", storage);
14722         }
14723
14724       if (storage == ridpointers[(int) RID_INLINE])
14725         nomem_p = 1;
14726       else if (storage == ridpointers[(int) RID_EXTERN])
14727         extern_p = 1;
14728       else if (storage == ridpointers[(int) RID_STATIC])
14729         static_p = 1;
14730       else
14731         {
14732           error ("storage class %qD applied to template instantiation",
14733                  storage);
14734           extern_p = 0;
14735         }
14736     }
14737
14738   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14739     {
14740       /* DR 259 [temp.spec].
14741
14742          Both an explicit instantiation and a declaration of an explicit
14743          specialization shall not appear in a program unless the explicit
14744          instantiation follows a declaration of the explicit specialization.
14745
14746          For a given set of template parameters, if an explicit
14747          instantiation of a template appears after a declaration of an
14748          explicit specialization for that template, the explicit
14749          instantiation has no effect.  */
14750       return;
14751     }
14752   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14753     {
14754       /* [temp.spec]
14755
14756          No program shall explicitly instantiate any template more
14757          than once.
14758
14759          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14760          instantiation was `extern'.  If EXTERN_P then the second is.
14761          These cases are OK.  */
14762       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14763
14764       if (!previous_instantiation_extern_p && !extern_p
14765           && (complain & tf_error))
14766         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
14767
14768       /* If we've already instantiated the template, just return now.  */
14769       if (!CLASSTYPE_INTERFACE_ONLY (t))
14770         return;
14771     }
14772
14773   check_explicit_instantiation_namespace (TYPE_NAME (t));
14774   mark_class_instantiated (t, extern_p);
14775
14776   if (nomem_p)
14777     return;
14778
14779   {
14780     tree tmp;
14781
14782     /* In contrast to implicit instantiation, where only the
14783        declarations, and not the definitions, of members are
14784        instantiated, we have here:
14785
14786          [temp.explicit]
14787
14788          The explicit instantiation of a class template specialization
14789          implies the instantiation of all of its members not
14790          previously explicitly specialized in the translation unit
14791          containing the explicit instantiation.
14792
14793        Of course, we can't instantiate member template classes, since
14794        we don't have any arguments for them.  Note that the standard
14795        is unclear on whether the instantiation of the members are
14796        *explicit* instantiations or not.  However, the most natural
14797        interpretation is that it should be an explicit instantiation.  */
14798
14799     if (! static_p)
14800       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14801         if (TREE_CODE (tmp) == FUNCTION_DECL
14802             && DECL_TEMPLATE_INSTANTIATION (tmp))
14803           instantiate_class_member (tmp, extern_p);
14804
14805     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14806       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14807         instantiate_class_member (tmp, extern_p);
14808
14809     if (CLASSTYPE_NESTED_UTDS (t))
14810       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14811                              bt_instantiate_type_proc, &storage);
14812   }
14813 }
14814
14815 /* Given a function DECL, which is a specialization of TMPL, modify
14816    DECL to be a re-instantiation of TMPL with the same template
14817    arguments.  TMPL should be the template into which tsubst'ing
14818    should occur for DECL, not the most general template.
14819
14820    One reason for doing this is a scenario like this:
14821
14822      template <class T>
14823      void f(const T&, int i);
14824
14825      void g() { f(3, 7); }
14826
14827      template <class T>
14828      void f(const T& t, const int i) { }
14829
14830    Note that when the template is first instantiated, with
14831    instantiate_template, the resulting DECL will have no name for the
14832    first parameter, and the wrong type for the second.  So, when we go
14833    to instantiate the DECL, we regenerate it.  */
14834
14835 static void
14836 regenerate_decl_from_template (tree decl, tree tmpl)
14837 {
14838   /* The arguments used to instantiate DECL, from the most general
14839      template.  */
14840   tree args;
14841   tree code_pattern;
14842
14843   args = DECL_TI_ARGS (decl);
14844   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14845
14846   /* Make sure that we can see identifiers, and compute access
14847      correctly.  */
14848   push_access_scope (decl);
14849
14850   if (TREE_CODE (decl) == FUNCTION_DECL)
14851     {
14852       tree decl_parm;
14853       tree pattern_parm;
14854       tree specs;
14855       int args_depth;
14856       int parms_depth;
14857
14858       args_depth = TMPL_ARGS_DEPTH (args);
14859       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14860       if (args_depth > parms_depth)
14861         args = get_innermost_template_args (args, parms_depth);
14862
14863       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14864                                               args, tf_error, NULL_TREE);
14865       if (specs)
14866         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14867                                                     specs);
14868
14869       /* Merge parameter declarations.  */
14870       decl_parm = skip_artificial_parms_for (decl,
14871                                              DECL_ARGUMENTS (decl));
14872       pattern_parm
14873         = skip_artificial_parms_for (code_pattern,
14874                                      DECL_ARGUMENTS (code_pattern));
14875       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14876         {
14877           tree parm_type;
14878           tree attributes;
14879           
14880           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14881             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14882           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14883                               NULL_TREE);
14884           parm_type = type_decays_to (parm_type);
14885           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14886             TREE_TYPE (decl_parm) = parm_type;
14887           attributes = DECL_ATTRIBUTES (pattern_parm);
14888           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14889             {
14890               DECL_ATTRIBUTES (decl_parm) = attributes;
14891               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14892             }
14893           decl_parm = TREE_CHAIN (decl_parm);
14894           pattern_parm = TREE_CHAIN (pattern_parm);
14895         }
14896       /* Merge any parameters that match with the function parameter
14897          pack.  */
14898       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14899         {
14900           int i, len;
14901           tree expanded_types;
14902           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14903              the parameters in this function parameter pack.  */
14904           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14905                                                  args, tf_error, NULL_TREE);
14906           len = TREE_VEC_LENGTH (expanded_types);
14907           for (i = 0; i < len; i++)
14908             {
14909               tree parm_type;
14910               tree attributes;
14911           
14912               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14913                 /* Rename the parameter to include the index.  */
14914                 DECL_NAME (decl_parm) = 
14915                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14916               parm_type = TREE_VEC_ELT (expanded_types, i);
14917               parm_type = type_decays_to (parm_type);
14918               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14919                 TREE_TYPE (decl_parm) = parm_type;
14920               attributes = DECL_ATTRIBUTES (pattern_parm);
14921               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14922                 {
14923                   DECL_ATTRIBUTES (decl_parm) = attributes;
14924                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14925                 }
14926               decl_parm = TREE_CHAIN (decl_parm);
14927             }
14928         }
14929       /* Merge additional specifiers from the CODE_PATTERN.  */
14930       if (DECL_DECLARED_INLINE_P (code_pattern)
14931           && !DECL_DECLARED_INLINE_P (decl))
14932         DECL_DECLARED_INLINE_P (decl) = 1;
14933     }
14934   else if (TREE_CODE (decl) == VAR_DECL)
14935     DECL_INITIAL (decl) =
14936       tsubst_expr (DECL_INITIAL (code_pattern), args,
14937                    tf_error, DECL_TI_TEMPLATE (decl),
14938                    /*integral_constant_expression_p=*/false);
14939   else
14940     gcc_unreachable ();
14941
14942   pop_access_scope (decl);
14943 }
14944
14945 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14946    substituted to get DECL.  */
14947
14948 tree
14949 template_for_substitution (tree decl)
14950 {
14951   tree tmpl = DECL_TI_TEMPLATE (decl);
14952
14953   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14954      for the instantiation.  This is not always the most general
14955      template.  Consider, for example:
14956
14957         template <class T>
14958         struct S { template <class U> void f();
14959                    template <> void f<int>(); };
14960
14961      and an instantiation of S<double>::f<int>.  We want TD to be the
14962      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14963   while (/* An instantiation cannot have a definition, so we need a
14964             more general template.  */
14965          DECL_TEMPLATE_INSTANTIATION (tmpl)
14966            /* We must also deal with friend templates.  Given:
14967
14968                 template <class T> struct S {
14969                   template <class U> friend void f() {};
14970                 };
14971
14972               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14973               so far as the language is concerned, but that's still
14974               where we get the pattern for the instantiation from.  On
14975               other hand, if the definition comes outside the class, say:
14976
14977                 template <class T> struct S {
14978                   template <class U> friend void f();
14979                 };
14980                 template <class U> friend void f() {}
14981
14982               we don't need to look any further.  That's what the check for
14983               DECL_INITIAL is for.  */
14984           || (TREE_CODE (decl) == FUNCTION_DECL
14985               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14986               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14987     {
14988       /* The present template, TD, should not be a definition.  If it
14989          were a definition, we should be using it!  Note that we
14990          cannot restructure the loop to just keep going until we find
14991          a template with a definition, since that might go too far if
14992          a specialization was declared, but not defined.  */
14993       gcc_assert (TREE_CODE (decl) != VAR_DECL
14994                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14995
14996       /* Fetch the more general template.  */
14997       tmpl = DECL_TI_TEMPLATE (tmpl);
14998     }
14999
15000   return tmpl;
15001 }
15002
15003 /* Produce the definition of D, a _DECL generated from a template.  If
15004    DEFER_OK is nonzero, then we don't have to actually do the
15005    instantiation now; we just have to do it sometime.  Normally it is
15006    an error if this is an explicit instantiation but D is undefined.
15007    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
15008    explicitly instantiated class template.  */
15009
15010 tree
15011 instantiate_decl (tree d, int defer_ok,
15012                   bool expl_inst_class_mem_p)
15013 {
15014   tree tmpl = DECL_TI_TEMPLATE (d);
15015   tree gen_args;
15016   tree args;
15017   tree td;
15018   tree code_pattern;
15019   tree spec;
15020   tree gen_tmpl;
15021   bool pattern_defined;
15022   int need_push;
15023   location_t saved_loc = input_location;
15024   bool external_p;
15025
15026   /* This function should only be used to instantiate templates for
15027      functions and static member variables.  */
15028   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
15029               || TREE_CODE (d) == VAR_DECL);
15030
15031   /* Variables are never deferred; if instantiation is required, they
15032      are instantiated right away.  That allows for better code in the
15033      case that an expression refers to the value of the variable --
15034      if the variable has a constant value the referring expression can
15035      take advantage of that fact.  */
15036   if (TREE_CODE (d) == VAR_DECL)
15037     defer_ok = 0;
15038
15039   /* Don't instantiate cloned functions.  Instead, instantiate the
15040      functions they cloned.  */
15041   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
15042     d = DECL_CLONED_FUNCTION (d);
15043
15044   if (DECL_TEMPLATE_INSTANTIATED (d))
15045     /* D has already been instantiated.  It might seem reasonable to
15046        check whether or not D is an explicit instantiation, and, if so,
15047        stop here.  But when an explicit instantiation is deferred
15048        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
15049        is set, even though we still need to do the instantiation.  */
15050     return d;
15051
15052   /* If we already have a specialization of this declaration, then
15053      there's no reason to instantiate it.  Note that
15054      retrieve_specialization gives us both instantiations and
15055      specializations, so we must explicitly check
15056      DECL_TEMPLATE_SPECIALIZATION.  */
15057   gen_tmpl = most_general_template (tmpl);
15058   gen_args = DECL_TI_ARGS (d);
15059   spec = retrieve_specialization (gen_tmpl, gen_args,
15060                                   /*class_specializations_p=*/false);
15061   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
15062     return spec;
15063
15064   /* This needs to happen before any tsubsting.  */
15065   if (! push_tinst_level (d))
15066     return d;
15067
15068   timevar_push (TV_PARSE);
15069
15070   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
15071      for the instantiation.  */
15072   td = template_for_substitution (d);
15073   code_pattern = DECL_TEMPLATE_RESULT (td);
15074
15075   /* We should never be trying to instantiate a member of a class
15076      template or partial specialization.  */
15077   gcc_assert (d != code_pattern);
15078
15079   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
15080       || DECL_TEMPLATE_SPECIALIZATION (td))
15081     /* In the case of a friend template whose definition is provided
15082        outside the class, we may have too many arguments.  Drop the
15083        ones we don't need.  The same is true for specializations.  */
15084     args = get_innermost_template_args
15085       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
15086   else
15087     args = gen_args;
15088
15089   if (TREE_CODE (d) == FUNCTION_DECL)
15090     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
15091   else
15092     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
15093
15094   /* We may be in the middle of deferred access check.  Disable it now.  */
15095   push_deferring_access_checks (dk_no_deferred);
15096
15097   /* Unless an explicit instantiation directive has already determined
15098      the linkage of D, remember that a definition is available for
15099      this entity.  */
15100   if (pattern_defined
15101       && !DECL_INTERFACE_KNOWN (d)
15102       && !DECL_NOT_REALLY_EXTERN (d))
15103     mark_definable (d);
15104
15105   input_location = DECL_SOURCE_LOCATION (d);
15106
15107   /* If D is a member of an explicitly instantiated class template,
15108      and no definition is available, treat it like an implicit
15109      instantiation.  */
15110   if (!pattern_defined && expl_inst_class_mem_p
15111       && DECL_EXPLICIT_INSTANTIATION (d))
15112     {
15113       DECL_NOT_REALLY_EXTERN (d) = 0;
15114       DECL_INTERFACE_KNOWN (d) = 0;
15115       SET_DECL_IMPLICIT_INSTANTIATION (d);
15116     }
15117
15118   if (!defer_ok)
15119     {
15120       /* Recheck the substitutions to obtain any warning messages
15121          about ignoring cv qualifiers.  */
15122       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
15123       tree type = TREE_TYPE (gen);
15124
15125       /* Make sure that we can see identifiers, and compute access
15126          correctly.  D is already the target FUNCTION_DECL with the
15127          right context.  */
15128       push_access_scope (d);
15129
15130       if (TREE_CODE (gen) == FUNCTION_DECL)
15131         {
15132           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
15133           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
15134                                           d);
15135           /* Don't simply tsubst the function type, as that will give
15136              duplicate warnings about poor parameter qualifications.
15137              The function arguments are the same as the decl_arguments
15138              without the top level cv qualifiers.  */
15139           type = TREE_TYPE (type);
15140         }
15141       tsubst (type, gen_args, tf_warning_or_error, d);
15142
15143       pop_access_scope (d);
15144     }
15145
15146   /* Check to see whether we know that this template will be
15147      instantiated in some other file, as with "extern template"
15148      extension.  */
15149   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
15150   /* In general, we do not instantiate such templates...  */
15151   if (external_p
15152       /* ... but we instantiate inline functions so that we can inline
15153          them and ... */
15154       && ! (TREE_CODE (d) == FUNCTION_DECL
15155             && possibly_inlined_p (d))
15156       /* ... we instantiate static data members whose values are
15157          needed in integral constant expressions.  */
15158       && ! (TREE_CODE (d) == VAR_DECL
15159             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
15160     goto out;
15161   /* Defer all other templates, unless we have been explicitly
15162      forbidden from doing so.  */
15163   if (/* If there is no definition, we cannot instantiate the
15164          template.  */
15165       ! pattern_defined
15166       /* If it's OK to postpone instantiation, do so.  */
15167       || defer_ok
15168       /* If this is a static data member that will be defined
15169          elsewhere, we don't want to instantiate the entire data
15170          member, but we do want to instantiate the initializer so that
15171          we can substitute that elsewhere.  */
15172       || (external_p && TREE_CODE (d) == VAR_DECL))
15173     {
15174       /* The definition of the static data member is now required so
15175          we must substitute the initializer.  */
15176       if (TREE_CODE (d) == VAR_DECL
15177           && !DECL_INITIAL (d)
15178           && DECL_INITIAL (code_pattern))
15179         {
15180           tree ns;
15181           tree init;
15182
15183           ns = decl_namespace_context (d);
15184           push_nested_namespace (ns);
15185           push_nested_class (DECL_CONTEXT (d));
15186           init = tsubst_expr (DECL_INITIAL (code_pattern),
15187                               args,
15188                               tf_warning_or_error, NULL_TREE,
15189                               /*integral_constant_expression_p=*/false);
15190           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
15191                           /*asmspec_tree=*/NULL_TREE,
15192                           LOOKUP_ONLYCONVERTING);
15193           pop_nested_class ();
15194           pop_nested_namespace (ns);
15195         }
15196
15197       /* We restore the source position here because it's used by
15198          add_pending_template.  */
15199       input_location = saved_loc;
15200
15201       if (at_eof && !pattern_defined
15202           && DECL_EXPLICIT_INSTANTIATION (d))
15203         /* [temp.explicit]
15204
15205            The definition of a non-exported function template, a
15206            non-exported member function template, or a non-exported
15207            member function or static data member of a class template
15208            shall be present in every translation unit in which it is
15209            explicitly instantiated.  */
15210         permerror (input_location,  "explicit instantiation of %qD "
15211                    "but no definition available", d);
15212
15213       /* ??? Historically, we have instantiated inline functions, even
15214          when marked as "extern template".  */
15215       if (!(external_p && TREE_CODE (d) == VAR_DECL))
15216         add_pending_template (d);
15217       goto out;
15218     }
15219   /* Tell the repository that D is available in this translation unit
15220      -- and see if it is supposed to be instantiated here.  */
15221   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
15222     {
15223       /* In a PCH file, despite the fact that the repository hasn't
15224          requested instantiation in the PCH it is still possible that
15225          an instantiation will be required in a file that includes the
15226          PCH.  */
15227       if (pch_file)
15228         add_pending_template (d);
15229       /* Instantiate inline functions so that the inliner can do its
15230          job, even though we'll not be emitting a copy of this
15231          function.  */
15232       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
15233         goto out;
15234     }
15235
15236   need_push = !cfun || !global_bindings_p ();
15237   if (need_push)
15238     push_to_top_level ();
15239
15240   /* Mark D as instantiated so that recursive calls to
15241      instantiate_decl do not try to instantiate it again.  */
15242   DECL_TEMPLATE_INSTANTIATED (d) = 1;
15243
15244   /* Regenerate the declaration in case the template has been modified
15245      by a subsequent redeclaration.  */
15246   regenerate_decl_from_template (d, td);
15247
15248   /* We already set the file and line above.  Reset them now in case
15249      they changed as a result of calling regenerate_decl_from_template.  */
15250   input_location = DECL_SOURCE_LOCATION (d);
15251
15252   if (TREE_CODE (d) == VAR_DECL)
15253     {
15254       tree init;
15255
15256       /* Clear out DECL_RTL; whatever was there before may not be right
15257          since we've reset the type of the declaration.  */
15258       SET_DECL_RTL (d, NULL_RTX);
15259       DECL_IN_AGGR_P (d) = 0;
15260
15261       /* The initializer is placed in DECL_INITIAL by
15262          regenerate_decl_from_template.  Pull it out so that
15263          finish_decl can process it.  */
15264       init = DECL_INITIAL (d);
15265       DECL_INITIAL (d) = NULL_TREE;
15266       DECL_INITIALIZED_P (d) = 0;
15267
15268       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
15269          initializer.  That function will defer actual emission until
15270          we have a chance to determine linkage.  */
15271       DECL_EXTERNAL (d) = 0;
15272
15273       /* Enter the scope of D so that access-checking works correctly.  */
15274       push_nested_class (DECL_CONTEXT (d));
15275       finish_decl (d, init, NULL_TREE);
15276       pop_nested_class ();
15277     }
15278   else if (TREE_CODE (d) == FUNCTION_DECL)
15279     {
15280       htab_t saved_local_specializations;
15281       tree subst_decl;
15282       tree tmpl_parm;
15283       tree spec_parm;
15284
15285       /* Save away the current list, in case we are instantiating one
15286          template from within the body of another.  */
15287       saved_local_specializations = local_specializations;
15288
15289       /* Set up the list of local specializations.  */
15290       local_specializations = htab_create (37,
15291                                            hash_local_specialization,
15292                                            eq_local_specializations,
15293                                            NULL);
15294
15295       /* Set up context.  */
15296       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
15297
15298       /* Create substitution entries for the parameters.  */
15299       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
15300       tmpl_parm = DECL_ARGUMENTS (subst_decl);
15301       spec_parm = DECL_ARGUMENTS (d);
15302       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
15303         {
15304           register_local_specialization (spec_parm, tmpl_parm);
15305           spec_parm = skip_artificial_parms_for (d, spec_parm);
15306           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
15307         }
15308       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15309         {
15310           register_local_specialization (spec_parm, tmpl_parm);
15311           tmpl_parm = TREE_CHAIN (tmpl_parm);
15312           spec_parm = TREE_CHAIN (spec_parm);
15313         }
15314       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15315         {
15316           /* Collect all of the extra "packed" parameters into an
15317              argument pack.  */
15318           tree parmvec;
15319           tree parmtypevec;
15320           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
15321           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
15322           int i, len = 0;
15323           tree t;
15324           
15325           /* Count how many parameters remain.  */
15326           for (t = spec_parm; t; t = TREE_CHAIN (t))
15327             len++;
15328
15329           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
15330           parmvec = make_tree_vec (len);
15331           parmtypevec = make_tree_vec (len);
15332           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15333             {
15334               TREE_VEC_ELT (parmvec, i) = spec_parm;
15335               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15336             }
15337
15338           /* Build the argument packs.  */
15339           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15340           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15341           TREE_TYPE (argpack) = argtypepack;
15342           
15343           /* Register the (value) argument pack as a specialization of
15344              TMPL_PARM, then move on.  */
15345           register_local_specialization (argpack, tmpl_parm);
15346           tmpl_parm = TREE_CHAIN (tmpl_parm);
15347         }
15348       gcc_assert (!spec_parm);
15349
15350       /* Substitute into the body of the function.  */
15351       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15352                    tf_warning_or_error, tmpl,
15353                    /*integral_constant_expression_p=*/false);
15354
15355       /* Set the current input_location to the end of the function
15356          so that finish_function knows where we are.  */
15357       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15358
15359       /* We don't need the local specializations any more.  */
15360       htab_delete (local_specializations);
15361       local_specializations = saved_local_specializations;
15362
15363       /* Finish the function.  */
15364       d = finish_function (0);
15365       expand_or_defer_fn (d);
15366     }
15367
15368   /* We're not deferring instantiation any more.  */
15369   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15370
15371   if (need_push)
15372     pop_from_top_level ();
15373
15374 out:
15375   input_location = saved_loc;
15376   pop_deferring_access_checks ();
15377   pop_tinst_level ();
15378
15379   timevar_pop (TV_PARSE);
15380
15381   return d;
15382 }
15383
15384 /* Run through the list of templates that we wish we could
15385    instantiate, and instantiate any we can.  RETRIES is the
15386    number of times we retry pending template instantiation.  */
15387
15388 void
15389 instantiate_pending_templates (int retries)
15390 {
15391   int reconsider;
15392   location_t saved_loc = input_location;
15393
15394   /* Instantiating templates may trigger vtable generation.  This in turn
15395      may require further template instantiations.  We place a limit here
15396      to avoid infinite loop.  */
15397   if (pending_templates && retries >= max_tinst_depth)
15398     {
15399       tree decl = pending_templates->tinst->decl;
15400
15401       error ("template instantiation depth exceeds maximum of %d"
15402              " instantiating %q+D, possibly from virtual table generation"
15403              " (use -ftemplate-depth-NN to increase the maximum)",
15404              max_tinst_depth, decl);
15405       if (TREE_CODE (decl) == FUNCTION_DECL)
15406         /* Pretend that we defined it.  */
15407         DECL_INITIAL (decl) = error_mark_node;
15408       return;
15409     }
15410
15411   do
15412     {
15413       struct pending_template **t = &pending_templates;
15414       struct pending_template *last = NULL;
15415       reconsider = 0;
15416       while (*t)
15417         {
15418           tree instantiation = reopen_tinst_level ((*t)->tinst);
15419           bool complete = false;
15420
15421           if (TYPE_P (instantiation))
15422             {
15423               tree fn;
15424
15425               if (!COMPLETE_TYPE_P (instantiation))
15426                 {
15427                   instantiate_class_template (instantiation);
15428                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15429                     for (fn = TYPE_METHODS (instantiation);
15430                          fn;
15431                          fn = TREE_CHAIN (fn))
15432                       if (! DECL_ARTIFICIAL (fn))
15433                         instantiate_decl (fn,
15434                                           /*defer_ok=*/0,
15435                                           /*expl_inst_class_mem_p=*/false);
15436                   if (COMPLETE_TYPE_P (instantiation))
15437                     reconsider = 1;
15438                 }
15439
15440               complete = COMPLETE_TYPE_P (instantiation);
15441             }
15442           else
15443             {
15444               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15445                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15446                 {
15447                   instantiation
15448                     = instantiate_decl (instantiation,
15449                                         /*defer_ok=*/0,
15450                                         /*expl_inst_class_mem_p=*/false);
15451                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15452                     reconsider = 1;
15453                 }
15454
15455               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15456                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15457             }
15458
15459           if (complete)
15460             /* If INSTANTIATION has been instantiated, then we don't
15461                need to consider it again in the future.  */
15462             *t = (*t)->next;
15463           else
15464             {
15465               last = *t;
15466               t = &(*t)->next;
15467             }
15468           tinst_depth = 0;
15469           current_tinst_level = NULL;
15470         }
15471       last_pending_template = last;
15472     }
15473   while (reconsider);
15474
15475   input_location = saved_loc;
15476 }
15477
15478 /* Substitute ARGVEC into T, which is a list of initializers for
15479    either base class or a non-static data member.  The TREE_PURPOSEs
15480    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15481    instantiate_decl.  */
15482
15483 static tree
15484 tsubst_initializer_list (tree t, tree argvec)
15485 {
15486   tree inits = NULL_TREE;
15487
15488   for (; t; t = TREE_CHAIN (t))
15489     {
15490       tree decl;
15491       tree init;
15492       tree expanded_bases = NULL_TREE;
15493       tree expanded_arguments = NULL_TREE;
15494       int i, len = 1;
15495
15496       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15497         {
15498           tree expr;
15499           tree arg;
15500
15501           /* Expand the base class expansion type into separate base
15502              classes.  */
15503           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15504                                                  tf_warning_or_error,
15505                                                  NULL_TREE);
15506           if (expanded_bases == error_mark_node)
15507             continue;
15508           
15509           /* We'll be building separate TREE_LISTs of arguments for
15510              each base.  */
15511           len = TREE_VEC_LENGTH (expanded_bases);
15512           expanded_arguments = make_tree_vec (len);
15513           for (i = 0; i < len; i++)
15514             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15515
15516           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15517              expand each argument in the TREE_VALUE of t.  */
15518           expr = make_node (EXPR_PACK_EXPANSION);
15519           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15520             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15521
15522           if (TREE_VALUE (t) == void_type_node)
15523             /* VOID_TYPE_NODE is used to indicate
15524                value-initialization.  */
15525             {
15526               for (i = 0; i < len; i++)
15527                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
15528             }
15529           else
15530             {
15531               /* Substitute parameter packs into each argument in the
15532                  TREE_LIST.  */
15533               in_base_initializer = 1;
15534               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15535                 {
15536                   tree expanded_exprs;
15537
15538                   /* Expand the argument.  */
15539                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15540                   expanded_exprs 
15541                     = tsubst_pack_expansion (expr, argvec,
15542                                              tf_warning_or_error,
15543                                              NULL_TREE);
15544                   if (expanded_exprs == error_mark_node)
15545                     continue;
15546
15547                   /* Prepend each of the expanded expressions to the
15548                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15549                   for (i = 0; i < len; i++)
15550                     {
15551                       TREE_VEC_ELT (expanded_arguments, i) = 
15552                         tree_cons (NULL_TREE, 
15553                                    TREE_VEC_ELT (expanded_exprs, i),
15554                                    TREE_VEC_ELT (expanded_arguments, i));
15555                     }
15556                 }
15557               in_base_initializer = 0;
15558
15559               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15560                  since we built them backwards.  */
15561               for (i = 0; i < len; i++)
15562                 {
15563                   TREE_VEC_ELT (expanded_arguments, i) = 
15564                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
15565                 }
15566             }
15567         }
15568
15569       for (i = 0; i < len; ++i)
15570         {
15571           if (expanded_bases)
15572             {
15573               decl = TREE_VEC_ELT (expanded_bases, i);
15574               decl = expand_member_init (decl);
15575               init = TREE_VEC_ELT (expanded_arguments, i);
15576             }
15577           else
15578             {
15579               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15580                                   tf_warning_or_error, NULL_TREE);
15581
15582               decl = expand_member_init (decl);
15583               if (decl && !DECL_P (decl))
15584                 in_base_initializer = 1;
15585
15586               init = tsubst_expr (TREE_VALUE (t), argvec, 
15587                                   tf_warning_or_error, NULL_TREE,
15588                                   /*integral_constant_expression_p=*/false);
15589               in_base_initializer = 0;
15590             }
15591
15592           if (decl)
15593             {
15594               init = build_tree_list (decl, init);
15595               TREE_CHAIN (init) = inits;
15596               inits = init;
15597             }
15598         }
15599     }
15600   return inits;
15601 }
15602
15603 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15604
15605 static void
15606 set_current_access_from_decl (tree decl)
15607 {
15608   if (TREE_PRIVATE (decl))
15609     current_access_specifier = access_private_node;
15610   else if (TREE_PROTECTED (decl))
15611     current_access_specifier = access_protected_node;
15612   else
15613     current_access_specifier = access_public_node;
15614 }
15615
15616 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15617    is the instantiation (which should have been created with
15618    start_enum) and ARGS are the template arguments to use.  */
15619
15620 static void
15621 tsubst_enum (tree tag, tree newtag, tree args)
15622 {
15623   tree e;
15624
15625   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15626     {
15627       tree value;
15628       tree decl;
15629
15630       decl = TREE_VALUE (e);
15631       /* Note that in a template enum, the TREE_VALUE is the
15632          CONST_DECL, not the corresponding INTEGER_CST.  */
15633       value = tsubst_expr (DECL_INITIAL (decl),
15634                            args, tf_warning_or_error, NULL_TREE,
15635                            /*integral_constant_expression_p=*/true);
15636
15637       /* Give this enumeration constant the correct access.  */
15638       set_current_access_from_decl (decl);
15639
15640       /* Actually build the enumerator itself.  */
15641       build_enumerator (DECL_NAME (decl), value, newtag);
15642     }
15643
15644   finish_enum (newtag);
15645   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15646     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15647 }
15648
15649 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15650    its type -- but without substituting the innermost set of template
15651    arguments.  So, innermost set of template parameters will appear in
15652    the type.  */
15653
15654 tree
15655 get_mostly_instantiated_function_type (tree decl)
15656 {
15657   tree fn_type;
15658   tree tmpl;
15659   tree targs;
15660   tree tparms;
15661   int parm_depth;
15662
15663   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15664   targs = DECL_TI_ARGS (decl);
15665   tparms = DECL_TEMPLATE_PARMS (tmpl);
15666   parm_depth = TMPL_PARMS_DEPTH (tparms);
15667
15668   /* There should be as many levels of arguments as there are levels
15669      of parameters.  */
15670   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15671
15672   fn_type = TREE_TYPE (tmpl);
15673
15674   if (parm_depth == 1)
15675     /* No substitution is necessary.  */
15676     ;
15677   else
15678     {
15679       int i, save_access_control;
15680       tree partial_args;
15681
15682       /* Replace the innermost level of the TARGS with NULL_TREEs to
15683          let tsubst know not to substitute for those parameters.  */
15684       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15685       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15686         SET_TMPL_ARGS_LEVEL (partial_args, i,
15687                              TMPL_ARGS_LEVEL (targs, i));
15688       SET_TMPL_ARGS_LEVEL (partial_args,
15689                            TMPL_ARGS_DEPTH (targs),
15690                            make_tree_vec (DECL_NTPARMS (tmpl)));
15691
15692       /* Disable access control as this function is used only during
15693          name-mangling.  */
15694       save_access_control = flag_access_control;
15695       flag_access_control = 0;
15696
15697       ++processing_template_decl;
15698       /* Now, do the (partial) substitution to figure out the
15699          appropriate function type.  */
15700       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15701       --processing_template_decl;
15702
15703       /* Substitute into the template parameters to obtain the real
15704          innermost set of parameters.  This step is important if the
15705          innermost set of template parameters contains value
15706          parameters whose types depend on outer template parameters.  */
15707       TREE_VEC_LENGTH (partial_args)--;
15708       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15709
15710       flag_access_control = save_access_control;
15711     }
15712
15713   return fn_type;
15714 }
15715
15716 /* Return truthvalue if we're processing a template different from
15717    the last one involved in diagnostics.  */
15718 int
15719 problematic_instantiation_changed (void)
15720 {
15721   return last_template_error_tick != tinst_level_tick;
15722 }
15723
15724 /* Remember current template involved in diagnostics.  */
15725 void
15726 record_last_problematic_instantiation (void)
15727 {
15728   last_template_error_tick = tinst_level_tick;
15729 }
15730
15731 struct tinst_level *
15732 current_instantiation (void)
15733 {
15734   return current_tinst_level;
15735 }
15736
15737 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15738    type. Return zero for ok, nonzero for disallowed. Issue error and
15739    warning messages under control of COMPLAIN.  */
15740
15741 static int
15742 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15743 {
15744   if (INTEGRAL_TYPE_P (type))
15745     return 0;
15746   else if (POINTER_TYPE_P (type))
15747     return 0;
15748   else if (TYPE_PTR_TO_MEMBER_P (type))
15749     return 0;
15750   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15751     return 0;
15752   else if (TREE_CODE (type) == TYPENAME_TYPE)
15753     return 0;
15754
15755   if (complain & tf_error)
15756     error ("%q#T is not a valid type for a template constant parameter", type);
15757   return 1;
15758 }
15759
15760 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15761    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15762
15763 static bool
15764 dependent_type_p_r (tree type)
15765 {
15766   tree scope;
15767
15768   /* [temp.dep.type]
15769
15770      A type is dependent if it is:
15771
15772      -- a template parameter. Template template parameters are types
15773         for us (since TYPE_P holds true for them) so we handle
15774         them here.  */
15775   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15776       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15777     return true;
15778   /* -- a qualified-id with a nested-name-specifier which contains a
15779         class-name that names a dependent type or whose unqualified-id
15780         names a dependent type.  */
15781   if (TREE_CODE (type) == TYPENAME_TYPE)
15782     return true;
15783   /* -- a cv-qualified type where the cv-unqualified type is
15784         dependent.  */
15785   type = TYPE_MAIN_VARIANT (type);
15786   /* -- a compound type constructed from any dependent type.  */
15787   if (TYPE_PTR_TO_MEMBER_P (type))
15788     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15789             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15790                                            (type)));
15791   else if (TREE_CODE (type) == POINTER_TYPE
15792            || TREE_CODE (type) == REFERENCE_TYPE)
15793     return dependent_type_p (TREE_TYPE (type));
15794   else if (TREE_CODE (type) == FUNCTION_TYPE
15795            || TREE_CODE (type) == METHOD_TYPE)
15796     {
15797       tree arg_type;
15798
15799       if (dependent_type_p (TREE_TYPE (type)))
15800         return true;
15801       for (arg_type = TYPE_ARG_TYPES (type);
15802            arg_type;
15803            arg_type = TREE_CHAIN (arg_type))
15804         if (dependent_type_p (TREE_VALUE (arg_type)))
15805           return true;
15806       return false;
15807     }
15808   /* -- an array type constructed from any dependent type or whose
15809         size is specified by a constant expression that is
15810         value-dependent.  */
15811   if (TREE_CODE (type) == ARRAY_TYPE)
15812     {
15813       if (TYPE_DOMAIN (type)
15814           && dependent_type_p (TYPE_DOMAIN (type)))
15815         return true;
15816       return dependent_type_p (TREE_TYPE (type));
15817     }
15818   else if (TREE_CODE (type) == INTEGER_TYPE
15819            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15820     {
15821       /* If this is the TYPE_DOMAIN of an array type, consider it
15822          dependent.  */
15823       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15824               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15825     }
15826
15827   /* -- a template-id in which either the template name is a template
15828      parameter ...  */
15829   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15830     return true;
15831   /* ... or any of the template arguments is a dependent type or
15832         an expression that is type-dependent or value-dependent.  */
15833   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15834            && (any_dependent_template_arguments_p
15835                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15836     return true;
15837
15838   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15839      argument of the `typeof' expression is not type-dependent, then
15840      it should already been have resolved.  */
15841   if (TREE_CODE (type) == TYPEOF_TYPE
15842       || TREE_CODE (type) == DECLTYPE_TYPE)
15843     return true;
15844
15845   /* A template argument pack is dependent if any of its packed
15846      arguments are.  */
15847   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15848     {
15849       tree args = ARGUMENT_PACK_ARGS (type);
15850       int i, len = TREE_VEC_LENGTH (args);
15851       for (i = 0; i < len; ++i)
15852         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15853           return true;
15854     }
15855
15856   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15857      be template parameters.  */
15858   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15859     return true;
15860
15861   /* The standard does not specifically mention types that are local
15862      to template functions or local classes, but they should be
15863      considered dependent too.  For example:
15864
15865        template <int I> void f() {
15866          enum E { a = I };
15867          S<sizeof (E)> s;
15868        }
15869
15870      The size of `E' cannot be known until the value of `I' has been
15871      determined.  Therefore, `E' must be considered dependent.  */
15872   scope = TYPE_CONTEXT (type);
15873   if (scope && TYPE_P (scope))
15874     return dependent_type_p (scope);
15875   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15876     return type_dependent_expression_p (scope);
15877
15878   /* Other types are non-dependent.  */
15879   return false;
15880 }
15881
15882 /* Returns TRUE if TYPE is dependent, in the sense of
15883    [temp.dep.type].  */
15884
15885 bool
15886 dependent_type_p (tree type)
15887 {
15888   /* If there are no template parameters in scope, then there can't be
15889      any dependent types.  */
15890   if (!processing_template_decl)
15891     {
15892       /* If we are not processing a template, then nobody should be
15893          providing us with a dependent type.  */
15894       gcc_assert (type);
15895       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15896       return false;
15897     }
15898
15899   /* If the type is NULL, we have not computed a type for the entity
15900      in question; in that case, the type is dependent.  */
15901   if (!type)
15902     return true;
15903
15904   /* Erroneous types can be considered non-dependent.  */
15905   if (type == error_mark_node)
15906     return false;
15907
15908   /* If we have not already computed the appropriate value for TYPE,
15909      do so now.  */
15910   if (!TYPE_DEPENDENT_P_VALID (type))
15911     {
15912       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15913       TYPE_DEPENDENT_P_VALID (type) = 1;
15914     }
15915
15916   return TYPE_DEPENDENT_P (type);
15917 }
15918
15919 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15920
15921 static bool
15922 dependent_scope_ref_p (tree expression, bool criterion (tree))
15923 {
15924   tree scope;
15925   tree name;
15926
15927   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15928
15929   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15930     return true;
15931
15932   scope = TREE_OPERAND (expression, 0);
15933   name = TREE_OPERAND (expression, 1);
15934
15935   /* [temp.dep.expr]
15936
15937      An id-expression is type-dependent if it contains a
15938      nested-name-specifier that contains a class-name that names a
15939      dependent type.  */
15940   /* The suggested resolution to Core Issue 2 implies that if the
15941      qualifying type is the current class, then we must peek
15942      inside it.  */
15943   if (DECL_P (name)
15944       && currently_open_class (scope)
15945       && !criterion (name))
15946     return false;
15947   if (dependent_type_p (scope))
15948     return true;
15949
15950   return false;
15951 }
15952
15953 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15954    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15955    expression.  */
15956
15957 bool
15958 value_dependent_expression_p (tree expression)
15959 {
15960   if (!processing_template_decl)
15961     return false;
15962
15963   /* A name declared with a dependent type.  */
15964   if (DECL_P (expression) && type_dependent_expression_p (expression))
15965     return true;
15966
15967   switch (TREE_CODE (expression))
15968     {
15969     case IDENTIFIER_NODE:
15970       /* A name that has not been looked up -- must be dependent.  */
15971       return true;
15972
15973     case TEMPLATE_PARM_INDEX:
15974       /* A non-type template parm.  */
15975       return true;
15976
15977     case CONST_DECL:
15978       /* A non-type template parm.  */
15979       if (DECL_TEMPLATE_PARM_P (expression))
15980         return true;
15981       return value_dependent_expression_p (DECL_INITIAL (expression));
15982
15983     case VAR_DECL:
15984        /* A constant with integral or enumeration type and is initialized
15985           with an expression that is value-dependent.  */
15986       if (DECL_INITIAL (expression)
15987           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15988           && value_dependent_expression_p (DECL_INITIAL (expression)))
15989         return true;
15990       return false;
15991
15992     case DYNAMIC_CAST_EXPR:
15993     case STATIC_CAST_EXPR:
15994     case CONST_CAST_EXPR:
15995     case REINTERPRET_CAST_EXPR:
15996     case CAST_EXPR:
15997       /* These expressions are value-dependent if the type to which
15998          the cast occurs is dependent or the expression being casted
15999          is value-dependent.  */
16000       {
16001         tree type = TREE_TYPE (expression);
16002
16003         if (dependent_type_p (type))
16004           return true;
16005
16006         /* A functional cast has a list of operands.  */
16007         expression = TREE_OPERAND (expression, 0);
16008         if (!expression)
16009           {
16010             /* If there are no operands, it must be an expression such
16011                as "int()". This should not happen for aggregate types
16012                because it would form non-constant expressions.  */
16013             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
16014
16015             return false;
16016           }
16017
16018         if (TREE_CODE (expression) == TREE_LIST)
16019           return any_value_dependent_elements_p (expression);
16020
16021         return value_dependent_expression_p (expression);
16022       }
16023
16024     case SIZEOF_EXPR:
16025     case ALIGNOF_EXPR:
16026       /* A `sizeof' expression is value-dependent if the operand is
16027          type-dependent or is a pack expansion.  */
16028       expression = TREE_OPERAND (expression, 0);
16029       if (PACK_EXPANSION_P (expression))
16030         return true;
16031       else if (TYPE_P (expression))
16032         return dependent_type_p (expression);
16033       return type_dependent_expression_p (expression);
16034
16035     case SCOPE_REF:
16036       return dependent_scope_ref_p (expression, value_dependent_expression_p);
16037
16038     case COMPONENT_REF:
16039       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
16040               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
16041
16042     case CALL_EXPR:
16043       /* A CALL_EXPR may appear in a constant expression if it is a
16044          call to a builtin function, e.g., __builtin_constant_p.  All
16045          such calls are value-dependent.  */
16046       return true;
16047
16048     case NONTYPE_ARGUMENT_PACK:
16049       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
16050          is value-dependent.  */
16051       {
16052         tree values = ARGUMENT_PACK_ARGS (expression);
16053         int i, len = TREE_VEC_LENGTH (values);
16054         
16055         for (i = 0; i < len; ++i)
16056           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
16057             return true;
16058         
16059         return false;
16060       }
16061
16062     case TRAIT_EXPR:
16063       {
16064         tree type2 = TRAIT_EXPR_TYPE2 (expression);
16065         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
16066                 || (type2 ? dependent_type_p (type2) : false));
16067       }
16068
16069     case MODOP_EXPR:
16070       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
16071               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
16072
16073     default:
16074       /* A constant expression is value-dependent if any subexpression is
16075          value-dependent.  */
16076       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
16077         {
16078         case tcc_reference:
16079         case tcc_unary:
16080           return (value_dependent_expression_p
16081                   (TREE_OPERAND (expression, 0)));
16082
16083         case tcc_comparison:
16084         case tcc_binary:
16085           return ((value_dependent_expression_p
16086                    (TREE_OPERAND (expression, 0)))
16087                   || (value_dependent_expression_p
16088                       (TREE_OPERAND (expression, 1))));
16089
16090         case tcc_expression:
16091         case tcc_vl_exp:
16092           {
16093             int i;
16094             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
16095               /* In some cases, some of the operands may be missing.
16096                  (For example, in the case of PREDECREMENT_EXPR, the
16097                  amount to increment by may be missing.)  That doesn't
16098                  make the expression dependent.  */
16099               if (TREE_OPERAND (expression, i)
16100                   && (value_dependent_expression_p
16101                       (TREE_OPERAND (expression, i))))
16102                 return true;
16103             return false;
16104           }
16105
16106         default:
16107           break;
16108         }
16109     }
16110
16111   /* The expression is not value-dependent.  */
16112   return false;
16113 }
16114
16115 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
16116    [temp.dep.expr].  */
16117
16118 bool
16119 type_dependent_expression_p (tree expression)
16120 {
16121   if (!processing_template_decl)
16122     return false;
16123
16124   if (expression == error_mark_node)
16125     return false;
16126
16127   /* An unresolved name is always dependent.  */
16128   if (TREE_CODE (expression) == IDENTIFIER_NODE
16129       || TREE_CODE (expression) == USING_DECL)
16130     return true;
16131
16132   /* Some expression forms are never type-dependent.  */
16133   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
16134       || TREE_CODE (expression) == SIZEOF_EXPR
16135       || TREE_CODE (expression) == ALIGNOF_EXPR
16136       || TREE_CODE (expression) == TRAIT_EXPR
16137       || TREE_CODE (expression) == TYPEID_EXPR
16138       || TREE_CODE (expression) == DELETE_EXPR
16139       || TREE_CODE (expression) == VEC_DELETE_EXPR
16140       || TREE_CODE (expression) == THROW_EXPR)
16141     return false;
16142
16143   /* The types of these expressions depends only on the type to which
16144      the cast occurs.  */
16145   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
16146       || TREE_CODE (expression) == STATIC_CAST_EXPR
16147       || TREE_CODE (expression) == CONST_CAST_EXPR
16148       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
16149       || TREE_CODE (expression) == CAST_EXPR)
16150     return dependent_type_p (TREE_TYPE (expression));
16151
16152   /* The types of these expressions depends only on the type created
16153      by the expression.  */
16154   if (TREE_CODE (expression) == NEW_EXPR
16155       || TREE_CODE (expression) == VEC_NEW_EXPR)
16156     {
16157       /* For NEW_EXPR tree nodes created inside a template, either
16158          the object type itself or a TREE_LIST may appear as the
16159          operand 1.  */
16160       tree type = TREE_OPERAND (expression, 1);
16161       if (TREE_CODE (type) == TREE_LIST)
16162         /* This is an array type.  We need to check array dimensions
16163            as well.  */
16164         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
16165                || value_dependent_expression_p
16166                     (TREE_OPERAND (TREE_VALUE (type), 1));
16167       else
16168         return dependent_type_p (type);
16169     }
16170
16171   if (TREE_CODE (expression) == SCOPE_REF
16172       && dependent_scope_ref_p (expression,
16173                                 type_dependent_expression_p))
16174     return true;
16175
16176   if (TREE_CODE (expression) == FUNCTION_DECL
16177       && DECL_LANG_SPECIFIC (expression)
16178       && DECL_TEMPLATE_INFO (expression)
16179       && (any_dependent_template_arguments_p
16180           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
16181     return true;
16182
16183   if (TREE_CODE (expression) == TEMPLATE_DECL
16184       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
16185     return false;
16186
16187   if (TREE_CODE (expression) == STMT_EXPR)
16188     expression = stmt_expr_value_expr (expression);
16189
16190   if (TREE_TYPE (expression) == unknown_type_node)
16191     {
16192       if (TREE_CODE (expression) == ADDR_EXPR)
16193         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
16194       if (TREE_CODE (expression) == COMPONENT_REF
16195           || TREE_CODE (expression) == OFFSET_REF)
16196         {
16197           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
16198             return true;
16199           expression = TREE_OPERAND (expression, 1);
16200           if (TREE_CODE (expression) == IDENTIFIER_NODE)
16201             return false;
16202         }
16203       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
16204       if (TREE_CODE (expression) == SCOPE_REF)
16205         return false;
16206
16207       if (TREE_CODE (expression) == BASELINK)
16208         expression = BASELINK_FUNCTIONS (expression);
16209
16210       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
16211         {
16212           if (any_dependent_template_arguments_p
16213               (TREE_OPERAND (expression, 1)))
16214             return true;
16215           expression = TREE_OPERAND (expression, 0);
16216         }
16217       gcc_assert (TREE_CODE (expression) == OVERLOAD
16218                   || TREE_CODE (expression) == FUNCTION_DECL);
16219
16220       while (expression)
16221         {
16222           if (type_dependent_expression_p (OVL_CURRENT (expression)))
16223             return true;
16224           expression = OVL_NEXT (expression);
16225         }
16226       return false;
16227     }
16228
16229   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
16230
16231   return (dependent_type_p (TREE_TYPE (expression)));
16232 }
16233
16234 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
16235    contains a type-dependent expression.  */
16236
16237 bool
16238 any_type_dependent_arguments_p (const_tree args)
16239 {
16240   while (args)
16241     {
16242       tree arg = TREE_VALUE (args);
16243
16244       if (type_dependent_expression_p (arg))
16245         return true;
16246       args = TREE_CHAIN (args);
16247     }
16248   return false;
16249 }
16250
16251 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
16252    expressions) contains any value-dependent expressions.  */
16253
16254 bool
16255 any_value_dependent_elements_p (const_tree list)
16256 {
16257   for (; list; list = TREE_CHAIN (list))
16258     if (value_dependent_expression_p (TREE_VALUE (list)))
16259       return true;
16260
16261   return false;
16262 }
16263
16264 /* Returns TRUE if the ARG (a template argument) is dependent.  */
16265
16266 bool
16267 dependent_template_arg_p (tree arg)
16268 {
16269   if (!processing_template_decl)
16270     return false;
16271
16272   if (TREE_CODE (arg) == TEMPLATE_DECL
16273       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16274     return dependent_template_p (arg);
16275   else if (ARGUMENT_PACK_P (arg))
16276     {
16277       tree args = ARGUMENT_PACK_ARGS (arg);
16278       int i, len = TREE_VEC_LENGTH (args);
16279       for (i = 0; i < len; ++i)
16280         {
16281           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16282             return true;
16283         }
16284
16285       return false;
16286     }
16287   else if (TYPE_P (arg))
16288     return dependent_type_p (arg);
16289   else
16290     return (type_dependent_expression_p (arg)
16291             || value_dependent_expression_p (arg));
16292 }
16293
16294 /* Returns true if ARGS (a collection of template arguments) contains
16295    any types that require structural equality testing.  */
16296
16297 bool
16298 any_template_arguments_need_structural_equality_p (tree args)
16299 {
16300   int i;
16301   int j;
16302
16303   if (!args)
16304     return false;
16305   if (args == error_mark_node)
16306     return true;
16307
16308   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16309     {
16310       tree level = TMPL_ARGS_LEVEL (args, i + 1);
16311       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16312         {
16313           tree arg = TREE_VEC_ELT (level, j);
16314           tree packed_args = NULL_TREE;
16315           int k, len = 1;
16316
16317           if (ARGUMENT_PACK_P (arg))
16318             {
16319               /* Look inside the argument pack.  */
16320               packed_args = ARGUMENT_PACK_ARGS (arg);
16321               len = TREE_VEC_LENGTH (packed_args);
16322             }
16323
16324           for (k = 0; k < len; ++k)
16325             {
16326               if (packed_args)
16327                 arg = TREE_VEC_ELT (packed_args, k);
16328
16329               if (error_operand_p (arg))
16330                 return true;
16331               else if (TREE_CODE (arg) == TEMPLATE_DECL
16332                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16333                 continue;
16334               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
16335                 return true;
16336               else if (!TYPE_P (arg) && TREE_TYPE (arg)
16337                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
16338                 return true;
16339             }
16340         }
16341     }
16342
16343   return false;
16344 }
16345
16346 /* Returns true if ARGS (a collection of template arguments) contains
16347    any dependent arguments.  */
16348
16349 bool
16350 any_dependent_template_arguments_p (const_tree args)
16351 {
16352   int i;
16353   int j;
16354
16355   if (!args)
16356     return false;
16357   if (args == error_mark_node)
16358     return true;
16359
16360   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16361     {
16362       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16363       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16364         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16365           return true;
16366     }
16367
16368   return false;
16369 }
16370
16371 /* Returns TRUE if the template TMPL is dependent.  */
16372
16373 bool
16374 dependent_template_p (tree tmpl)
16375 {
16376   if (TREE_CODE (tmpl) == OVERLOAD)
16377     {
16378       while (tmpl)
16379         {
16380           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16381             return true;
16382           tmpl = OVL_CHAIN (tmpl);
16383         }
16384       return false;
16385     }
16386
16387   /* Template template parameters are dependent.  */
16388   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16389       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16390     return true;
16391   /* So are names that have not been looked up.  */
16392   if (TREE_CODE (tmpl) == SCOPE_REF
16393       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16394     return true;
16395   /* So are member templates of dependent classes.  */
16396   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16397     return dependent_type_p (DECL_CONTEXT (tmpl));
16398   return false;
16399 }
16400
16401 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16402
16403 bool
16404 dependent_template_id_p (tree tmpl, tree args)
16405 {
16406   return (dependent_template_p (tmpl)
16407           || any_dependent_template_arguments_p (args));
16408 }
16409
16410 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
16411    is dependent.  */
16412
16413 bool
16414 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
16415 {
16416   int i;
16417
16418   if (!processing_template_decl)
16419     return false;
16420
16421   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
16422     {
16423       tree decl = TREE_VEC_ELT (declv, i);
16424       tree init = TREE_VEC_ELT (initv, i);
16425       tree cond = TREE_VEC_ELT (condv, i);
16426       tree incr = TREE_VEC_ELT (incrv, i);
16427
16428       if (type_dependent_expression_p (decl))
16429         return true;
16430
16431       if (init && type_dependent_expression_p (init))
16432         return true;
16433
16434       if (type_dependent_expression_p (cond))
16435         return true;
16436
16437       if (COMPARISON_CLASS_P (cond)
16438           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
16439               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
16440         return true;
16441
16442       if (TREE_CODE (incr) == MODOP_EXPR)
16443         {
16444           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
16445               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
16446             return true;
16447         }
16448       else if (type_dependent_expression_p (incr))
16449         return true;
16450       else if (TREE_CODE (incr) == MODIFY_EXPR)
16451         {
16452           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
16453             return true;
16454           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
16455             {
16456               tree t = TREE_OPERAND (incr, 1);
16457               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
16458                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
16459                 return true;
16460             }
16461         }
16462     }
16463
16464   return false;
16465 }
16466
16467 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16468    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16469    no such TYPE can be found.  Note that this function peers inside
16470    uninstantiated templates and therefore should be used only in
16471    extremely limited situations.  ONLY_CURRENT_P restricts this
16472    peering to the currently open classes hierarchy (which is required
16473    when comparing types).  */
16474
16475 tree
16476 resolve_typename_type (tree type, bool only_current_p)
16477 {
16478   tree scope;
16479   tree name;
16480   tree decl;
16481   int quals;
16482   tree pushed_scope;
16483   tree result;
16484
16485   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16486
16487   scope = TYPE_CONTEXT (type);
16488   name = TYPE_IDENTIFIER (type);
16489
16490   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16491      it first before we can figure out what NAME refers to.  */
16492   if (TREE_CODE (scope) == TYPENAME_TYPE)
16493     scope = resolve_typename_type (scope, only_current_p);
16494   /* If we don't know what SCOPE refers to, then we cannot resolve the
16495      TYPENAME_TYPE.  */
16496   if (TREE_CODE (scope) == TYPENAME_TYPE)
16497     return type;
16498   /* If the SCOPE is a template type parameter, we have no way of
16499      resolving the name.  */
16500   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16501     return type;
16502   /* If the SCOPE is not the current instantiation, there's no reason
16503      to look inside it.  */
16504   if (only_current_p && !currently_open_class (scope))
16505     return type;
16506   /* If SCOPE isn't the template itself, it will not have a valid
16507      TYPE_FIELDS list.  */
16508   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16509     /* scope is either the template itself or a compatible instantiation
16510        like X<T>, so look up the name in the original template.  */
16511     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16512   else
16513     /* scope is a partial instantiation, so we can't do the lookup or we
16514        will lose the template arguments.  */
16515     return type;
16516   /* Enter the SCOPE so that name lookup will be resolved as if we
16517      were in the class definition.  In particular, SCOPE will no
16518      longer be considered a dependent type.  */
16519   pushed_scope = push_scope (scope);
16520   /* Look up the declaration.  */
16521   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16522
16523   result = NULL_TREE;
16524   
16525   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16526      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16527   if (!decl)
16528     /*nop*/;
16529   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16530            && TREE_CODE (decl) == TYPE_DECL)
16531     {
16532       result = TREE_TYPE (decl);
16533       if (result == error_mark_node)
16534         result = NULL_TREE;
16535     }
16536   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16537            && DECL_CLASS_TEMPLATE_P (decl))
16538     {
16539       tree tmpl;
16540       tree args;
16541       /* Obtain the template and the arguments.  */
16542       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16543       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16544       /* Instantiate the template.  */
16545       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16546                                       /*entering_scope=*/0,
16547                                       tf_error | tf_user);
16548       if (result == error_mark_node)
16549         result = NULL_TREE;
16550     }
16551   
16552   /* Leave the SCOPE.  */
16553   if (pushed_scope)
16554     pop_scope (pushed_scope);
16555
16556   /* If we failed to resolve it, return the original typename.  */
16557   if (!result)
16558     return type;
16559   
16560   /* If lookup found a typename type, resolve that too.  */
16561   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16562     {
16563       /* Ill-formed programs can cause infinite recursion here, so we
16564          must catch that.  */
16565       TYPENAME_IS_RESOLVING_P (type) = 1;
16566       result = resolve_typename_type (result, only_current_p);
16567       TYPENAME_IS_RESOLVING_P (type) = 0;
16568     }
16569   
16570   /* Qualify the resulting type.  */
16571   quals = cp_type_quals (type);
16572   if (quals)
16573     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16574
16575   return result;
16576 }
16577
16578 /* EXPR is an expression which is not type-dependent.  Return a proxy
16579    for EXPR that can be used to compute the types of larger
16580    expressions containing EXPR.  */
16581
16582 tree
16583 build_non_dependent_expr (tree expr)
16584 {
16585   tree inner_expr;
16586
16587   /* Preserve null pointer constants so that the type of things like
16588      "p == 0" where "p" is a pointer can be determined.  */
16589   if (null_ptr_cst_p (expr))
16590     return expr;
16591   /* Preserve OVERLOADs; the functions must be available to resolve
16592      types.  */
16593   inner_expr = expr;
16594   if (TREE_CODE (inner_expr) == STMT_EXPR)
16595     inner_expr = stmt_expr_value_expr (inner_expr);
16596   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16597     inner_expr = TREE_OPERAND (inner_expr, 0);
16598   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16599     inner_expr = TREE_OPERAND (inner_expr, 1);
16600   if (is_overloaded_fn (inner_expr)
16601       || TREE_CODE (inner_expr) == OFFSET_REF)
16602     return expr;
16603   /* There is no need to return a proxy for a variable.  */
16604   if (TREE_CODE (expr) == VAR_DECL)
16605     return expr;
16606   /* Preserve string constants; conversions from string constants to
16607      "char *" are allowed, even though normally a "const char *"
16608      cannot be used to initialize a "char *".  */
16609   if (TREE_CODE (expr) == STRING_CST)
16610     return expr;
16611   /* Preserve arithmetic constants, as an optimization -- there is no
16612      reason to create a new node.  */
16613   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16614     return expr;
16615   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16616      There is at least one place where we want to know that a
16617      particular expression is a throw-expression: when checking a ?:
16618      expression, there are special rules if the second or third
16619      argument is a throw-expression.  */
16620   if (TREE_CODE (expr) == THROW_EXPR)
16621     return expr;
16622
16623   if (TREE_CODE (expr) == COND_EXPR)
16624     return build3 (COND_EXPR,
16625                    TREE_TYPE (expr),
16626                    TREE_OPERAND (expr, 0),
16627                    (TREE_OPERAND (expr, 1)
16628                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16629                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16630                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16631   if (TREE_CODE (expr) == COMPOUND_EXPR
16632       && !COMPOUND_EXPR_OVERLOADED (expr))
16633     return build2 (COMPOUND_EXPR,
16634                    TREE_TYPE (expr),
16635                    TREE_OPERAND (expr, 0),
16636                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16637
16638   /* If the type is unknown, it can't really be non-dependent */
16639   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16640
16641   /* Otherwise, build a NON_DEPENDENT_EXPR.
16642
16643      REFERENCE_TYPEs are not stripped for expressions in templates
16644      because doing so would play havoc with mangling.  Consider, for
16645      example:
16646
16647        template <typename T> void f<T& g>() { g(); }
16648
16649      In the body of "f", the expression for "g" will have
16650      REFERENCE_TYPE, even though the standard says that it should
16651      not.  The reason is that we must preserve the syntactic form of
16652      the expression so that mangling (say) "f<g>" inside the body of
16653      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16654      stripped here.  */
16655   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16656 }
16657
16658 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16659    Return a new TREE_LIST with the various arguments replaced with
16660    equivalent non-dependent expressions.  */
16661
16662 tree
16663 build_non_dependent_args (tree args)
16664 {
16665   tree a;
16666   tree new_args;
16667
16668   new_args = NULL_TREE;
16669   for (a = args; a; a = TREE_CHAIN (a))
16670     new_args = tree_cons (NULL_TREE,
16671                           build_non_dependent_expr (TREE_VALUE (a)),
16672                           new_args);
16673   return nreverse (new_args);
16674 }
16675
16676 #include "gt-cp-pt.h"