OSDN Git Service

gcc/
[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         DECL_STRUCT_FUNCTION (r) = NULL;
8183         TREE_USED (r) = 0;
8184         if (DECL_CLONED_FUNCTION (r))
8185           {
8186             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8187                                                args, complain, t);
8188             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8189             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8190           }
8191
8192         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8193            this in the special friend case mentioned above where
8194            GEN_TMPL is NULL.  */
8195         if (gen_tmpl)
8196           {
8197             DECL_TEMPLATE_INFO (r)
8198               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8199             SET_DECL_IMPLICIT_INSTANTIATION (r);
8200             register_specialization (r, gen_tmpl, argvec, false);
8201
8202             /* We're not supposed to instantiate default arguments
8203                until they are called, for a template.  But, for a
8204                declaration like:
8205
8206                  template <class T> void f ()
8207                  { extern void g(int i = T()); }
8208
8209                we should do the substitution when the template is
8210                instantiated.  We handle the member function case in
8211                instantiate_class_template since the default arguments
8212                might refer to other members of the class.  */
8213             if (!member
8214                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8215                 && !uses_template_parms (argvec))
8216               tsubst_default_arguments (r);
8217           }
8218         else
8219           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8220
8221         /* Copy the list of befriending classes.  */
8222         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8223              *friends;
8224              friends = &TREE_CHAIN (*friends))
8225           {
8226             *friends = copy_node (*friends);
8227             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8228                                             args, complain,
8229                                             in_decl);
8230           }
8231
8232         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8233           {
8234             maybe_retrofit_in_chrg (r);
8235             if (DECL_CONSTRUCTOR_P (r))
8236               grok_ctor_properties (ctx, r);
8237             /* If this is an instantiation of a member template, clone it.
8238                If it isn't, that'll be handled by
8239                clone_constructors_and_destructors.  */
8240             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8241               clone_function_decl (r, /*update_method_vec_p=*/0);
8242           }
8243         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8244                  && !grok_op_properties (r, (complain & tf_error) != 0))
8245           return error_mark_node;
8246
8247         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8248           SET_DECL_FRIEND_CONTEXT (r,
8249                                    tsubst (DECL_FRIEND_CONTEXT (t),
8250                                             args, complain, in_decl));
8251
8252         /* Possibly limit visibility based on template args.  */
8253         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8254         if (DECL_VISIBILITY_SPECIFIED (t))
8255           {
8256             DECL_VISIBILITY_SPECIFIED (r) = 0;
8257             DECL_ATTRIBUTES (r)
8258               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8259           }
8260         determine_visibility (r);
8261
8262         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8263                                         args, complain, in_decl);
8264       }
8265       break;
8266
8267     case PARM_DECL:
8268       {
8269         tree type = NULL_TREE;
8270         int i, len = 1;
8271         tree expanded_types = NULL_TREE;
8272         tree prev_r = NULL_TREE;
8273         tree first_r = NULL_TREE;
8274
8275         if (FUNCTION_PARAMETER_PACK_P (t))
8276           {
8277             /* If there is a local specialization that isn't a
8278                parameter pack, it means that we're doing a "simple"
8279                substitution from inside tsubst_pack_expansion. Just
8280                return the local specialization (which will be a single
8281                parm).  */
8282             tree spec = retrieve_local_specialization (t);
8283             if (spec 
8284                 && TREE_CODE (spec) == PARM_DECL
8285                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8286               return spec;
8287
8288             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8289                the parameters in this function parameter pack.  */
8290             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8291                                                     complain, in_decl);
8292             if (TREE_CODE (expanded_types) == TREE_VEC)
8293               {
8294                 len = TREE_VEC_LENGTH (expanded_types);
8295
8296                 /* Zero-length parameter packs are boring. Just substitute
8297                    into the chain.  */
8298                 if (len == 0)
8299                   return tsubst (TREE_CHAIN (t), args, complain, 
8300                                  TREE_CHAIN (t));
8301               }
8302             else
8303               {
8304                 /* All we did was update the type. Make a note of that.  */
8305                 type = expanded_types;
8306                 expanded_types = NULL_TREE;
8307               }
8308           }
8309
8310         /* Loop through all of the parameter's we'll build. When T is
8311            a function parameter pack, LEN is the number of expanded
8312            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8313         r = NULL_TREE;
8314         for (i = 0; i < len; ++i)
8315           {
8316             prev_r = r;
8317             r = copy_node (t);
8318             if (DECL_TEMPLATE_PARM_P (t))
8319               SET_DECL_TEMPLATE_PARM_P (r);
8320
8321             if (expanded_types)
8322               /* We're on the Ith parameter of the function parameter
8323                  pack.  */
8324               {
8325                 /* Get the Ith type.  */
8326                 type = TREE_VEC_ELT (expanded_types, i);
8327
8328                 if (DECL_NAME (r))
8329                   /* Rename the parameter to include the index.  */
8330                   DECL_NAME (r) =
8331                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8332               }
8333             else if (!type)
8334               /* We're dealing with a normal parameter.  */
8335               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8336
8337             type = type_decays_to (type);
8338             TREE_TYPE (r) = type;
8339             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8340
8341             if (DECL_INITIAL (r))
8342               {
8343                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8344                   DECL_INITIAL (r) = TREE_TYPE (r);
8345                 else
8346                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8347                                              complain, in_decl);
8348               }
8349
8350             DECL_CONTEXT (r) = NULL_TREE;
8351
8352             if (!DECL_TEMPLATE_PARM_P (r))
8353               DECL_ARG_TYPE (r) = type_passed_as (type);
8354
8355             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8356                                             args, complain, in_decl);
8357
8358             /* Keep track of the first new parameter we
8359                generate. That's what will be returned to the
8360                caller.  */
8361             if (!first_r)
8362               first_r = r;
8363
8364             /* Build a proper chain of parameters when substituting
8365                into a function parameter pack.  */
8366             if (prev_r)
8367               TREE_CHAIN (prev_r) = r;
8368           }
8369
8370         if (TREE_CHAIN (t))
8371           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8372                                    complain, TREE_CHAIN (t));
8373
8374         /* FIRST_R contains the start of the chain we've built.  */
8375         r = first_r;
8376       }
8377       break;
8378
8379     case FIELD_DECL:
8380       {
8381         tree type;
8382
8383         r = copy_decl (t);
8384         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8385         if (type == error_mark_node)
8386           return error_mark_node;
8387         TREE_TYPE (r) = type;
8388         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8389
8390         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8391         DECL_INITIAL (r)
8392           = tsubst_expr (DECL_INITIAL (t), args,
8393                          complain, in_decl,
8394                          /*integral_constant_expression_p=*/true);
8395         /* We don't have to set DECL_CONTEXT here; it is set by
8396            finish_member_declaration.  */
8397         TREE_CHAIN (r) = NULL_TREE;
8398         if (VOID_TYPE_P (type))
8399           error ("instantiation of %q+D as type %qT", r, type);
8400
8401         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8402                                         args, complain, in_decl);
8403       }
8404       break;
8405
8406     case USING_DECL:
8407       /* We reach here only for member using decls.  */
8408       if (DECL_DEPENDENT_P (t))
8409         {
8410           r = do_class_using_decl
8411             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8412              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8413           if (!r)
8414             r = error_mark_node;
8415         }
8416       else
8417         {
8418           r = copy_node (t);
8419           TREE_CHAIN (r) = NULL_TREE;
8420         }
8421       break;
8422
8423     case TYPE_DECL:
8424     case VAR_DECL:
8425       {
8426         tree argvec = NULL_TREE;
8427         tree gen_tmpl = NULL_TREE;
8428         tree spec;
8429         tree tmpl = NULL_TREE;
8430         tree ctx;
8431         tree type = NULL_TREE;
8432         bool local_p;
8433
8434         if (TREE_CODE (t) == TYPE_DECL
8435             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8436           {
8437             /* If this is the canonical decl, we don't have to
8438                mess with instantiations, and often we can't (for
8439                typename, template type parms and such).  Note that
8440                TYPE_NAME is not correct for the above test if
8441                we've copied the type for a typedef.  */
8442             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8443             if (type == error_mark_node)
8444               return error_mark_node;
8445             r = TYPE_NAME (type);
8446             break;
8447           }
8448
8449         /* Check to see if we already have the specialization we
8450            need.  */
8451         spec = NULL_TREE;
8452         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8453           {
8454             /* T is a static data member or namespace-scope entity.
8455                We have to substitute into namespace-scope variables
8456                (even though such entities are never templates) because
8457                of cases like:
8458                
8459                  template <class T> void f() { extern T t; }
8460
8461                where the entity referenced is not known until
8462                instantiation time.  */
8463             local_p = false;
8464             ctx = DECL_CONTEXT (t);
8465             if (DECL_CLASS_SCOPE_P (t))
8466               {
8467                 ctx = tsubst_aggr_type (ctx, args,
8468                                         complain,
8469                                         in_decl, /*entering_scope=*/1);
8470                 /* If CTX is unchanged, then T is in fact the
8471                    specialization we want.  That situation occurs when
8472                    referencing a static data member within in its own
8473                    class.  We can use pointer equality, rather than
8474                    same_type_p, because DECL_CONTEXT is always
8475                    canonical.  */
8476                 if (ctx == DECL_CONTEXT (t))
8477                   spec = t;
8478               }
8479
8480             if (!spec)
8481               {
8482                 tmpl = DECL_TI_TEMPLATE (t);
8483                 gen_tmpl = most_general_template (tmpl);
8484                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8485                 spec = (retrieve_specialization 
8486                         (gen_tmpl, argvec,
8487                          /*class_specializations_p=*/false));
8488               }
8489           }
8490         else
8491           {
8492             /* A local variable.  */
8493             local_p = true;
8494             /* Subsequent calls to pushdecl will fill this in.  */
8495             ctx = NULL_TREE;
8496             spec = retrieve_local_specialization (t);
8497           }
8498         /* If we already have the specialization we need, there is
8499            nothing more to do.  */ 
8500         if (spec)
8501           {
8502             r = spec;
8503             break;
8504           }
8505
8506         /* Create a new node for the specialization we need.  */
8507         r = copy_decl (t);
8508         if (type == NULL_TREE)
8509           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8510         if (TREE_CODE (r) == VAR_DECL)
8511           {
8512             /* Even if the original location is out of scope, the
8513                newly substituted one is not.  */
8514             DECL_DEAD_FOR_LOCAL (r) = 0;
8515             DECL_INITIALIZED_P (r) = 0;
8516             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8517             if (type == error_mark_node)
8518               return error_mark_node;
8519             if (TREE_CODE (type) == FUNCTION_TYPE)
8520               {
8521                 /* It may seem that this case cannot occur, since:
8522
8523                      typedef void f();
8524                      void g() { f x; }
8525
8526                    declares a function, not a variable.  However:
8527       
8528                      typedef void f();
8529                      template <typename T> void g() { T t; }
8530                      template void g<f>();
8531
8532                    is an attempt to declare a variable with function
8533                    type.  */
8534                 error ("variable %qD has function type",
8535                        /* R is not yet sufficiently initialized, so we
8536                           just use its name.  */
8537                        DECL_NAME (r));
8538                 return error_mark_node;
8539               }
8540             type = complete_type (type);
8541             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8542               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8543             type = check_var_type (DECL_NAME (r), type);
8544
8545             if (DECL_HAS_VALUE_EXPR_P (t))
8546               {
8547                 tree ve = DECL_VALUE_EXPR (t);
8548                 ve = tsubst_expr (ve, args, complain, in_decl,
8549                                   /*constant_expression_p=*/false);
8550                 SET_DECL_VALUE_EXPR (r, ve);
8551               }
8552           }
8553         else if (DECL_SELF_REFERENCE_P (t))
8554           SET_DECL_SELF_REFERENCE_P (r);
8555         TREE_TYPE (r) = type;
8556         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8557         DECL_CONTEXT (r) = ctx;
8558         /* Clear out the mangled name and RTL for the instantiation.  */
8559         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8560         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8561           SET_DECL_RTL (r, NULL_RTX);
8562         /* The initializer must not be expanded until it is required;
8563            see [temp.inst].  */
8564         DECL_INITIAL (r) = NULL_TREE;
8565         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8566           SET_DECL_RTL (r, NULL_RTX);
8567         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8568         if (TREE_CODE (r) == VAR_DECL)
8569           {
8570             /* Possibly limit visibility based on template args.  */
8571             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8572             if (DECL_VISIBILITY_SPECIFIED (t))
8573               {
8574                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8575                 DECL_ATTRIBUTES (r)
8576                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8577               }
8578             determine_visibility (r);
8579           }
8580         /* Preserve a typedef that names a type.  */
8581         else if (TREE_CODE (r) == TYPE_DECL
8582                  && DECL_ORIGINAL_TYPE (t)
8583                  && type != error_mark_node)
8584           {
8585             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8586                                              args, complain, in_decl);
8587             TREE_TYPE (r) = type = build_variant_type_copy (type);
8588             TYPE_NAME (type) = r;
8589           }
8590
8591         if (!local_p)
8592           {
8593             /* A static data member declaration is always marked
8594                external when it is declared in-class, even if an
8595                initializer is present.  We mimic the non-template
8596                processing here.  */
8597             DECL_EXTERNAL (r) = 1;
8598
8599             register_specialization (r, gen_tmpl, argvec, false);
8600             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8601             SET_DECL_IMPLICIT_INSTANTIATION (r);
8602           }
8603         else
8604           register_local_specialization (r, t);
8605
8606         TREE_CHAIN (r) = NULL_TREE;
8607
8608         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8609                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8610                                         args, complain, in_decl);
8611         layout_decl (r, 0);
8612       }
8613       break;
8614
8615     default:
8616       gcc_unreachable ();
8617     }
8618
8619   /* Restore the file and line information.  */
8620   input_location = saved_loc;
8621
8622   return r;
8623 }
8624
8625 /* Substitute into the ARG_TYPES of a function type.  */
8626
8627 static tree
8628 tsubst_arg_types (tree arg_types,
8629                   tree args,
8630                   tsubst_flags_t complain,
8631                   tree in_decl)
8632 {
8633   tree remaining_arg_types;
8634   tree type = NULL_TREE;
8635   int i = 1;
8636   tree expanded_args = NULL_TREE;
8637   tree default_arg;
8638
8639   if (!arg_types || arg_types == void_list_node)
8640     return arg_types;
8641
8642   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8643                                           args, complain, in_decl);
8644   if (remaining_arg_types == error_mark_node)
8645     return error_mark_node;
8646
8647   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8648     {
8649       /* For a pack expansion, perform substitution on the
8650          entire expression. Later on, we'll handle the arguments
8651          one-by-one.  */
8652       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8653                                             args, complain, in_decl);
8654
8655       if (TREE_CODE (expanded_args) == TREE_VEC)
8656         /* So that we'll spin through the parameters, one by one.  */
8657         i = TREE_VEC_LENGTH (expanded_args);
8658       else
8659         {
8660           /* We only partially substituted into the parameter
8661              pack. Our type is TYPE_PACK_EXPANSION.  */
8662           type = expanded_args;
8663           expanded_args = NULL_TREE;
8664         }
8665     }
8666
8667   while (i > 0) {
8668     --i;
8669     
8670     if (expanded_args)
8671       type = TREE_VEC_ELT (expanded_args, i);
8672     else if (!type)
8673       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8674
8675     if (type == error_mark_node)
8676       return error_mark_node;
8677     if (VOID_TYPE_P (type))
8678       {
8679         if (complain & tf_error)
8680           {
8681             error ("invalid parameter type %qT", type);
8682             if (in_decl)
8683               error ("in declaration %q+D", in_decl);
8684           }
8685         return error_mark_node;
8686     }
8687     
8688     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8689        top-level qualifiers as required.  */
8690     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8691
8692     /* We do not substitute into default arguments here.  The standard
8693        mandates that they be instantiated only when needed, which is
8694        done in build_over_call.  */
8695     default_arg = TREE_PURPOSE (arg_types);
8696
8697     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8698       {
8699         /* We've instantiated a template before its default arguments
8700            have been parsed.  This can happen for a nested template
8701            class, and is not an error unless we require the default
8702            argument in a call of this function.  */
8703         remaining_arg_types = 
8704           tree_cons (default_arg, type, remaining_arg_types);
8705         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8706                        remaining_arg_types);
8707       }
8708     else
8709       remaining_arg_types = 
8710         hash_tree_cons (default_arg, type, remaining_arg_types);
8711   }
8712         
8713   return remaining_arg_types;
8714 }
8715
8716 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8717    *not* handle the exception-specification for FNTYPE, because the
8718    initial substitution of explicitly provided template parameters
8719    during argument deduction forbids substitution into the
8720    exception-specification:
8721
8722      [temp.deduct]
8723
8724      All references in the function type of the function template to  the
8725      corresponding template parameters are replaced by the specified tem-
8726      plate argument values.  If a substitution in a template parameter or
8727      in  the function type of the function template results in an invalid
8728      type, type deduction fails.  [Note: The equivalent  substitution  in
8729      exception specifications is done only when the function is instanti-
8730      ated, at which point a program is  ill-formed  if  the  substitution
8731      results in an invalid type.]  */
8732
8733 static tree
8734 tsubst_function_type (tree t,
8735                       tree args,
8736                       tsubst_flags_t complain,
8737                       tree in_decl)
8738 {
8739   tree return_type;
8740   tree arg_types;
8741   tree fntype;
8742
8743   /* The TYPE_CONTEXT is not used for function/method types.  */
8744   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8745
8746   /* Substitute the return type.  */
8747   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8748   if (return_type == error_mark_node)
8749     return error_mark_node;
8750   /* The standard does not presently indicate that creation of a
8751      function type with an invalid return type is a deduction failure.
8752      However, that is clearly analogous to creating an array of "void"
8753      or a reference to a reference.  This is core issue #486.  */
8754   if (TREE_CODE (return_type) == ARRAY_TYPE
8755       || TREE_CODE (return_type) == FUNCTION_TYPE)
8756     {
8757       if (complain & tf_error)
8758         {
8759           if (TREE_CODE (return_type) == ARRAY_TYPE)
8760             error ("function returning an array");
8761           else
8762             error ("function returning a function");
8763         }
8764       return error_mark_node;
8765     }
8766
8767   /* Substitute the argument types.  */
8768   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8769                                 complain, in_decl);
8770   if (arg_types == error_mark_node)
8771     return error_mark_node;
8772
8773   /* Construct a new type node and return it.  */
8774   if (TREE_CODE (t) == FUNCTION_TYPE)
8775     fntype = build_function_type (return_type, arg_types);
8776   else
8777     {
8778       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8779       if (! MAYBE_CLASS_TYPE_P (r))
8780         {
8781           /* [temp.deduct]
8782
8783              Type deduction may fail for any of the following
8784              reasons:
8785
8786              -- Attempting to create "pointer to member of T" when T
8787              is not a class type.  */
8788           if (complain & tf_error)
8789             error ("creating pointer to member function of non-class type %qT",
8790                       r);
8791           return error_mark_node;
8792         }
8793
8794       fntype = build_method_type_directly (r, return_type,
8795                                            TREE_CHAIN (arg_types));
8796     }
8797   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8798   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8799
8800   return fntype;
8801 }
8802
8803 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8804    ARGS into that specification, and return the substituted
8805    specification.  If there is no specification, return NULL_TREE.  */
8806
8807 static tree
8808 tsubst_exception_specification (tree fntype,
8809                                 tree args,
8810                                 tsubst_flags_t complain,
8811                                 tree in_decl)
8812 {
8813   tree specs;
8814   tree new_specs;
8815
8816   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8817   new_specs = NULL_TREE;
8818   if (specs)
8819     {
8820       if (! TREE_VALUE (specs))
8821         new_specs = specs;
8822       else
8823         while (specs)
8824           {
8825             tree spec;
8826             int i, len = 1;
8827             tree expanded_specs = NULL_TREE;
8828
8829             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8830               {
8831                 /* Expand the pack expansion type.  */
8832                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8833                                                        args, complain,
8834                                                        in_decl);
8835
8836                 if (expanded_specs == error_mark_node)
8837                   return error_mark_node;
8838                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8839                   len = TREE_VEC_LENGTH (expanded_specs);
8840                 else
8841                   {
8842                     /* We're substituting into a member template, so
8843                        we got a TYPE_PACK_EXPANSION back.  Add that
8844                        expansion and move on.  */
8845                     gcc_assert (TREE_CODE (expanded_specs) 
8846                                 == TYPE_PACK_EXPANSION);
8847                     new_specs = add_exception_specifier (new_specs,
8848                                                          expanded_specs,
8849                                                          complain);
8850                     specs = TREE_CHAIN (specs);
8851                     continue;
8852                   }
8853               }
8854
8855             for (i = 0; i < len; ++i)
8856               {
8857                 if (expanded_specs)
8858                   spec = TREE_VEC_ELT (expanded_specs, i);
8859                 else
8860                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8861                 if (spec == error_mark_node)
8862                   return spec;
8863                 new_specs = add_exception_specifier (new_specs, spec, 
8864                                                      complain);
8865               }
8866
8867             specs = TREE_CHAIN (specs);
8868           }
8869     }
8870   return new_specs;
8871 }
8872
8873 /* Take the tree structure T and replace template parameters used
8874    therein with the argument vector ARGS.  IN_DECL is an associated
8875    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8876    Issue error and warning messages under control of COMPLAIN.  Note
8877    that we must be relatively non-tolerant of extensions here, in
8878    order to preserve conformance; if we allow substitutions that
8879    should not be allowed, we may allow argument deductions that should
8880    not succeed, and therefore report ambiguous overload situations
8881    where there are none.  In theory, we could allow the substitution,
8882    but indicate that it should have failed, and allow our caller to
8883    make sure that the right thing happens, but we don't try to do this
8884    yet.
8885
8886    This function is used for dealing with types, decls and the like;
8887    for expressions, use tsubst_expr or tsubst_copy.  */
8888
8889 static tree
8890 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8891 {
8892   tree type, r;
8893
8894   if (t == NULL_TREE || t == error_mark_node
8895       || t == integer_type_node
8896       || t == void_type_node
8897       || t == char_type_node
8898       || t == unknown_type_node
8899       || TREE_CODE (t) == NAMESPACE_DECL)
8900     return t;
8901
8902   if (DECL_P (t))
8903     return tsubst_decl (t, args, complain);
8904
8905   if (TREE_CODE (t) == IDENTIFIER_NODE)
8906     type = IDENTIFIER_TYPE_VALUE (t);
8907   else
8908     type = TREE_TYPE (t);
8909
8910   gcc_assert (type != unknown_type_node);
8911
8912   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8913      such as attribute aligned.  */
8914   if (TYPE_P (t)
8915       && TYPE_NAME (t)
8916       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8917     {
8918       tree decl = TYPE_NAME (t);
8919       
8920       if (DECL_CLASS_SCOPE_P (decl)
8921           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
8922           && uses_template_parms (DECL_CONTEXT (decl)))
8923         {
8924           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8925           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8926           r = retrieve_specialization (tmpl, gen_args, false);
8927         }
8928       else if (DECL_FUNCTION_SCOPE_P (decl)
8929                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
8930                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
8931         r = retrieve_local_specialization (decl);
8932       else
8933         /* The typedef is from a non-template context.  */
8934         return t;
8935
8936       if (r)
8937         {
8938           r = TREE_TYPE (r);
8939           r = cp_build_qualified_type_real
8940             (r, cp_type_quals (t) | cp_type_quals (r),
8941              complain | tf_ignore_bad_quals);
8942           return r;
8943         }
8944       /* Else we must be instantiating the typedef, so fall through.  */
8945     }
8946
8947   if (type
8948       && TREE_CODE (t) != TYPENAME_TYPE
8949       && TREE_CODE (t) != IDENTIFIER_NODE
8950       && TREE_CODE (t) != FUNCTION_TYPE
8951       && TREE_CODE (t) != METHOD_TYPE)
8952     type = tsubst (type, args, complain, in_decl);
8953   if (type == error_mark_node)
8954     return error_mark_node;
8955
8956   switch (TREE_CODE (t))
8957     {
8958     case RECORD_TYPE:
8959     case UNION_TYPE:
8960     case ENUMERAL_TYPE:
8961       return tsubst_aggr_type (t, args, complain, in_decl,
8962                                /*entering_scope=*/0);
8963
8964     case ERROR_MARK:
8965     case IDENTIFIER_NODE:
8966     case VOID_TYPE:
8967     case REAL_TYPE:
8968     case COMPLEX_TYPE:
8969     case VECTOR_TYPE:
8970     case BOOLEAN_TYPE:
8971     case INTEGER_CST:
8972     case REAL_CST:
8973     case STRING_CST:
8974       return t;
8975
8976     case INTEGER_TYPE:
8977       if (t == integer_type_node)
8978         return t;
8979
8980       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8981           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8982         return t;
8983
8984       {
8985         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8986
8987         max = tsubst_expr (omax, args, complain, in_decl,
8988                            /*integral_constant_expression_p=*/false);
8989         max = fold_decl_constant_value (max);
8990
8991         if (TREE_CODE (max) != INTEGER_CST
8992             && !at_function_scope_p ()
8993             && !value_dependent_expression_p (max))
8994           {
8995             if (complain & tf_error)
8996               error ("array bound is not an integer constant");
8997             return error_mark_node;
8998           }
8999
9000         /* [temp.deduct]
9001
9002            Type deduction may fail for any of the following
9003            reasons:
9004
9005              Attempting to create an array with a size that is
9006              zero or negative.  */
9007         if (integer_zerop (max) && !(complain & tf_error))
9008           /* We must fail if performing argument deduction (as
9009              indicated by the state of complain), so that
9010              another substitution can be found.  */
9011           return error_mark_node;
9012         else if (TREE_CODE (max) == INTEGER_CST
9013                  && INT_CST_LT (max, integer_zero_node))
9014           {
9015             if (complain & tf_error)
9016               error ("creating array with negative size (%qE)", max);
9017
9018             return error_mark_node;
9019           }
9020
9021         return compute_array_index_type (NULL_TREE, max);
9022       }
9023
9024     case TEMPLATE_TYPE_PARM:
9025     case TEMPLATE_TEMPLATE_PARM:
9026     case BOUND_TEMPLATE_TEMPLATE_PARM:
9027     case TEMPLATE_PARM_INDEX:
9028       {
9029         int idx;
9030         int level;
9031         int levels;
9032         tree arg = NULL_TREE;
9033
9034         r = NULL_TREE;
9035
9036         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9037         template_parm_level_and_index (t, &level, &idx); 
9038
9039         levels = TMPL_ARGS_DEPTH (args);
9040         if (level <= levels)
9041           {
9042             arg = TMPL_ARG (args, level, idx);
9043
9044             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9045               /* See through ARGUMENT_PACK_SELECT arguments. */
9046               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9047           }
9048
9049         if (arg == error_mark_node)
9050           return error_mark_node;
9051         else if (arg != NULL_TREE)
9052           {
9053             if (ARGUMENT_PACK_P (arg))
9054               /* If ARG is an argument pack, we don't actually want to
9055                  perform a substitution here, because substitutions
9056                  for argument packs are only done
9057                  element-by-element. We can get to this point when
9058                  substituting the type of a non-type template
9059                  parameter pack, when that type actually contains
9060                  template parameter packs from an outer template, e.g.,
9061
9062                  template<typename... Types> struct A {
9063                    template<Types... Values> struct B { };
9064                  };  */
9065               return t;
9066
9067             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9068               {
9069                 int quals;
9070                 gcc_assert (TYPE_P (arg));
9071
9072                 /* cv-quals from the template are discarded when
9073                    substituting in a function or reference type.  */
9074                 if (TREE_CODE (arg) == FUNCTION_TYPE
9075                     || TREE_CODE (arg) == METHOD_TYPE
9076                     || TREE_CODE (arg) == REFERENCE_TYPE)
9077                   quals = cp_type_quals (arg);
9078                 else
9079                   quals = cp_type_quals (arg) | cp_type_quals (t);
9080                   
9081                 return cp_build_qualified_type_real
9082                   (arg, quals, complain | tf_ignore_bad_quals);
9083               }
9084             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9085               {
9086                 /* We are processing a type constructed from a
9087                    template template parameter.  */
9088                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9089                                       args, complain, in_decl);
9090                 if (argvec == error_mark_node)
9091                   return error_mark_node;
9092
9093                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9094                    are resolving nested-types in the signature of a
9095                    member function templates.  Otherwise ARG is a
9096                    TEMPLATE_DECL and is the real template to be
9097                    instantiated.  */
9098                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9099                   arg = TYPE_NAME (arg);
9100
9101                 r = lookup_template_class (arg,
9102                                            argvec, in_decl,
9103                                            DECL_CONTEXT (arg),
9104                                             /*entering_scope=*/0,
9105                                            complain);
9106                 return cp_build_qualified_type_real
9107                   (r, TYPE_QUALS (t), complain);
9108               }
9109             else
9110               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9111               return arg;
9112           }
9113
9114         if (level == 1)
9115           /* This can happen during the attempted tsubst'ing in
9116              unify.  This means that we don't yet have any information
9117              about the template parameter in question.  */
9118           return t;
9119
9120         /* If we get here, we must have been looking at a parm for a
9121            more deeply nested template.  Make a new version of this
9122            template parameter, but with a lower level.  */
9123         switch (TREE_CODE (t))
9124           {
9125           case TEMPLATE_TYPE_PARM:
9126           case TEMPLATE_TEMPLATE_PARM:
9127           case BOUND_TEMPLATE_TEMPLATE_PARM:
9128             if (cp_type_quals (t))
9129               {
9130                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9131                 r = cp_build_qualified_type_real
9132                   (r, cp_type_quals (t),
9133                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9134                                ? tf_ignore_bad_quals : 0));
9135               }
9136             else
9137               {
9138                 r = copy_type (t);
9139                 TEMPLATE_TYPE_PARM_INDEX (r)
9140                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9141                                                 r, levels, args, complain);
9142                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9143                 TYPE_MAIN_VARIANT (r) = r;
9144                 TYPE_POINTER_TO (r) = NULL_TREE;
9145                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9146
9147                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9148                   /* We have reduced the level of the template
9149                      template parameter, but not the levels of its
9150                      template parameters, so canonical_type_parameter
9151                      will not be able to find the canonical template
9152                      template parameter for this level. Thus, we
9153                      require structural equality checking to compare
9154                      TEMPLATE_TEMPLATE_PARMs. */
9155                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9156                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9157                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9158                 else
9159                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9160
9161                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9162                   {
9163                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9164                                           complain, in_decl);
9165                     if (argvec == error_mark_node)
9166                       return error_mark_node;
9167
9168                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9169                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9170                   }
9171               }
9172             break;
9173
9174           case TEMPLATE_PARM_INDEX:
9175             r = reduce_template_parm_level (t, type, levels, args, complain);
9176             break;
9177
9178           default:
9179             gcc_unreachable ();
9180           }
9181
9182         return r;
9183       }
9184
9185     case TREE_LIST:
9186       {
9187         tree purpose, value, chain;
9188
9189         if (t == void_list_node)
9190           return t;
9191
9192         purpose = TREE_PURPOSE (t);
9193         if (purpose)
9194           {
9195             purpose = tsubst (purpose, args, complain, in_decl);
9196             if (purpose == error_mark_node)
9197               return error_mark_node;
9198           }
9199         value = TREE_VALUE (t);
9200         if (value)
9201           {
9202             value = tsubst (value, args, complain, in_decl);
9203             if (value == error_mark_node)
9204               return error_mark_node;
9205           }
9206         chain = TREE_CHAIN (t);
9207         if (chain && chain != void_type_node)
9208           {
9209             chain = tsubst (chain, args, complain, in_decl);
9210             if (chain == error_mark_node)
9211               return error_mark_node;
9212           }
9213         if (purpose == TREE_PURPOSE (t)
9214             && value == TREE_VALUE (t)
9215             && chain == TREE_CHAIN (t))
9216           return t;
9217         return hash_tree_cons (purpose, value, chain);
9218       }
9219
9220     case TREE_BINFO:
9221       /* We should never be tsubsting a binfo.  */
9222       gcc_unreachable ();
9223
9224     case TREE_VEC:
9225       /* A vector of template arguments.  */
9226       gcc_assert (!type);
9227       return tsubst_template_args (t, args, complain, in_decl);
9228
9229     case POINTER_TYPE:
9230     case REFERENCE_TYPE:
9231       {
9232         enum tree_code code;
9233
9234         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9235           return t;
9236
9237         code = TREE_CODE (t);
9238
9239
9240         /* [temp.deduct]
9241
9242            Type deduction may fail for any of the following
9243            reasons:
9244
9245            -- Attempting to create a pointer to reference type.
9246            -- Attempting to create a reference to a reference type or
9247               a reference to void.
9248
9249           Core issue 106 says that creating a reference to a reference
9250           during instantiation is no longer a cause for failure. We
9251           only enforce this check in strict C++98 mode.  */
9252         if ((TREE_CODE (type) == REFERENCE_TYPE
9253              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9254             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9255           {
9256             static location_t last_loc;
9257
9258             /* We keep track of the last time we issued this error
9259                message to avoid spewing a ton of messages during a
9260                single bad template instantiation.  */
9261             if (complain & tf_error
9262                 && last_loc != input_location)
9263               {
9264                 if (TREE_CODE (type) == VOID_TYPE)
9265                   error ("forming reference to void");
9266                 else
9267                   error ("forming %s to reference type %qT",
9268                          (code == POINTER_TYPE) ? "pointer" : "reference",
9269                          type);
9270                 last_loc = input_location;
9271               }
9272
9273             return error_mark_node;
9274           }
9275         else if (code == POINTER_TYPE)
9276           {
9277             r = build_pointer_type (type);
9278             if (TREE_CODE (type) == METHOD_TYPE)
9279               r = build_ptrmemfunc_type (r);
9280           }
9281         else if (TREE_CODE (type) == REFERENCE_TYPE)
9282           /* In C++0x, during template argument substitution, when there is an
9283              attempt to create a reference to a reference type, reference
9284              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9285
9286              "If a template-argument for a template-parameter T names a type
9287              that is a reference to a type A, an attempt to create the type
9288              'lvalue reference to cv T' creates the type 'lvalue reference to
9289              A,' while an attempt to create the type type rvalue reference to
9290              cv T' creates the type T"
9291           */
9292           r = cp_build_reference_type
9293               (TREE_TYPE (type),
9294                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9295         else
9296           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9297         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9298
9299         if (r != error_mark_node)
9300           /* Will this ever be needed for TYPE_..._TO values?  */
9301           layout_type (r);
9302
9303         return r;
9304       }
9305     case OFFSET_TYPE:
9306       {
9307         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9308         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9309           {
9310             /* [temp.deduct]
9311
9312                Type deduction may fail for any of the following
9313                reasons:
9314
9315                -- Attempting to create "pointer to member of T" when T
9316                   is not a class type.  */
9317             if (complain & tf_error)
9318               error ("creating pointer to member of non-class type %qT", r);
9319             return error_mark_node;
9320           }
9321         if (TREE_CODE (type) == REFERENCE_TYPE)
9322           {
9323             if (complain & tf_error)
9324               error ("creating pointer to member reference type %qT", type);
9325             return error_mark_node;
9326           }
9327         if (TREE_CODE (type) == VOID_TYPE)
9328           {
9329             if (complain & tf_error)
9330               error ("creating pointer to member of type void");
9331             return error_mark_node;
9332           }
9333         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9334         if (TREE_CODE (type) == FUNCTION_TYPE)
9335           {
9336             /* The type of the implicit object parameter gets its
9337                cv-qualifiers from the FUNCTION_TYPE. */
9338             tree method_type;
9339             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9340                                                       cp_type_quals (type));
9341             tree memptr;
9342             method_type = build_method_type_directly (this_type,
9343                                                       TREE_TYPE (type),
9344                                                       TYPE_ARG_TYPES (type));
9345             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9346             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9347                                                  complain);
9348           }
9349         else
9350           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9351                                                TYPE_QUALS (t),
9352                                                complain);
9353       }
9354     case FUNCTION_TYPE:
9355     case METHOD_TYPE:
9356       {
9357         tree fntype;
9358         tree specs;
9359         fntype = tsubst_function_type (t, args, complain, in_decl);
9360         if (fntype == error_mark_node)
9361           return error_mark_node;
9362
9363         /* Substitute the exception specification.  */
9364         specs = tsubst_exception_specification (t, args, complain,
9365                                                 in_decl);
9366         if (specs == error_mark_node)
9367           return error_mark_node;
9368         if (specs)
9369           fntype = build_exception_variant (fntype, specs);
9370         return fntype;
9371       }
9372     case ARRAY_TYPE:
9373       {
9374         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9375         if (domain == error_mark_node)
9376           return error_mark_node;
9377
9378         /* As an optimization, we avoid regenerating the array type if
9379            it will obviously be the same as T.  */
9380         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9381           return t;
9382
9383         /* These checks should match the ones in grokdeclarator.
9384
9385            [temp.deduct]
9386
9387            The deduction may fail for any of the following reasons:
9388
9389            -- Attempting to create an array with an element type that
9390               is void, a function type, or a reference type, or [DR337]
9391               an abstract class type.  */
9392         if (TREE_CODE (type) == VOID_TYPE
9393             || TREE_CODE (type) == FUNCTION_TYPE
9394             || TREE_CODE (type) == REFERENCE_TYPE)
9395           {
9396             if (complain & tf_error)
9397               error ("creating array of %qT", type);
9398             return error_mark_node;
9399           }
9400         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9401           {
9402             if (complain & tf_error)
9403               error ("creating array of %qT, which is an abstract class type",
9404                      type);
9405             return error_mark_node;
9406           }
9407
9408         r = build_cplus_array_type (type, domain);
9409
9410         if (TYPE_USER_ALIGN (t))
9411           {
9412             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9413             TYPE_USER_ALIGN (r) = 1;
9414           }
9415
9416         return r;
9417       }
9418
9419     case PLUS_EXPR:
9420     case MINUS_EXPR:
9421       {
9422         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9423         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9424
9425         if (e1 == error_mark_node || e2 == error_mark_node)
9426           return error_mark_node;
9427
9428         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9429       }
9430
9431     case NEGATE_EXPR:
9432     case NOP_EXPR:
9433       {
9434         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9435         if (e == error_mark_node)
9436           return error_mark_node;
9437
9438         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9439       }
9440
9441     case TYPENAME_TYPE:
9442       {
9443         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9444                                      in_decl, /*entering_scope=*/1);
9445         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9446                               complain, in_decl);
9447
9448         if (ctx == error_mark_node || f == error_mark_node)
9449           return error_mark_node;
9450
9451         if (!MAYBE_CLASS_TYPE_P (ctx))
9452           {
9453             if (complain & tf_error)
9454               error ("%qT is not a class, struct, or union type", ctx);
9455             return error_mark_node;
9456           }
9457         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9458           {
9459             /* Normally, make_typename_type does not require that the CTX
9460                have complete type in order to allow things like:
9461
9462                  template <class T> struct S { typename S<T>::X Y; };
9463
9464                But, such constructs have already been resolved by this
9465                point, so here CTX really should have complete type, unless
9466                it's a partial instantiation.  */
9467             ctx = complete_type (ctx);
9468             if (!COMPLETE_TYPE_P (ctx))
9469               {
9470                 if (complain & tf_error)
9471                   cxx_incomplete_type_error (NULL_TREE, ctx);
9472                 return error_mark_node;
9473               }
9474           }
9475
9476         f = make_typename_type (ctx, f, typename_type,
9477                                 (complain & tf_error) | tf_keep_type_decl);
9478         if (f == error_mark_node)
9479           return f;
9480         if (TREE_CODE (f) == TYPE_DECL)
9481           {
9482             complain |= tf_ignore_bad_quals;
9483             f = TREE_TYPE (f);
9484           }
9485
9486         if (TREE_CODE (f) != TYPENAME_TYPE)
9487           {
9488             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9489               error ("%qT resolves to %qT, which is not an enumeration type",
9490                      t, f);
9491             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9492               error ("%qT resolves to %qT, which is is not a class type",
9493                      t, f);
9494           }
9495
9496         return cp_build_qualified_type_real
9497           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9498       }
9499
9500     case UNBOUND_CLASS_TEMPLATE:
9501       {
9502         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9503                                      in_decl, /*entering_scope=*/1);
9504         tree name = TYPE_IDENTIFIER (t);
9505         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9506
9507         if (ctx == error_mark_node || name == error_mark_node)
9508           return error_mark_node;
9509
9510         if (parm_list)
9511           parm_list = tsubst_template_parms (parm_list, args, complain);
9512         return make_unbound_class_template (ctx, name, parm_list, complain);
9513       }
9514
9515     case INDIRECT_REF:
9516     case ADDR_EXPR:
9517     case CALL_EXPR:
9518       gcc_unreachable ();
9519
9520     case ARRAY_REF:
9521       {
9522         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9523         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9524                                /*integral_constant_expression_p=*/false);
9525         if (e1 == error_mark_node || e2 == error_mark_node)
9526           return error_mark_node;
9527
9528         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9529       }
9530
9531     case SCOPE_REF:
9532       {
9533         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9534         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9535         if (e1 == error_mark_node || e2 == error_mark_node)
9536           return error_mark_node;
9537
9538         return build_qualified_name (/*type=*/NULL_TREE,
9539                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9540       }
9541
9542     case TYPEOF_TYPE:
9543       {
9544         tree type;
9545
9546         type = finish_typeof (tsubst_expr 
9547                               (TYPEOF_TYPE_EXPR (t), args,
9548                                complain, in_decl,
9549                                /*integral_constant_expression_p=*/false));
9550         return cp_build_qualified_type_real (type,
9551                                              cp_type_quals (t)
9552                                              | cp_type_quals (type),
9553                                              complain);
9554       }
9555
9556     case DECLTYPE_TYPE:
9557       {
9558         tree type;
9559
9560         ++skip_evaluation;
9561
9562         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
9563                             complain, in_decl,
9564                             /*integral_constant_expression_p=*/false);
9565
9566         --skip_evaluation;
9567
9568         type =
9569           finish_decltype_type (type,
9570                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9571         return cp_build_qualified_type_real (type,
9572                                              cp_type_quals (t)
9573                                              | cp_type_quals (type),
9574                                              complain);
9575       }
9576
9577     case TYPE_ARGUMENT_PACK:
9578     case NONTYPE_ARGUMENT_PACK:
9579       {
9580         tree r = make_node (TREE_CODE (t));
9581         tree packed_out = 
9582           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9583                                 args,
9584                                 complain,
9585                                 in_decl);
9586         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9587
9588         /* For template nontype argument packs, also substitute into
9589            the type.  */
9590         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9591           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9592
9593         return r;
9594       }
9595       break;
9596
9597     default:
9598       sorry ("use of %qs in template",
9599              tree_code_name [(int) TREE_CODE (t)]);
9600       return error_mark_node;
9601     }
9602 }
9603
9604 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9605    type of the expression on the left-hand side of the "." or "->"
9606    operator.  */
9607
9608 static tree
9609 tsubst_baselink (tree baselink, tree object_type,
9610                  tree args, tsubst_flags_t complain, tree in_decl)
9611 {
9612     tree name;
9613     tree qualifying_scope;
9614     tree fns;
9615     tree optype;
9616     tree template_args = 0;
9617     bool template_id_p = false;
9618
9619     /* A baselink indicates a function from a base class.  Both the
9620        BASELINK_ACCESS_BINFO and the base class referenced may
9621        indicate bases of the template class, rather than the
9622        instantiated class.  In addition, lookups that were not
9623        ambiguous before may be ambiguous now.  Therefore, we perform
9624        the lookup again.  */
9625     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9626     qualifying_scope = tsubst (qualifying_scope, args,
9627                                complain, in_decl);
9628     fns = BASELINK_FUNCTIONS (baselink);
9629     optype = BASELINK_OPTYPE (baselink);
9630     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9631       {
9632         template_id_p = true;
9633         template_args = TREE_OPERAND (fns, 1);
9634         fns = TREE_OPERAND (fns, 0);
9635         if (template_args)
9636           template_args = tsubst_template_args (template_args, args,
9637                                                 complain, in_decl);
9638       }
9639     name = DECL_NAME (get_first_fn (fns));
9640     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9641
9642     /* If lookup found a single function, mark it as used at this
9643        point.  (If it lookup found multiple functions the one selected
9644        later by overload resolution will be marked as used at that
9645        point.)  */
9646     if (BASELINK_P (baselink))
9647       fns = BASELINK_FUNCTIONS (baselink);
9648     if (!template_id_p && !really_overloaded_fn (fns))
9649       mark_used (OVL_CURRENT (fns));
9650
9651     /* Add back the template arguments, if present.  */
9652     if (BASELINK_P (baselink) && template_id_p)
9653       BASELINK_FUNCTIONS (baselink)
9654         = build_nt (TEMPLATE_ID_EXPR,
9655                     BASELINK_FUNCTIONS (baselink),
9656                     template_args);
9657     /* Update the conversion operator type.  */
9658     BASELINK_OPTYPE (baselink) 
9659       = tsubst (optype, args, complain, in_decl);
9660
9661     if (!object_type)
9662       object_type = current_class_type;
9663     return adjust_result_of_qualified_name_lookup (baselink,
9664                                                    qualifying_scope,
9665                                                    object_type);
9666 }
9667
9668 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9669    true if the qualified-id will be a postfix-expression in-and-of
9670    itself; false if more of the postfix-expression follows the
9671    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9672    of "&".  */
9673
9674 static tree
9675 tsubst_qualified_id (tree qualified_id, tree args,
9676                      tsubst_flags_t complain, tree in_decl,
9677                      bool done, bool address_p)
9678 {
9679   tree expr;
9680   tree scope;
9681   tree name;
9682   bool is_template;
9683   tree template_args;
9684
9685   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9686
9687   /* Figure out what name to look up.  */
9688   name = TREE_OPERAND (qualified_id, 1);
9689   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9690     {
9691       is_template = true;
9692       template_args = TREE_OPERAND (name, 1);
9693       if (template_args)
9694         template_args = tsubst_template_args (template_args, args,
9695                                               complain, in_decl);
9696       name = TREE_OPERAND (name, 0);
9697     }
9698   else
9699     {
9700       is_template = false;
9701       template_args = NULL_TREE;
9702     }
9703
9704   /* Substitute into the qualifying scope.  When there are no ARGS, we
9705      are just trying to simplify a non-dependent expression.  In that
9706      case the qualifying scope may be dependent, and, in any case,
9707      substituting will not help.  */
9708   scope = TREE_OPERAND (qualified_id, 0);
9709   if (args)
9710     {
9711       scope = tsubst (scope, args, complain, in_decl);
9712       expr = tsubst_copy (name, args, complain, in_decl);
9713     }
9714   else
9715     expr = name;
9716
9717   if (dependent_type_p (scope))
9718     return build_qualified_name (/*type=*/NULL_TREE,
9719                                  scope, expr,
9720                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9721
9722   if (!BASELINK_P (name) && !DECL_P (expr))
9723     {
9724       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9725         /* If this were actually a destructor call, it would have been
9726            parsed as such by the parser.  */
9727         expr = error_mark_node;
9728       else
9729         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9730       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9731                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9732         {
9733           if (complain & tf_error)
9734             {
9735               error ("dependent-name %qE is parsed as a non-type, but "
9736                      "instantiation yields a type", qualified_id);
9737               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
9738             }
9739           return error_mark_node;
9740         }
9741     }
9742
9743   if (DECL_P (expr))
9744     {
9745       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9746                                            scope);
9747       /* Remember that there was a reference to this entity.  */
9748       mark_used (expr);
9749     }
9750
9751   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9752     {
9753       if (complain & tf_error)
9754         qualified_name_lookup_error (scope,
9755                                      TREE_OPERAND (qualified_id, 1),
9756                                      expr, input_location);
9757       return error_mark_node;
9758     }
9759
9760   if (is_template)
9761     expr = lookup_template_function (expr, template_args);
9762
9763   if (expr == error_mark_node && complain & tf_error)
9764     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9765                                  expr, input_location);
9766   else if (TYPE_P (scope))
9767     {
9768       expr = (adjust_result_of_qualified_name_lookup
9769               (expr, scope, current_class_type));
9770       expr = (finish_qualified_id_expr
9771               (scope, expr, done, address_p,
9772                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9773                /*template_arg_p=*/false));
9774     }
9775
9776   /* Expressions do not generally have reference type.  */
9777   if (TREE_CODE (expr) != SCOPE_REF
9778       /* However, if we're about to form a pointer-to-member, we just
9779          want the referenced member referenced.  */
9780       && TREE_CODE (expr) != OFFSET_REF)
9781     expr = convert_from_reference (expr);
9782
9783   return expr;
9784 }
9785
9786 /* Like tsubst, but deals with expressions.  This function just replaces
9787    template parms; to finish processing the resultant expression, use
9788    tsubst_expr.  */
9789
9790 static tree
9791 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9792 {
9793   enum tree_code code;
9794   tree r;
9795
9796   if (t == NULL_TREE || t == error_mark_node)
9797     return t;
9798
9799   code = TREE_CODE (t);
9800
9801   switch (code)
9802     {
9803     case PARM_DECL:
9804       r = retrieve_local_specialization (t);
9805
9806       if (r == NULL)
9807         {
9808           /* This can happen for a parameter name used later in a function
9809              declaration (such as in a late-specified return type).
9810              Replace it with an arbitrary expression with the same type
9811              (*(T*)0).  This should only occur in an unevaluated context
9812              (i.e. decltype).  */
9813           gcc_assert (skip_evaluation);
9814           r = non_reference (TREE_TYPE (t));
9815           r = tsubst (r, args, complain, in_decl);
9816           r = build_pointer_type (r);
9817           r = build_c_cast (r, null_node);
9818           return cp_build_indirect_ref (r, NULL, tf_warning_or_error);
9819         }
9820       
9821       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9822         r = ARGUMENT_PACK_SELECT_ARG (r);
9823       mark_used (r);
9824       return r;
9825
9826     case CONST_DECL:
9827       {
9828         tree enum_type;
9829         tree v;
9830
9831         if (DECL_TEMPLATE_PARM_P (t))
9832           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9833         /* There is no need to substitute into namespace-scope
9834            enumerators.  */
9835         if (DECL_NAMESPACE_SCOPE_P (t))
9836           return t;
9837         /* If ARGS is NULL, then T is known to be non-dependent.  */
9838         if (args == NULL_TREE)
9839           return integral_constant_value (t);
9840
9841         /* Unfortunately, we cannot just call lookup_name here.
9842            Consider:
9843
9844              template <int I> int f() {
9845              enum E { a = I };
9846              struct S { void g() { E e = a; } };
9847              };
9848
9849            When we instantiate f<7>::S::g(), say, lookup_name is not
9850            clever enough to find f<7>::a.  */
9851         enum_type
9852           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9853                               /*entering_scope=*/0);
9854
9855         for (v = TYPE_VALUES (enum_type);
9856              v != NULL_TREE;
9857              v = TREE_CHAIN (v))
9858           if (TREE_PURPOSE (v) == DECL_NAME (t))
9859             return TREE_VALUE (v);
9860
9861           /* We didn't find the name.  That should never happen; if
9862              name-lookup found it during preliminary parsing, we
9863              should find it again here during instantiation.  */
9864         gcc_unreachable ();
9865       }
9866       return t;
9867
9868     case FIELD_DECL:
9869       if (DECL_CONTEXT (t))
9870         {
9871           tree ctx;
9872
9873           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9874                                   /*entering_scope=*/1);
9875           if (ctx != DECL_CONTEXT (t))
9876             {
9877               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9878               if (!r)
9879                 {
9880                   if (complain & tf_error)
9881                     error ("using invalid field %qD", t);
9882                   return error_mark_node;
9883                 }
9884               return r;
9885             }
9886         }
9887
9888       return t;
9889
9890     case VAR_DECL:
9891     case FUNCTION_DECL:
9892       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9893           || local_variable_p (t))
9894         t = tsubst (t, args, complain, in_decl);
9895       mark_used (t);
9896       return t;
9897
9898     case BASELINK:
9899       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9900
9901     case TEMPLATE_DECL:
9902       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9903         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9904                        args, complain, in_decl);
9905       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9906         return tsubst (t, args, complain, in_decl);
9907       else if (DECL_CLASS_SCOPE_P (t)
9908                && uses_template_parms (DECL_CONTEXT (t)))
9909         {
9910           /* Template template argument like the following example need
9911              special treatment:
9912
9913                template <template <class> class TT> struct C {};
9914                template <class T> struct D {
9915                  template <class U> struct E {};
9916                  C<E> c;                                // #1
9917                };
9918                D<int> d;                                // #2
9919
9920              We are processing the template argument `E' in #1 for
9921              the template instantiation #2.  Originally, `E' is a
9922              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9923              have to substitute this with one having context `D<int>'.  */
9924
9925           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9926           return lookup_field (context, DECL_NAME(t), 0, false);
9927         }
9928       else
9929         /* Ordinary template template argument.  */
9930         return t;
9931
9932     case CAST_EXPR:
9933     case REINTERPRET_CAST_EXPR:
9934     case CONST_CAST_EXPR:
9935     case STATIC_CAST_EXPR:
9936     case DYNAMIC_CAST_EXPR:
9937     case NOP_EXPR:
9938       return build1
9939         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9940          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9941
9942     case SIZEOF_EXPR:
9943       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9944         {
9945           /* We only want to compute the number of arguments.  */
9946           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9947                                                 complain, in_decl);
9948           int len = 0;
9949
9950           if (TREE_CODE (expanded) == TREE_VEC)
9951             len = TREE_VEC_LENGTH (expanded);
9952
9953           if (expanded == error_mark_node)
9954             return error_mark_node;
9955           else if (PACK_EXPANSION_P (expanded)
9956                    || (TREE_CODE (expanded) == TREE_VEC
9957                        && len > 0
9958                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
9959             {
9960               if (TREE_CODE (expanded) == TREE_VEC)
9961                 expanded = TREE_VEC_ELT (expanded, len - 1);
9962
9963               if (TYPE_P (expanded))
9964                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
9965                                                    complain & tf_error);
9966               else
9967                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
9968                                                    complain & tf_error);
9969             }
9970           else
9971             return build_int_cst (size_type_node, len);
9972         }
9973       /* Fall through */
9974
9975     case INDIRECT_REF:
9976     case NEGATE_EXPR:
9977     case TRUTH_NOT_EXPR:
9978     case BIT_NOT_EXPR:
9979     case ADDR_EXPR:
9980     case UNARY_PLUS_EXPR:      /* Unary + */
9981     case ALIGNOF_EXPR:
9982     case ARROW_EXPR:
9983     case THROW_EXPR:
9984     case TYPEID_EXPR:
9985     case REALPART_EXPR:
9986     case IMAGPART_EXPR:
9987       return build1
9988         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9989          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9990
9991     case COMPONENT_REF:
9992       {
9993         tree object;
9994         tree name;
9995
9996         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9997         name = TREE_OPERAND (t, 1);
9998         if (TREE_CODE (name) == BIT_NOT_EXPR)
9999           {
10000             name = tsubst_copy (TREE_OPERAND (name, 0), args,
10001                                 complain, in_decl);
10002             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
10003           }
10004         else if (TREE_CODE (name) == SCOPE_REF
10005                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
10006           {
10007             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
10008                                      complain, in_decl);
10009             name = TREE_OPERAND (name, 1);
10010             name = tsubst_copy (TREE_OPERAND (name, 0), args,
10011                                 complain, in_decl);
10012             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
10013             name = build_qualified_name (/*type=*/NULL_TREE,
10014                                          base, name,
10015                                          /*template_p=*/false);
10016           }
10017         else if (TREE_CODE (name) == BASELINK)
10018           name = tsubst_baselink (name,
10019                                   non_reference (TREE_TYPE (object)),
10020                                   args, complain,
10021                                   in_decl);
10022         else
10023           name = tsubst_copy (name, args, complain, in_decl);
10024         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
10025       }
10026
10027     case PLUS_EXPR:
10028     case MINUS_EXPR:
10029     case MULT_EXPR:
10030     case TRUNC_DIV_EXPR:
10031     case CEIL_DIV_EXPR:
10032     case FLOOR_DIV_EXPR:
10033     case ROUND_DIV_EXPR:
10034     case EXACT_DIV_EXPR:
10035     case BIT_AND_EXPR:
10036     case BIT_IOR_EXPR:
10037     case BIT_XOR_EXPR:
10038     case TRUNC_MOD_EXPR:
10039     case FLOOR_MOD_EXPR:
10040     case TRUTH_ANDIF_EXPR:
10041     case TRUTH_ORIF_EXPR:
10042     case TRUTH_AND_EXPR:
10043     case TRUTH_OR_EXPR:
10044     case RSHIFT_EXPR:
10045     case LSHIFT_EXPR:
10046     case RROTATE_EXPR:
10047     case LROTATE_EXPR:
10048     case EQ_EXPR:
10049     case NE_EXPR:
10050     case MAX_EXPR:
10051     case MIN_EXPR:
10052     case LE_EXPR:
10053     case GE_EXPR:
10054     case LT_EXPR:
10055     case GT_EXPR:
10056     case COMPOUND_EXPR:
10057     case DOTSTAR_EXPR:
10058     case MEMBER_REF:
10059     case PREDECREMENT_EXPR:
10060     case PREINCREMENT_EXPR:
10061     case POSTDECREMENT_EXPR:
10062     case POSTINCREMENT_EXPR:
10063       return build_nt
10064         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10065          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10066
10067     case SCOPE_REF:
10068       return build_qualified_name (/*type=*/NULL_TREE,
10069                                    tsubst_copy (TREE_OPERAND (t, 0),
10070                                                 args, complain, in_decl),
10071                                    tsubst_copy (TREE_OPERAND (t, 1),
10072                                                 args, complain, in_decl),
10073                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10074
10075     case ARRAY_REF:
10076       return build_nt
10077         (ARRAY_REF,
10078          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10079          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10080          NULL_TREE, NULL_TREE);
10081
10082     case CALL_EXPR:
10083       {
10084         int n = VL_EXP_OPERAND_LENGTH (t);
10085         tree result = build_vl_exp (CALL_EXPR, n);
10086         int i;
10087         for (i = 0; i < n; i++)
10088           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10089                                              complain, in_decl);
10090         return result;
10091       }
10092
10093     case COND_EXPR:
10094     case MODOP_EXPR:
10095     case PSEUDO_DTOR_EXPR:
10096       {
10097         r = build_nt
10098           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10099            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10100            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10101         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10102         return r;
10103       }
10104
10105     case NEW_EXPR:
10106       {
10107         r = build_nt
10108         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10109          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10110          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10111         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10112         return r;
10113       }
10114
10115     case DELETE_EXPR:
10116       {
10117         r = build_nt
10118         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10119          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10120         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10121         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10122         return r;
10123       }
10124
10125     case TEMPLATE_ID_EXPR:
10126       {
10127         /* Substituted template arguments */
10128         tree fn = TREE_OPERAND (t, 0);
10129         tree targs = TREE_OPERAND (t, 1);
10130
10131         fn = tsubst_copy (fn, args, complain, in_decl);
10132         if (targs)
10133           targs = tsubst_template_args (targs, args, complain, in_decl);
10134
10135         return lookup_template_function (fn, targs);
10136       }
10137
10138     case TREE_LIST:
10139       {
10140         tree purpose, value, chain;
10141
10142         if (t == void_list_node)
10143           return t;
10144
10145         purpose = TREE_PURPOSE (t);
10146         if (purpose)
10147           purpose = tsubst_copy (purpose, args, complain, in_decl);
10148         value = TREE_VALUE (t);
10149         if (value)
10150           value = tsubst_copy (value, args, complain, in_decl);
10151         chain = TREE_CHAIN (t);
10152         if (chain && chain != void_type_node)
10153           chain = tsubst_copy (chain, args, complain, in_decl);
10154         if (purpose == TREE_PURPOSE (t)
10155             && value == TREE_VALUE (t)
10156             && chain == TREE_CHAIN (t))
10157           return t;
10158         return tree_cons (purpose, value, chain);
10159       }
10160
10161     case RECORD_TYPE:
10162     case UNION_TYPE:
10163     case ENUMERAL_TYPE:
10164     case INTEGER_TYPE:
10165     case TEMPLATE_TYPE_PARM:
10166     case TEMPLATE_TEMPLATE_PARM:
10167     case BOUND_TEMPLATE_TEMPLATE_PARM:
10168     case TEMPLATE_PARM_INDEX:
10169     case POINTER_TYPE:
10170     case REFERENCE_TYPE:
10171     case OFFSET_TYPE:
10172     case FUNCTION_TYPE:
10173     case METHOD_TYPE:
10174     case ARRAY_TYPE:
10175     case TYPENAME_TYPE:
10176     case UNBOUND_CLASS_TEMPLATE:
10177     case TYPEOF_TYPE:
10178     case DECLTYPE_TYPE:
10179     case TYPE_DECL:
10180       return tsubst (t, args, complain, in_decl);
10181
10182     case IDENTIFIER_NODE:
10183       if (IDENTIFIER_TYPENAME_P (t))
10184         {
10185           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10186           return mangle_conv_op_name_for_type (new_type);
10187         }
10188       else
10189         return t;
10190
10191     case CONSTRUCTOR:
10192       /* This is handled by tsubst_copy_and_build.  */
10193       gcc_unreachable ();
10194
10195     case VA_ARG_EXPR:
10196       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10197                                           in_decl),
10198                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10199
10200     case CLEANUP_POINT_EXPR:
10201       /* We shouldn't have built any of these during initial template
10202          generation.  Instead, they should be built during instantiation
10203          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10204       gcc_unreachable ();
10205
10206     case OFFSET_REF:
10207       mark_used (TREE_OPERAND (t, 1));
10208       return t;
10209
10210     case EXPR_PACK_EXPANSION:
10211       error ("invalid use of pack expansion expression");
10212       return error_mark_node;
10213
10214     case NONTYPE_ARGUMENT_PACK:
10215       error ("use %<...%> to expand argument pack");
10216       return error_mark_node;
10217
10218     default:
10219       return t;
10220     }
10221 }
10222
10223 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10224
10225 static tree
10226 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10227                     tree in_decl)
10228 {
10229   tree new_clauses = NULL, nc, oc;
10230
10231   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10232     {
10233       nc = copy_node (oc);
10234       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10235       new_clauses = nc;
10236
10237       switch (OMP_CLAUSE_CODE (nc))
10238         {
10239         case OMP_CLAUSE_LASTPRIVATE:
10240           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10241             {
10242               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10243               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10244                            in_decl, /*integral_constant_expression_p=*/false);
10245               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10246                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10247             }
10248           /* FALLTHRU */
10249         case OMP_CLAUSE_PRIVATE:
10250         case OMP_CLAUSE_SHARED:
10251         case OMP_CLAUSE_FIRSTPRIVATE:
10252         case OMP_CLAUSE_REDUCTION:
10253         case OMP_CLAUSE_COPYIN:
10254         case OMP_CLAUSE_COPYPRIVATE:
10255         case OMP_CLAUSE_IF:
10256         case OMP_CLAUSE_NUM_THREADS:
10257         case OMP_CLAUSE_SCHEDULE:
10258         case OMP_CLAUSE_COLLAPSE:
10259           OMP_CLAUSE_OPERAND (nc, 0)
10260             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10261                            in_decl, /*integral_constant_expression_p=*/false);
10262           break;
10263         case OMP_CLAUSE_NOWAIT:
10264         case OMP_CLAUSE_ORDERED:
10265         case OMP_CLAUSE_DEFAULT:
10266         case OMP_CLAUSE_UNTIED:
10267           break;
10268         default:
10269           gcc_unreachable ();
10270         }
10271     }
10272
10273   return finish_omp_clauses (nreverse (new_clauses));
10274 }
10275
10276 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10277
10278 static tree
10279 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10280                           tree in_decl)
10281 {
10282 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10283
10284   tree purpose, value, chain;
10285
10286   if (t == NULL)
10287     return t;
10288
10289   if (TREE_CODE (t) != TREE_LIST)
10290     return tsubst_copy_and_build (t, args, complain, in_decl,
10291                                   /*function_p=*/false,
10292                                   /*integral_constant_expression_p=*/false);
10293
10294   if (t == void_list_node)
10295     return t;
10296
10297   purpose = TREE_PURPOSE (t);
10298   if (purpose)
10299     purpose = RECUR (purpose);
10300   value = TREE_VALUE (t);
10301   if (value)
10302     value = RECUR (value);
10303   chain = TREE_CHAIN (t);
10304   if (chain && chain != void_type_node)
10305     chain = RECUR (chain);
10306   return tree_cons (purpose, value, chain);
10307 #undef RECUR
10308 }
10309
10310 /* Substitute one OMP_FOR iterator.  */
10311
10312 static void
10313 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
10314                          tree condv, tree incrv, tree *clauses,
10315                          tree args, tsubst_flags_t complain, tree in_decl,
10316                          bool integral_constant_expression_p)
10317 {
10318 #define RECUR(NODE)                             \
10319   tsubst_expr ((NODE), args, complain, in_decl, \
10320                integral_constant_expression_p)
10321   tree decl, init, cond, incr;
10322
10323   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
10324   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10325   decl = RECUR (TREE_OPERAND (init, 0));
10326   init = TREE_OPERAND (init, 1);
10327   gcc_assert (!type_dependent_expression_p (decl));
10328
10329   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
10330     {
10331       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
10332       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10333       if (TREE_CODE (incr) == MODIFY_EXPR)
10334         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
10335                                     RECUR (TREE_OPERAND (incr, 1)),
10336                                     complain);
10337       else
10338         incr = RECUR (incr);
10339       TREE_VEC_ELT (declv, i) = decl;
10340       TREE_VEC_ELT (initv, i) = init;
10341       TREE_VEC_ELT (condv, i) = cond;
10342       TREE_VEC_ELT (incrv, i) = incr;
10343       return;
10344     }
10345
10346   if (init && TREE_CODE (init) != DECL_EXPR)
10347     {
10348       tree c;
10349       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
10350         {
10351           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
10352                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
10353               && OMP_CLAUSE_DECL (c) == decl)
10354             break;
10355           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
10356                    && OMP_CLAUSE_DECL (c) == decl)
10357             error ("iteration variable %qD should not be firstprivate", decl);
10358           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
10359                    && OMP_CLAUSE_DECL (c) == decl)
10360             error ("iteration variable %qD should not be reduction", decl);
10361         }
10362       if (c == NULL)
10363         {
10364           c = build_omp_clause (OMP_CLAUSE_PRIVATE);
10365           OMP_CLAUSE_DECL (c) = decl;
10366           c = finish_omp_clauses (c);
10367           if (c)
10368             {
10369               OMP_CLAUSE_CHAIN (c) = *clauses;
10370               *clauses = c;
10371             }
10372         }
10373     }
10374   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
10375   if (COMPARISON_CLASS_P (cond))
10376     cond = build2 (TREE_CODE (cond), boolean_type_node,
10377                    RECUR (TREE_OPERAND (cond, 0)),
10378                    RECUR (TREE_OPERAND (cond, 1)));
10379   else
10380     cond = RECUR (cond);
10381   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10382   switch (TREE_CODE (incr))
10383     {
10384     case PREINCREMENT_EXPR:
10385     case PREDECREMENT_EXPR:
10386     case POSTINCREMENT_EXPR:
10387     case POSTDECREMENT_EXPR:
10388       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
10389                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
10390       break;
10391     case MODIFY_EXPR:
10392       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10393           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10394         {
10395           tree rhs = TREE_OPERAND (incr, 1);
10396           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10397                          RECUR (TREE_OPERAND (incr, 0)),
10398                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10399                                  RECUR (TREE_OPERAND (rhs, 0)),
10400                                  RECUR (TREE_OPERAND (rhs, 1))));
10401         }
10402       else
10403         incr = RECUR (incr);
10404       break;
10405     case MODOP_EXPR:
10406       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10407           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10408         {
10409           tree lhs = RECUR (TREE_OPERAND (incr, 0));
10410           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
10411                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
10412                                  TREE_TYPE (decl), lhs,
10413                                  RECUR (TREE_OPERAND (incr, 2))));
10414         }
10415       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
10416                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
10417                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
10418         {
10419           tree rhs = TREE_OPERAND (incr, 2);
10420           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10421                          RECUR (TREE_OPERAND (incr, 0)),
10422                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10423                                  RECUR (TREE_OPERAND (rhs, 0)),
10424                                  RECUR (TREE_OPERAND (rhs, 1))));
10425         }
10426       else
10427         incr = RECUR (incr);
10428       break;
10429     default:
10430       incr = RECUR (incr);
10431       break;
10432     }
10433
10434   TREE_VEC_ELT (declv, i) = decl;
10435   TREE_VEC_ELT (initv, i) = init;
10436   TREE_VEC_ELT (condv, i) = cond;
10437   TREE_VEC_ELT (incrv, i) = incr;
10438 #undef RECUR
10439 }
10440
10441 /* Like tsubst_copy for expressions, etc. but also does semantic
10442    processing.  */
10443
10444 static tree
10445 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10446              bool integral_constant_expression_p)
10447 {
10448 #define RECUR(NODE)                             \
10449   tsubst_expr ((NODE), args, complain, in_decl, \
10450                integral_constant_expression_p)
10451
10452   tree stmt, tmp;
10453
10454   if (t == NULL_TREE || t == error_mark_node)
10455     return t;
10456
10457   if (EXPR_HAS_LOCATION (t))
10458     input_location = EXPR_LOCATION (t);
10459   if (STATEMENT_CODE_P (TREE_CODE (t)))
10460     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10461
10462   switch (TREE_CODE (t))
10463     {
10464     case STATEMENT_LIST:
10465       {
10466         tree_stmt_iterator i;
10467         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10468           RECUR (tsi_stmt (i));
10469         break;
10470       }
10471
10472     case CTOR_INITIALIZER:
10473       finish_mem_initializers (tsubst_initializer_list
10474                                (TREE_OPERAND (t, 0), args));
10475       break;
10476
10477     case RETURN_EXPR:
10478       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10479       break;
10480
10481     case EXPR_STMT:
10482       tmp = RECUR (EXPR_STMT_EXPR (t));
10483       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10484         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10485       else
10486         finish_expr_stmt (tmp);
10487       break;
10488
10489     case USING_STMT:
10490       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10491       break;
10492
10493     case DECL_EXPR:
10494       {
10495         tree decl;
10496         tree init;
10497
10498         decl = DECL_EXPR_DECL (t);
10499         if (TREE_CODE (decl) == LABEL_DECL)
10500           finish_label_decl (DECL_NAME (decl));
10501         else if (TREE_CODE (decl) == USING_DECL)
10502           {
10503             tree scope = USING_DECL_SCOPE (decl);
10504             tree name = DECL_NAME (decl);
10505             tree decl;
10506
10507             scope = RECUR (scope);
10508             decl = lookup_qualified_name (scope, name,
10509                                           /*is_type_p=*/false,
10510                                           /*complain=*/false);
10511             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10512               qualified_name_lookup_error (scope, name, decl, input_location);
10513             else
10514               do_local_using_decl (decl, scope, name);
10515           }
10516         else
10517           {
10518             init = DECL_INITIAL (decl);
10519             decl = tsubst (decl, args, complain, in_decl);
10520             if (decl != error_mark_node)
10521               {
10522                 /* By marking the declaration as instantiated, we avoid
10523                    trying to instantiate it.  Since instantiate_decl can't
10524                    handle local variables, and since we've already done
10525                    all that needs to be done, that's the right thing to
10526                    do.  */
10527                 if (TREE_CODE (decl) == VAR_DECL)
10528                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10529                 if (TREE_CODE (decl) == VAR_DECL
10530                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10531                   /* Anonymous aggregates are a special case.  */
10532                   finish_anon_union (decl);
10533                 else
10534                   {
10535                     maybe_push_decl (decl);
10536                     if (TREE_CODE (decl) == VAR_DECL
10537                         && DECL_PRETTY_FUNCTION_P (decl))
10538                       {
10539                         /* For __PRETTY_FUNCTION__ we have to adjust the
10540                            initializer.  */
10541                         const char *const name
10542                           = cxx_printable_name (current_function_decl, 2);
10543                         init = cp_fname_init (name, &TREE_TYPE (decl));
10544                       }
10545                     else
10546                       {
10547                         tree t = RECUR (init);
10548
10549                         if (init && !t)
10550                           /* If we had an initializer but it
10551                              instantiated to nothing,
10552                              value-initialize the object.  This will
10553                              only occur when the initializer was a
10554                              pack expansion where the parameter packs
10555                              used in that expansion were of length
10556                              zero.  */
10557                           init = build_default_init (TREE_TYPE (decl),
10558                                                      NULL_TREE);
10559                         else
10560                           init = t;
10561                       }
10562
10563                     finish_decl (decl, init, NULL_TREE);
10564                   }
10565               }
10566           }
10567
10568         /* A DECL_EXPR can also be used as an expression, in the condition
10569            clause of an if/for/while construct.  */
10570         return decl;
10571       }
10572
10573     case FOR_STMT:
10574       stmt = begin_for_stmt ();
10575                           RECUR (FOR_INIT_STMT (t));
10576       finish_for_init_stmt (stmt);
10577       tmp = RECUR (FOR_COND (t));
10578       finish_for_cond (tmp, stmt);
10579       tmp = RECUR (FOR_EXPR (t));
10580       finish_for_expr (tmp, stmt);
10581       RECUR (FOR_BODY (t));
10582       finish_for_stmt (stmt);
10583       break;
10584
10585     case WHILE_STMT:
10586       stmt = begin_while_stmt ();
10587       tmp = RECUR (WHILE_COND (t));
10588       finish_while_stmt_cond (tmp, stmt);
10589       RECUR (WHILE_BODY (t));
10590       finish_while_stmt (stmt);
10591       break;
10592
10593     case DO_STMT:
10594       stmt = begin_do_stmt ();
10595       RECUR (DO_BODY (t));
10596       finish_do_body (stmt);
10597       tmp = RECUR (DO_COND (t));
10598       finish_do_stmt (tmp, stmt);
10599       break;
10600
10601     case IF_STMT:
10602       stmt = begin_if_stmt ();
10603       tmp = RECUR (IF_COND (t));
10604       finish_if_stmt_cond (tmp, stmt);
10605       RECUR (THEN_CLAUSE (t));
10606       finish_then_clause (stmt);
10607
10608       if (ELSE_CLAUSE (t))
10609         {
10610           begin_else_clause (stmt);
10611           RECUR (ELSE_CLAUSE (t));
10612           finish_else_clause (stmt);
10613         }
10614
10615       finish_if_stmt (stmt);
10616       break;
10617
10618     case BIND_EXPR:
10619       if (BIND_EXPR_BODY_BLOCK (t))
10620         stmt = begin_function_body ();
10621       else
10622         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10623                                     ? BCS_TRY_BLOCK : 0);
10624
10625       RECUR (BIND_EXPR_BODY (t));
10626
10627       if (BIND_EXPR_BODY_BLOCK (t))
10628         finish_function_body (stmt);
10629       else
10630         finish_compound_stmt (stmt);
10631       break;
10632
10633     case BREAK_STMT:
10634       finish_break_stmt ();
10635       break;
10636
10637     case CONTINUE_STMT:
10638       finish_continue_stmt ();
10639       break;
10640
10641     case SWITCH_STMT:
10642       stmt = begin_switch_stmt ();
10643       tmp = RECUR (SWITCH_STMT_COND (t));
10644       finish_switch_cond (tmp, stmt);
10645       RECUR (SWITCH_STMT_BODY (t));
10646       finish_switch_stmt (stmt);
10647       break;
10648
10649     case CASE_LABEL_EXPR:
10650       finish_case_label (RECUR (CASE_LOW (t)),
10651                          RECUR (CASE_HIGH (t)));
10652       break;
10653
10654     case LABEL_EXPR:
10655       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10656       break;
10657
10658     case GOTO_EXPR:
10659       tmp = GOTO_DESTINATION (t);
10660       if (TREE_CODE (tmp) != LABEL_DECL)
10661         /* Computed goto's must be tsubst'd into.  On the other hand,
10662            non-computed gotos must not be; the identifier in question
10663            will have no binding.  */
10664         tmp = RECUR (tmp);
10665       else
10666         tmp = DECL_NAME (tmp);
10667       finish_goto_stmt (tmp);
10668       break;
10669
10670     case ASM_EXPR:
10671       tmp = finish_asm_stmt
10672         (ASM_VOLATILE_P (t),
10673          RECUR (ASM_STRING (t)),
10674          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10675          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10676          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10677       {
10678         tree asm_expr = tmp;
10679         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10680           asm_expr = TREE_OPERAND (asm_expr, 0);
10681         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10682       }
10683       break;
10684
10685     case TRY_BLOCK:
10686       if (CLEANUP_P (t))
10687         {
10688           stmt = begin_try_block ();
10689           RECUR (TRY_STMTS (t));
10690           finish_cleanup_try_block (stmt);
10691           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10692         }
10693       else
10694         {
10695           tree compound_stmt = NULL_TREE;
10696
10697           if (FN_TRY_BLOCK_P (t))
10698             stmt = begin_function_try_block (&compound_stmt);
10699           else
10700             stmt = begin_try_block ();
10701
10702           RECUR (TRY_STMTS (t));
10703
10704           if (FN_TRY_BLOCK_P (t))
10705             finish_function_try_block (stmt);
10706           else
10707             finish_try_block (stmt);
10708
10709           RECUR (TRY_HANDLERS (t));
10710           if (FN_TRY_BLOCK_P (t))
10711             finish_function_handler_sequence (stmt, compound_stmt);
10712           else
10713             finish_handler_sequence (stmt);
10714         }
10715       break;
10716
10717     case HANDLER:
10718       {
10719         tree decl = HANDLER_PARMS (t);
10720
10721         if (decl)
10722           {
10723             decl = tsubst (decl, args, complain, in_decl);
10724             /* Prevent instantiate_decl from trying to instantiate
10725                this variable.  We've already done all that needs to be
10726                done.  */
10727             if (decl != error_mark_node)
10728               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10729           }
10730         stmt = begin_handler ();
10731         finish_handler_parms (decl, stmt);
10732         RECUR (HANDLER_BODY (t));
10733         finish_handler (stmt);
10734       }
10735       break;
10736
10737     case TAG_DEFN:
10738       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10739       break;
10740
10741     case STATIC_ASSERT:
10742       {
10743         tree condition = 
10744           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10745                        args,
10746                        complain, in_decl,
10747                        /*integral_constant_expression_p=*/true);
10748         finish_static_assert (condition,
10749                               STATIC_ASSERT_MESSAGE (t),
10750                               STATIC_ASSERT_SOURCE_LOCATION (t),
10751                               /*member_p=*/false);
10752       }
10753       break;
10754
10755     case OMP_PARALLEL:
10756       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10757                                 args, complain, in_decl);
10758       stmt = begin_omp_parallel ();
10759       RECUR (OMP_PARALLEL_BODY (t));
10760       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10761         = OMP_PARALLEL_COMBINED (t);
10762       break;
10763
10764     case OMP_TASK:
10765       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
10766                                 args, complain, in_decl);
10767       stmt = begin_omp_task ();
10768       RECUR (OMP_TASK_BODY (t));
10769       finish_omp_task (tmp, stmt);
10770       break;
10771
10772     case OMP_FOR:
10773       {
10774         tree clauses, body, pre_body;
10775         tree declv, initv, condv, incrv;
10776         int i;
10777
10778         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10779                                       args, complain, in_decl);
10780         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10781         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10782         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10783         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10784
10785         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
10786           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
10787                                    &clauses, args, complain, in_decl,
10788                                    integral_constant_expression_p);
10789
10790         stmt = begin_omp_structured_block ();
10791
10792         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
10793           if (TREE_VEC_ELT (initv, i) == NULL
10794               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
10795             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
10796           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
10797             {
10798               tree init = RECUR (TREE_VEC_ELT (initv, i));
10799               gcc_assert (init == TREE_VEC_ELT (declv, i));
10800               TREE_VEC_ELT (initv, i) = NULL_TREE;
10801             }
10802           else
10803             {
10804               tree decl_expr = TREE_VEC_ELT (initv, i);
10805               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
10806               gcc_assert (init != NULL);
10807               TREE_VEC_ELT (initv, i) = RECUR (init);
10808               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
10809               RECUR (decl_expr);
10810               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
10811             }
10812
10813         pre_body = push_stmt_list ();
10814         RECUR (OMP_FOR_PRE_BODY (t));
10815         pre_body = pop_stmt_list (pre_body);
10816
10817         body = push_stmt_list ();
10818         RECUR (OMP_FOR_BODY (t));
10819         body = pop_stmt_list (body);
10820
10821         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
10822                             body, pre_body, clauses);
10823
10824         add_stmt (finish_omp_structured_block (stmt));
10825       }
10826       break;
10827
10828     case OMP_SECTIONS:
10829     case OMP_SINGLE:
10830       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10831       stmt = push_stmt_list ();
10832       RECUR (OMP_BODY (t));
10833       stmt = pop_stmt_list (stmt);
10834
10835       t = copy_node (t);
10836       OMP_BODY (t) = stmt;
10837       OMP_CLAUSES (t) = tmp;
10838       add_stmt (t);
10839       break;
10840
10841     case OMP_SECTION:
10842     case OMP_CRITICAL:
10843     case OMP_MASTER:
10844     case OMP_ORDERED:
10845       stmt = push_stmt_list ();
10846       RECUR (OMP_BODY (t));
10847       stmt = pop_stmt_list (stmt);
10848
10849       t = copy_node (t);
10850       OMP_BODY (t) = stmt;
10851       add_stmt (t);
10852       break;
10853
10854     case OMP_ATOMIC:
10855       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10856       {
10857         tree op1 = TREE_OPERAND (t, 1);
10858         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10859         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10860         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10861       }
10862       break;
10863
10864     case EXPR_PACK_EXPANSION:
10865       error ("invalid use of pack expansion expression");
10866       return error_mark_node;
10867
10868     case NONTYPE_ARGUMENT_PACK:
10869       error ("use %<...%> to expand argument pack");
10870       return error_mark_node;
10871
10872     default:
10873       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10874
10875       return tsubst_copy_and_build (t, args, complain, in_decl,
10876                                     /*function_p=*/false,
10877                                     integral_constant_expression_p);
10878     }
10879
10880   return NULL_TREE;
10881 #undef RECUR
10882 }
10883
10884 /* T is a postfix-expression that is not being used in a function
10885    call.  Return the substituted version of T.  */
10886
10887 static tree
10888 tsubst_non_call_postfix_expression (tree t, tree args,
10889                                     tsubst_flags_t complain,
10890                                     tree in_decl)
10891 {
10892   if (TREE_CODE (t) == SCOPE_REF)
10893     t = tsubst_qualified_id (t, args, complain, in_decl,
10894                              /*done=*/false, /*address_p=*/false);
10895   else
10896     t = tsubst_copy_and_build (t, args, complain, in_decl,
10897                                /*function_p=*/false,
10898                                /*integral_constant_expression_p=*/false);
10899
10900   return t;
10901 }
10902
10903 /* Like tsubst but deals with expressions and performs semantic
10904    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10905
10906 tree
10907 tsubst_copy_and_build (tree t,
10908                        tree args,
10909                        tsubst_flags_t complain,
10910                        tree in_decl,
10911                        bool function_p,
10912                        bool integral_constant_expression_p)
10913 {
10914 #define RECUR(NODE)                                             \
10915   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10916                          /*function_p=*/false,                  \
10917                          integral_constant_expression_p)
10918
10919   tree op1;
10920
10921   if (t == NULL_TREE || t == error_mark_node)
10922     return t;
10923
10924   switch (TREE_CODE (t))
10925     {
10926     case USING_DECL:
10927       t = DECL_NAME (t);
10928       /* Fall through.  */
10929     case IDENTIFIER_NODE:
10930       {
10931         tree decl;
10932         cp_id_kind idk;
10933         bool non_integral_constant_expression_p;
10934         const char *error_msg;
10935
10936         if (IDENTIFIER_TYPENAME_P (t))
10937           {
10938             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10939             t = mangle_conv_op_name_for_type (new_type);
10940           }
10941
10942         /* Look up the name.  */
10943         decl = lookup_name (t);
10944
10945         /* By convention, expressions use ERROR_MARK_NODE to indicate
10946            failure, not NULL_TREE.  */
10947         if (decl == NULL_TREE)
10948           decl = error_mark_node;
10949
10950         decl = finish_id_expression (t, decl, NULL_TREE,
10951                                      &idk,
10952                                      integral_constant_expression_p,
10953                                      /*allow_non_integral_constant_expression_p=*/false,
10954                                      &non_integral_constant_expression_p,
10955                                      /*template_p=*/false,
10956                                      /*done=*/true,
10957                                      /*address_p=*/false,
10958                                      /*template_arg_p=*/false,
10959                                      &error_msg,
10960                                      input_location);
10961         if (error_msg)
10962           error (error_msg);
10963         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10964           decl = unqualified_name_lookup_error (decl);
10965         return decl;
10966       }
10967
10968     case TEMPLATE_ID_EXPR:
10969       {
10970         tree object;
10971         tree templ = RECUR (TREE_OPERAND (t, 0));
10972         tree targs = TREE_OPERAND (t, 1);
10973
10974         if (targs)
10975           targs = tsubst_template_args (targs, args, complain, in_decl);
10976
10977         if (TREE_CODE (templ) == COMPONENT_REF)
10978           {
10979             object = TREE_OPERAND (templ, 0);
10980             templ = TREE_OPERAND (templ, 1);
10981           }
10982         else
10983           object = NULL_TREE;
10984         templ = lookup_template_function (templ, targs);
10985
10986         if (object)
10987           return build3 (COMPONENT_REF, TREE_TYPE (templ),
10988                          object, templ, NULL_TREE);
10989         else
10990           return baselink_for_fns (templ);
10991       }
10992
10993     case INDIRECT_REF:
10994       {
10995         tree r = RECUR (TREE_OPERAND (t, 0));
10996
10997         if (REFERENCE_REF_P (t))
10998           {
10999             /* A type conversion to reference type will be enclosed in
11000                such an indirect ref, but the substitution of the cast
11001                will have also added such an indirect ref.  */
11002             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
11003               r = convert_from_reference (r);
11004           }
11005         else
11006           r = build_x_indirect_ref (r, "unary *", complain);
11007         return r;
11008       }
11009
11010     case NOP_EXPR:
11011       return build_nop
11012         (tsubst (TREE_TYPE (t), args, complain, in_decl),
11013          RECUR (TREE_OPERAND (t, 0)));
11014
11015     case CAST_EXPR:
11016     case REINTERPRET_CAST_EXPR:
11017     case CONST_CAST_EXPR:
11018     case DYNAMIC_CAST_EXPR:
11019     case STATIC_CAST_EXPR:
11020       {
11021         tree type;
11022         tree op;
11023
11024         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11025         if (integral_constant_expression_p
11026             && !cast_valid_in_integral_constant_expression_p (type))
11027           {
11028             if (complain & tf_error)
11029               error ("a cast to a type other than an integral or "
11030                      "enumeration type cannot appear in a constant-expression");
11031             return error_mark_node; 
11032           }
11033
11034         op = RECUR (TREE_OPERAND (t, 0));
11035
11036         switch (TREE_CODE (t))
11037           {
11038           case CAST_EXPR:
11039             return build_functional_cast (type, op, complain);
11040           case REINTERPRET_CAST_EXPR:
11041             return build_reinterpret_cast (type, op, complain);
11042           case CONST_CAST_EXPR:
11043             return build_const_cast (type, op, complain);
11044           case DYNAMIC_CAST_EXPR:
11045             return build_dynamic_cast (type, op, complain);
11046           case STATIC_CAST_EXPR:
11047             return build_static_cast (type, op, complain);
11048           default:
11049             gcc_unreachable ();
11050           }
11051       }
11052
11053     case POSTDECREMENT_EXPR:
11054     case POSTINCREMENT_EXPR:
11055       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11056                                                 args, complain, in_decl);
11057       return build_x_unary_op (TREE_CODE (t), op1, complain);
11058
11059     case PREDECREMENT_EXPR:
11060     case PREINCREMENT_EXPR:
11061     case NEGATE_EXPR:
11062     case BIT_NOT_EXPR:
11063     case ABS_EXPR:
11064     case TRUTH_NOT_EXPR:
11065     case UNARY_PLUS_EXPR:  /* Unary + */
11066     case REALPART_EXPR:
11067     case IMAGPART_EXPR:
11068       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11069                                complain);
11070
11071     case ADDR_EXPR:
11072       op1 = TREE_OPERAND (t, 0);
11073       if (TREE_CODE (op1) == SCOPE_REF)
11074         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11075                                    /*done=*/true, /*address_p=*/true);
11076       else
11077         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11078                                                   in_decl);
11079       if (TREE_CODE (op1) == LABEL_DECL)
11080         return finish_label_address_expr (DECL_NAME (op1),
11081                                           EXPR_LOCATION (op1));
11082       return build_x_unary_op (ADDR_EXPR, op1, complain);
11083
11084     case PLUS_EXPR:
11085     case MINUS_EXPR:
11086     case MULT_EXPR:
11087     case TRUNC_DIV_EXPR:
11088     case CEIL_DIV_EXPR:
11089     case FLOOR_DIV_EXPR:
11090     case ROUND_DIV_EXPR:
11091     case EXACT_DIV_EXPR:
11092     case BIT_AND_EXPR:
11093     case BIT_IOR_EXPR:
11094     case BIT_XOR_EXPR:
11095     case TRUNC_MOD_EXPR:
11096     case FLOOR_MOD_EXPR:
11097     case TRUTH_ANDIF_EXPR:
11098     case TRUTH_ORIF_EXPR:
11099     case TRUTH_AND_EXPR:
11100     case TRUTH_OR_EXPR:
11101     case RSHIFT_EXPR:
11102     case LSHIFT_EXPR:
11103     case RROTATE_EXPR:
11104     case LROTATE_EXPR:
11105     case EQ_EXPR:
11106     case NE_EXPR:
11107     case MAX_EXPR:
11108     case MIN_EXPR:
11109     case LE_EXPR:
11110     case GE_EXPR:
11111     case LT_EXPR:
11112     case GT_EXPR:
11113     case MEMBER_REF:
11114     case DOTSTAR_EXPR:
11115       return build_x_binary_op
11116         (TREE_CODE (t),
11117          RECUR (TREE_OPERAND (t, 0)),
11118          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11119           ? ERROR_MARK
11120           : TREE_CODE (TREE_OPERAND (t, 0))),
11121          RECUR (TREE_OPERAND (t, 1)),
11122          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11123           ? ERROR_MARK
11124           : TREE_CODE (TREE_OPERAND (t, 1))),
11125          /*overloaded_p=*/NULL,
11126          complain);
11127
11128     case SCOPE_REF:
11129       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11130                                   /*address_p=*/false);
11131     case ARRAY_REF:
11132       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11133                                                 args, complain, in_decl);
11134       return build_x_binary_op (ARRAY_REF, op1,
11135                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11136                                  ? ERROR_MARK
11137                                  : TREE_CODE (TREE_OPERAND (t, 0))),
11138                                 RECUR (TREE_OPERAND (t, 1)),
11139                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11140                                  ? ERROR_MARK
11141                                  : TREE_CODE (TREE_OPERAND (t, 1))),
11142                                 /*overloaded_p=*/NULL,
11143                                 complain);
11144
11145     case SIZEOF_EXPR:
11146       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11147         return tsubst_copy (t, args, complain, in_decl);
11148       /* Fall through */
11149       
11150     case ALIGNOF_EXPR:
11151       op1 = TREE_OPERAND (t, 0);
11152       if (!args)
11153         {
11154           /* When there are no ARGS, we are trying to evaluate a
11155              non-dependent expression from the parser.  Trying to do
11156              the substitutions may not work.  */
11157           if (!TYPE_P (op1))
11158             op1 = TREE_TYPE (op1);
11159         }
11160       else
11161         {
11162           ++skip_evaluation;
11163           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11164                                        /*function_p=*/false,
11165                                        /*integral_constant_expression_p=*/false);
11166           --skip_evaluation;
11167         }
11168       if (TYPE_P (op1))
11169         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11170                                            complain & tf_error);
11171       else
11172         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11173                                            complain & tf_error);
11174
11175     case MODOP_EXPR:
11176       {
11177         tree r = build_x_modify_expr
11178           (RECUR (TREE_OPERAND (t, 0)),
11179            TREE_CODE (TREE_OPERAND (t, 1)),
11180            RECUR (TREE_OPERAND (t, 2)),
11181            complain);
11182         /* TREE_NO_WARNING must be set if either the expression was
11183            parenthesized or it uses an operator such as >>= rather
11184            than plain assignment.  In the former case, it was already
11185            set and must be copied.  In the latter case,
11186            build_x_modify_expr sets it and it must not be reset
11187            here.  */
11188         if (TREE_NO_WARNING (t))
11189           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11190         return r;
11191       }
11192
11193     case ARROW_EXPR:
11194       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11195                                                 args, complain, in_decl);
11196       /* Remember that there was a reference to this entity.  */
11197       if (DECL_P (op1))
11198         mark_used (op1);
11199       return build_x_arrow (op1);
11200
11201     case NEW_EXPR:
11202       {
11203         tree init = RECUR (TREE_OPERAND (t, 3));
11204
11205         if (TREE_OPERAND (t, 3) && !init)
11206           /* If there was an initializer in the original tree, but
11207              it instantiated to an empty list, then we should pass on
11208              VOID_ZERO_NODE to tell build_new that it was an empty
11209              initializer () rather than no initializer.  This can only
11210              happen when the initializer is a pack expansion whose
11211              parameter packs are of length zero.  */
11212           init = void_zero_node;
11213
11214         return build_new
11215           (RECUR (TREE_OPERAND (t, 0)),
11216            RECUR (TREE_OPERAND (t, 1)),
11217            RECUR (TREE_OPERAND (t, 2)),
11218            init,
11219            NEW_EXPR_USE_GLOBAL (t),
11220            complain);
11221       }
11222
11223     case DELETE_EXPR:
11224      return delete_sanity
11225        (RECUR (TREE_OPERAND (t, 0)),
11226         RECUR (TREE_OPERAND (t, 1)),
11227         DELETE_EXPR_USE_VEC (t),
11228         DELETE_EXPR_USE_GLOBAL (t));
11229
11230     case COMPOUND_EXPR:
11231       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11232                                     RECUR (TREE_OPERAND (t, 1)),
11233                                     complain);
11234
11235     case CALL_EXPR:
11236       {
11237         tree function;
11238         tree call_args;
11239         bool qualified_p;
11240         bool koenig_p;
11241
11242         function = CALL_EXPR_FN (t);
11243         /* When we parsed the expression,  we determined whether or
11244            not Koenig lookup should be performed.  */
11245         koenig_p = KOENIG_LOOKUP_P (t);
11246         if (TREE_CODE (function) == SCOPE_REF)
11247           {
11248             qualified_p = true;
11249             function = tsubst_qualified_id (function, args, complain, in_decl,
11250                                             /*done=*/false,
11251                                             /*address_p=*/false);
11252           }
11253         else
11254           {
11255             if (TREE_CODE (function) == COMPONENT_REF)
11256               {
11257                 tree op = TREE_OPERAND (function, 1);
11258
11259                 qualified_p = (TREE_CODE (op) == SCOPE_REF
11260                                || (BASELINK_P (op)
11261                                    && BASELINK_QUALIFIED_P (op)));
11262               }
11263             else
11264               qualified_p = false;
11265
11266             function = tsubst_copy_and_build (function, args, complain,
11267                                               in_decl,
11268                                               !qualified_p,
11269                                               integral_constant_expression_p);
11270
11271             if (BASELINK_P (function))
11272               qualified_p = true;
11273           }
11274
11275         /* FIXME:  Rewrite this so as not to construct an arglist.  */
11276         call_args = RECUR (CALL_EXPR_ARGS (t));
11277
11278         /* We do not perform argument-dependent lookup if normal
11279            lookup finds a non-function, in accordance with the
11280            expected resolution of DR 218.  */
11281         if (koenig_p
11282             && ((is_overloaded_fn (function)
11283                  /* If lookup found a member function, the Koenig lookup is
11284                     not appropriate, even if an unqualified-name was used
11285                     to denote the function.  */
11286                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
11287                 || TREE_CODE (function) == IDENTIFIER_NODE))
11288           function = perform_koenig_lookup (function, call_args);
11289
11290         if (TREE_CODE (function) == IDENTIFIER_NODE)
11291           {
11292             unqualified_name_lookup_error (function);
11293             return error_mark_node;
11294           }
11295
11296         /* Remember that there was a reference to this entity.  */
11297         if (DECL_P (function))
11298           mark_used (function);
11299
11300         if (TREE_CODE (function) == OFFSET_REF)
11301           return build_offset_ref_call_from_tree (function, call_args);
11302         if (TREE_CODE (function) == COMPONENT_REF)
11303           {
11304             if (!BASELINK_P (TREE_OPERAND (function, 1)))
11305               return finish_call_expr (function, call_args,
11306                                        /*disallow_virtual=*/false,
11307                                        /*koenig_p=*/false,
11308                                        complain);
11309             else
11310               return (build_new_method_call
11311                       (TREE_OPERAND (function, 0),
11312                        TREE_OPERAND (function, 1),
11313                        call_args, NULL_TREE,
11314                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11315                        /*fn_p=*/NULL,
11316                        complain));
11317           }
11318         return finish_call_expr (function, call_args,
11319                                  /*disallow_virtual=*/qualified_p,
11320                                  koenig_p,
11321                                  complain);
11322       }
11323
11324     case COND_EXPR:
11325       return build_x_conditional_expr
11326         (RECUR (TREE_OPERAND (t, 0)),
11327          RECUR (TREE_OPERAND (t, 1)),
11328          RECUR (TREE_OPERAND (t, 2)),
11329          complain);
11330
11331     case PSEUDO_DTOR_EXPR:
11332       return finish_pseudo_destructor_expr
11333         (RECUR (TREE_OPERAND (t, 0)),
11334          RECUR (TREE_OPERAND (t, 1)),
11335          RECUR (TREE_OPERAND (t, 2)));
11336
11337     case TREE_LIST:
11338       {
11339         tree purpose, value, chain;
11340
11341         if (t == void_list_node)
11342           return t;
11343
11344         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11345             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11346           {
11347             /* We have pack expansions, so expand those and
11348                create a new list out of it.  */
11349             tree purposevec = NULL_TREE;
11350             tree valuevec = NULL_TREE;
11351             tree chain;
11352             int i, len = -1;
11353
11354             /* Expand the argument expressions.  */
11355             if (TREE_PURPOSE (t))
11356               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11357                                                  complain, in_decl);
11358             if (TREE_VALUE (t))
11359               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11360                                                complain, in_decl);
11361
11362             /* Build the rest of the list.  */
11363             chain = TREE_CHAIN (t);
11364             if (chain && chain != void_type_node)
11365               chain = RECUR (chain);
11366
11367             /* Determine the number of arguments.  */
11368             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11369               {
11370                 len = TREE_VEC_LENGTH (purposevec);
11371                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11372               }
11373             else if (TREE_CODE (valuevec) == TREE_VEC)
11374               len = TREE_VEC_LENGTH (valuevec);
11375             else
11376               {
11377                 /* Since we only performed a partial substitution into
11378                    the argument pack, we only return a single list
11379                    node.  */
11380                 if (purposevec == TREE_PURPOSE (t)
11381                     && valuevec == TREE_VALUE (t)
11382                     && chain == TREE_CHAIN (t))
11383                   return t;
11384
11385                 return tree_cons (purposevec, valuevec, chain);
11386               }
11387             
11388             /* Convert the argument vectors into a TREE_LIST */
11389             i = len;
11390             while (i > 0)
11391               {
11392                 /* Grab the Ith values.  */
11393                 i--;
11394                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11395                                      : NULL_TREE;
11396                 value 
11397                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11398                              : NULL_TREE;
11399
11400                 /* Build the list (backwards).  */
11401                 chain = tree_cons (purpose, value, chain);
11402               }
11403
11404             return chain;
11405           }
11406
11407         purpose = TREE_PURPOSE (t);
11408         if (purpose)
11409           purpose = RECUR (purpose);
11410         value = TREE_VALUE (t);
11411         if (value)
11412           value = RECUR (value);
11413         chain = TREE_CHAIN (t);
11414         if (chain && chain != void_type_node)
11415           chain = RECUR (chain);
11416         if (purpose == TREE_PURPOSE (t)
11417             && value == TREE_VALUE (t)
11418             && chain == TREE_CHAIN (t))
11419           return t;
11420         return tree_cons (purpose, value, chain);
11421       }
11422
11423     case COMPONENT_REF:
11424       {
11425         tree object;
11426         tree object_type;
11427         tree member;
11428
11429         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11430                                                      args, complain, in_decl);
11431         /* Remember that there was a reference to this entity.  */
11432         if (DECL_P (object))
11433           mark_used (object);
11434         object_type = TREE_TYPE (object);
11435
11436         member = TREE_OPERAND (t, 1);
11437         if (BASELINK_P (member))
11438           member = tsubst_baselink (member,
11439                                     non_reference (TREE_TYPE (object)),
11440                                     args, complain, in_decl);
11441         else
11442           member = tsubst_copy (member, args, complain, in_decl);
11443         if (member == error_mark_node)
11444           return error_mark_node;
11445
11446         if (object_type && !CLASS_TYPE_P (object_type))
11447           {
11448             if (SCALAR_TYPE_P (object_type))
11449               {
11450                 tree s = NULL_TREE;
11451                 tree dtor = member;
11452
11453                 if (TREE_CODE (dtor) == SCOPE_REF)
11454                   {
11455                     s = TREE_OPERAND (dtor, 0);
11456                     dtor = TREE_OPERAND (dtor, 1);
11457                   }
11458                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11459                   {
11460                     dtor = TREE_OPERAND (dtor, 0);
11461                     if (TYPE_P (dtor))
11462                       return finish_pseudo_destructor_expr (object, s, dtor);
11463                   }
11464               }
11465           }
11466         else if (TREE_CODE (member) == SCOPE_REF
11467                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11468           {
11469             tree tmpl;
11470             tree args;
11471
11472             /* Lookup the template functions now that we know what the
11473                scope is.  */
11474             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11475             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11476             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11477                                             /*is_type_p=*/false,
11478                                             /*complain=*/false);
11479             if (BASELINK_P (member))
11480               {
11481                 BASELINK_FUNCTIONS (member)
11482                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11483                               args);
11484                 member = (adjust_result_of_qualified_name_lookup
11485                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11486                            object_type));
11487               }
11488             else
11489               {
11490                 qualified_name_lookup_error (object_type, tmpl, member,
11491                                              input_location);
11492                 return error_mark_node;
11493               }
11494           }
11495         else if (TREE_CODE (member) == SCOPE_REF
11496                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11497                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11498           {
11499             if (complain & tf_error)
11500               {
11501                 if (TYPE_P (TREE_OPERAND (member, 0)))
11502                   error ("%qT is not a class or namespace",
11503                          TREE_OPERAND (member, 0));
11504                 else
11505                   error ("%qD is not a class or namespace",
11506                          TREE_OPERAND (member, 0));
11507               }
11508             return error_mark_node;
11509           }
11510         else if (TREE_CODE (member) == FIELD_DECL)
11511           return finish_non_static_data_member (member, object, NULL_TREE);
11512
11513         return finish_class_member_access_expr (object, member,
11514                                                 /*template_p=*/false,
11515                                                 complain);
11516       }
11517
11518     case THROW_EXPR:
11519       return build_throw
11520         (RECUR (TREE_OPERAND (t, 0)));
11521
11522     case CONSTRUCTOR:
11523       {
11524         VEC(constructor_elt,gc) *n;
11525         constructor_elt *ce;
11526         unsigned HOST_WIDE_INT idx;
11527         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11528         bool process_index_p;
11529         int newlen;
11530         bool need_copy_p = false;
11531         tree r;
11532
11533         if (type == error_mark_node)
11534           return error_mark_node;
11535
11536         /* digest_init will do the wrong thing if we let it.  */
11537         if (type && TYPE_PTRMEMFUNC_P (type))
11538           return t;
11539
11540         /* We do not want to process the index of aggregate
11541            initializers as they are identifier nodes which will be
11542            looked up by digest_init.  */
11543         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
11544
11545         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11546         newlen = VEC_length (constructor_elt, n);
11547         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11548           {
11549             if (ce->index && process_index_p)
11550               ce->index = RECUR (ce->index);
11551
11552             if (PACK_EXPANSION_P (ce->value))
11553               {
11554                 /* Substitute into the pack expansion.  */
11555                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11556                                                   in_decl);
11557
11558                 if (ce->value == error_mark_node)
11559                   ;
11560                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11561                   /* Just move the argument into place.  */
11562                   ce->value = TREE_VEC_ELT (ce->value, 0);
11563                 else
11564                   {
11565                     /* Update the length of the final CONSTRUCTOR
11566                        arguments vector, and note that we will need to
11567                        copy.*/
11568                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11569                     need_copy_p = true;
11570                   }
11571               }
11572             else
11573               ce->value = RECUR (ce->value);
11574           }
11575
11576         if (need_copy_p)
11577           {
11578             VEC(constructor_elt,gc) *old_n = n;
11579
11580             n = VEC_alloc (constructor_elt, gc, newlen);
11581             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11582                  idx++)
11583               {
11584                 if (TREE_CODE (ce->value) == TREE_VEC)
11585                   {
11586                     int i, len = TREE_VEC_LENGTH (ce->value);
11587                     for (i = 0; i < len; ++i)
11588                       CONSTRUCTOR_APPEND_ELT (n, 0,
11589                                               TREE_VEC_ELT (ce->value, i));
11590                   }
11591                 else
11592                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11593               }
11594           }
11595
11596         r = build_constructor (init_list_type_node, n);
11597
11598         if (TREE_HAS_CONSTRUCTOR (t))
11599           return finish_compound_literal (type, r);
11600
11601         return r;
11602       }
11603
11604     case TYPEID_EXPR:
11605       {
11606         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11607         if (TYPE_P (operand_0))
11608           return get_typeid (operand_0);
11609         return build_typeid (operand_0);
11610       }
11611
11612     case VAR_DECL:
11613       if (!args)
11614         return t;
11615       /* Fall through */
11616
11617     case PARM_DECL:
11618       {
11619         tree r = tsubst_copy (t, args, complain, in_decl);
11620
11621         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11622           /* If the original type was a reference, we'll be wrapped in
11623              the appropriate INDIRECT_REF.  */
11624           r = convert_from_reference (r);
11625         return r;
11626       }
11627
11628     case VA_ARG_EXPR:
11629       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11630                              tsubst_copy (TREE_TYPE (t), args, complain,
11631                                           in_decl));
11632
11633     case OFFSETOF_EXPR:
11634       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11635
11636     case TRAIT_EXPR:
11637       {
11638         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11639                                   complain, in_decl);
11640
11641         tree type2 = TRAIT_EXPR_TYPE2 (t);
11642         if (type2)
11643           type2 = tsubst_copy (type2, args, complain, in_decl);
11644         
11645         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11646       }
11647
11648     case STMT_EXPR:
11649       {
11650         tree old_stmt_expr = cur_stmt_expr;
11651         tree stmt_expr = begin_stmt_expr ();
11652
11653         cur_stmt_expr = stmt_expr;
11654         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11655                      integral_constant_expression_p);
11656         stmt_expr = finish_stmt_expr (stmt_expr, false);
11657         cur_stmt_expr = old_stmt_expr;
11658
11659         return stmt_expr;
11660       }
11661
11662     case CONST_DECL:
11663       t = tsubst_copy (t, args, complain, in_decl);
11664       /* As in finish_id_expression, we resolve enumeration constants
11665          to their underlying values.  */
11666       if (TREE_CODE (t) == CONST_DECL)
11667         {
11668           used_types_insert (TREE_TYPE (t));
11669           return DECL_INITIAL (t);
11670         }
11671       return t;
11672
11673     default:
11674       /* Handle Objective-C++ constructs, if appropriate.  */
11675       {
11676         tree subst
11677           = objcp_tsubst_copy_and_build (t, args, complain,
11678                                          in_decl, /*function_p=*/false);
11679         if (subst)
11680           return subst;
11681       }
11682       return tsubst_copy (t, args, complain, in_decl);
11683     }
11684
11685 #undef RECUR
11686 }
11687
11688 /* Verify that the instantiated ARGS are valid. For type arguments,
11689    make sure that the type's linkage is ok. For non-type arguments,
11690    make sure they are constants if they are integral or enumerations.
11691    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11692
11693 static bool
11694 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11695 {
11696   int ix, len = DECL_NTPARMS (tmpl);
11697   bool result = false;
11698
11699   for (ix = 0; ix != len; ix++)
11700     {
11701       tree t = TREE_VEC_ELT (args, ix);
11702
11703       if (TYPE_P (t))
11704         {
11705           /* [basic.link]: A name with no linkage (notably, the name
11706              of a class or enumeration declared in a local scope)
11707              shall not be used to declare an entity with linkage.
11708              This implies that names with no linkage cannot be used as
11709              template arguments.  */
11710           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11711
11712           if (nt)
11713             {
11714               /* DR 488 makes use of a type with no linkage cause
11715                  type deduction to fail.  */
11716               if (complain & tf_error)
11717                 {
11718                   if (TYPE_ANONYMOUS_P (nt))
11719                     error ("%qT is/uses anonymous type", t);
11720                   else
11721                     error ("template argument for %qD uses local type %qT",
11722                            tmpl, t);
11723                 }
11724               result = true;
11725             }
11726           /* In order to avoid all sorts of complications, we do not
11727              allow variably-modified types as template arguments.  */
11728           else if (variably_modified_type_p (t, NULL_TREE))
11729             {
11730               if (complain & tf_error)
11731                 error ("%qT is a variably modified type", t);
11732               result = true;
11733             }
11734         }
11735       /* A non-type argument of integral or enumerated type must be a
11736          constant.  */
11737       else if (TREE_TYPE (t)
11738                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11739                && !TREE_CONSTANT (t))
11740         {
11741           if (complain & tf_error)
11742             error ("integral expression %qE is not constant", t);
11743           result = true;
11744         }
11745     }
11746   if (result && (complain & tf_error))
11747     error ("  trying to instantiate %qD", tmpl);
11748   return result;
11749 }
11750
11751 /* Instantiate the indicated variable or function template TMPL with
11752    the template arguments in TARG_PTR.  */
11753
11754 tree
11755 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11756 {
11757   tree fndecl;
11758   tree gen_tmpl;
11759   tree spec;
11760   HOST_WIDE_INT saved_processing_template_decl;
11761
11762   if (tmpl == error_mark_node)
11763     return error_mark_node;
11764
11765   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11766
11767   /* If this function is a clone, handle it specially.  */
11768   if (DECL_CLONED_FUNCTION_P (tmpl))
11769     {
11770       tree spec;
11771       tree clone;
11772
11773       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11774                                    complain);
11775       if (spec == error_mark_node)
11776         return error_mark_node;
11777
11778       /* Look for the clone.  */
11779       FOR_EACH_CLONE (clone, spec)
11780         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11781           return clone;
11782       /* We should always have found the clone by now.  */
11783       gcc_unreachable ();
11784       return NULL_TREE;
11785     }
11786
11787   /* Check to see if we already have this specialization.  */
11788   spec = retrieve_specialization (tmpl, targ_ptr,
11789                                   /*class_specializations_p=*/false);
11790   if (spec != NULL_TREE)
11791     return spec;
11792
11793   gen_tmpl = most_general_template (tmpl);
11794   if (tmpl != gen_tmpl)
11795     {
11796       /* The TMPL is a partial instantiation.  To get a full set of
11797          arguments we must add the arguments used to perform the
11798          partial instantiation.  */
11799       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11800                                               targ_ptr);
11801
11802       /* Check to see if we already have this specialization.  */
11803       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11804                                       /*class_specializations_p=*/false);
11805       if (spec != NULL_TREE)
11806         return spec;
11807     }
11808
11809   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11810                                complain))
11811     return error_mark_node;
11812
11813   /* We are building a FUNCTION_DECL, during which the access of its
11814      parameters and return types have to be checked.  However this
11815      FUNCTION_DECL which is the desired context for access checking
11816      is not built yet.  We solve this chicken-and-egg problem by
11817      deferring all checks until we have the FUNCTION_DECL.  */
11818   push_deferring_access_checks (dk_deferred);
11819
11820   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11821      (because, for example, we have encountered a non-dependent
11822      function call in the body of a template function and must now
11823      determine which of several overloaded functions will be called),
11824      within the instantiation itself we are not processing a
11825      template.  */  
11826   saved_processing_template_decl = processing_template_decl;
11827   processing_template_decl = 0;
11828   /* Substitute template parameters to obtain the specialization.  */
11829   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11830                    targ_ptr, complain, gen_tmpl);
11831   processing_template_decl = saved_processing_template_decl;
11832   if (fndecl == error_mark_node)
11833     return error_mark_node;
11834
11835   /* Now we know the specialization, compute access previously
11836      deferred.  */
11837   push_access_scope (fndecl);
11838   perform_deferred_access_checks ();
11839   pop_access_scope (fndecl);
11840   pop_deferring_access_checks ();
11841
11842   /* The DECL_TI_TEMPLATE should always be the immediate parent
11843      template, not the most general template.  */
11844   DECL_TI_TEMPLATE (fndecl) = tmpl;
11845
11846   /* If we've just instantiated the main entry point for a function,
11847      instantiate all the alternate entry points as well.  We do this
11848      by cloning the instantiation of the main entry point, not by
11849      instantiating the template clones.  */
11850   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11851     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11852
11853   return fndecl;
11854 }
11855
11856 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11857    arguments that are being used when calling it.  TARGS is a vector
11858    into which the deduced template arguments are placed.
11859
11860    Return zero for success, 2 for an incomplete match that doesn't resolve
11861    all the types, and 1 for complete failure.  An error message will be
11862    printed only for an incomplete match.
11863
11864    If FN is a conversion operator, or we are trying to produce a specific
11865    specialization, RETURN_TYPE is the return type desired.
11866
11867    The EXPLICIT_TARGS are explicit template arguments provided via a
11868    template-id.
11869
11870    The parameter STRICT is one of:
11871
11872    DEDUCE_CALL:
11873      We are deducing arguments for a function call, as in
11874      [temp.deduct.call].
11875
11876    DEDUCE_CONV:
11877      We are deducing arguments for a conversion function, as in
11878      [temp.deduct.conv].
11879
11880    DEDUCE_EXACT:
11881      We are deducing arguments when doing an explicit instantiation
11882      as in [temp.explicit], when determining an explicit specialization
11883      as in [temp.expl.spec], or when taking the address of a function
11884      template, as in [temp.deduct.funcaddr].  */
11885
11886 int
11887 fn_type_unification (tree fn,
11888                      tree explicit_targs,
11889                      tree targs,
11890                      tree args,
11891                      tree return_type,
11892                      unification_kind_t strict,
11893                      int flags)
11894 {
11895   tree parms;
11896   tree fntype;
11897   int result;
11898   bool incomplete_argument_packs_p = false;
11899
11900   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11901
11902   fntype = TREE_TYPE (fn);
11903   if (explicit_targs)
11904     {
11905       /* [temp.deduct]
11906
11907          The specified template arguments must match the template
11908          parameters in kind (i.e., type, nontype, template), and there
11909          must not be more arguments than there are parameters;
11910          otherwise type deduction fails.
11911
11912          Nontype arguments must match the types of the corresponding
11913          nontype template parameters, or must be convertible to the
11914          types of the corresponding nontype parameters as specified in
11915          _temp.arg.nontype_, otherwise type deduction fails.
11916
11917          All references in the function type of the function template
11918          to the corresponding template parameters are replaced by the
11919          specified template argument values.  If a substitution in a
11920          template parameter or in the function type of the function
11921          template results in an invalid type, type deduction fails.  */
11922       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11923       int i, len = TREE_VEC_LENGTH (tparms);
11924       tree converted_args;
11925       bool incomplete = false;
11926
11927       if (explicit_targs == error_mark_node)
11928         return 1;
11929
11930       converted_args
11931         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11932                                   /*require_all_args=*/false,
11933                                   /*use_default_args=*/false));
11934       if (converted_args == error_mark_node)
11935         return 1;
11936
11937       /* Substitute the explicit args into the function type.  This is
11938          necessary so that, for instance, explicitly declared function
11939          arguments can match null pointed constants.  If we were given
11940          an incomplete set of explicit args, we must not do semantic
11941          processing during substitution as we could create partial
11942          instantiations.  */
11943       for (i = 0; i < len; i++)
11944         {
11945           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11946           bool parameter_pack = false;
11947
11948           /* Dig out the actual parm.  */
11949           if (TREE_CODE (parm) == TYPE_DECL
11950               || TREE_CODE (parm) == TEMPLATE_DECL)
11951             {
11952               parm = TREE_TYPE (parm);
11953               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11954             }
11955           else if (TREE_CODE (parm) == PARM_DECL)
11956             {
11957               parm = DECL_INITIAL (parm);
11958               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11959             }
11960
11961           if (parameter_pack)
11962             {
11963               int level, idx;
11964               tree targ;
11965               template_parm_level_and_index (parm, &level, &idx);
11966
11967               /* Mark the argument pack as "incomplete". We could
11968                  still deduce more arguments during unification.  */
11969               targ = TMPL_ARG (converted_args, level, idx);
11970               if (targ)
11971                 {
11972                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11973                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11974                     = ARGUMENT_PACK_ARGS (targ);
11975                 }
11976
11977               /* We have some incomplete argument packs.  */
11978               incomplete_argument_packs_p = true;
11979             }
11980         }
11981
11982       if (incomplete_argument_packs_p)
11983         /* Any substitution is guaranteed to be incomplete if there
11984            are incomplete argument packs, because we can still deduce
11985            more arguments.  */
11986         incomplete = 1;
11987       else
11988         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11989
11990       processing_template_decl += incomplete;
11991       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11992       processing_template_decl -= incomplete;
11993
11994       if (fntype == error_mark_node)
11995         return 1;
11996
11997       /* Place the explicitly specified arguments in TARGS.  */
11998       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11999         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
12000     }
12001
12002   /* Never do unification on the 'this' parameter.  */
12003   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
12004
12005   if (return_type)
12006     {
12007       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
12008       args = tree_cons (NULL_TREE, return_type, args);
12009     }
12010
12011   /* We allow incomplete unification without an error message here
12012      because the standard doesn't seem to explicitly prohibit it.  Our
12013      callers must be ready to deal with unification failures in any
12014      event.  */
12015   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
12016                                   targs, parms, args, /*subr=*/0,
12017                                   strict, flags);
12018
12019   if (result == 0 && incomplete_argument_packs_p)
12020     {
12021       int i, len = NUM_TMPL_ARGS (targs);
12022
12023       /* Clear the "incomplete" flags on all argument packs.  */
12024       for (i = 0; i < len; i++)
12025         {
12026           tree arg = TREE_VEC_ELT (targs, i);
12027           if (ARGUMENT_PACK_P (arg))
12028             {
12029               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
12030               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
12031             }
12032         }
12033     }
12034
12035   /* Now that we have bindings for all of the template arguments,
12036      ensure that the arguments deduced for the template template
12037      parameters have compatible template parameter lists.  We cannot
12038      check this property before we have deduced all template
12039      arguments, because the template parameter types of a template
12040      template parameter might depend on prior template parameters
12041      deduced after the template template parameter.  The following
12042      ill-formed example illustrates this issue:
12043
12044        template<typename T, template<T> class C> void f(C<5>, T);
12045
12046        template<int N> struct X {};
12047
12048        void g() {
12049          f(X<5>(), 5l); // error: template argument deduction fails
12050        }
12051
12052      The template parameter list of 'C' depends on the template type
12053      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12054      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12055      time that we deduce 'C'.  */
12056   if (result == 0
12057       && !template_template_parm_bindings_ok_p 
12058            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12059     return 1;
12060
12061   if (result == 0)
12062     /* All is well so far.  Now, check:
12063
12064        [temp.deduct]
12065
12066        When all template arguments have been deduced, all uses of
12067        template parameters in nondeduced contexts are replaced with
12068        the corresponding deduced argument values.  If the
12069        substitution results in an invalid type, as described above,
12070        type deduction fails.  */
12071     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
12072         == error_mark_node)
12073       return 1;
12074
12075   return result;
12076 }
12077
12078 /* Adjust types before performing type deduction, as described in
12079    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12080    sections are symmetric.  PARM is the type of a function parameter
12081    or the return type of the conversion function.  ARG is the type of
12082    the argument passed to the call, or the type of the value
12083    initialized with the result of the conversion function.
12084    ARG_EXPR is the original argument expression, which may be null.  */
12085
12086 static int
12087 maybe_adjust_types_for_deduction (unification_kind_t strict,
12088                                   tree* parm,
12089                                   tree* arg,
12090                                   tree arg_expr)
12091 {
12092   int result = 0;
12093
12094   switch (strict)
12095     {
12096     case DEDUCE_CALL:
12097       break;
12098
12099     case DEDUCE_CONV:
12100       {
12101         /* Swap PARM and ARG throughout the remainder of this
12102            function; the handling is precisely symmetric since PARM
12103            will initialize ARG rather than vice versa.  */
12104         tree* temp = parm;
12105         parm = arg;
12106         arg = temp;
12107         break;
12108       }
12109
12110     case DEDUCE_EXACT:
12111       /* There is nothing to do in this case.  */
12112       return 0;
12113
12114     default:
12115       gcc_unreachable ();
12116     }
12117
12118   if (TREE_CODE (*parm) != REFERENCE_TYPE)
12119     {
12120       /* [temp.deduct.call]
12121
12122          If P is not a reference type:
12123
12124          --If A is an array type, the pointer type produced by the
12125          array-to-pointer standard conversion (_conv.array_) is
12126          used in place of A for type deduction; otherwise,
12127
12128          --If A is a function type, the pointer type produced by
12129          the function-to-pointer standard conversion
12130          (_conv.func_) is used in place of A for type deduction;
12131          otherwise,
12132
12133          --If A is a cv-qualified type, the top level
12134          cv-qualifiers of A's type are ignored for type
12135          deduction.  */
12136       if (TREE_CODE (*arg) == ARRAY_TYPE)
12137         *arg = build_pointer_type (TREE_TYPE (*arg));
12138       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
12139         *arg = build_pointer_type (*arg);
12140       else
12141         *arg = TYPE_MAIN_VARIANT (*arg);
12142     }
12143
12144   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
12145      of the form T&&, where T is a template parameter, and the argument
12146      is an lvalue, T is deduced as A& */
12147   if (TREE_CODE (*parm) == REFERENCE_TYPE
12148       && TYPE_REF_IS_RVALUE (*parm)
12149       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12150       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12151       && arg_expr && real_lvalue_p (arg_expr))
12152     *arg = build_reference_type (*arg);
12153
12154   /* [temp.deduct.call]
12155
12156      If P is a cv-qualified type, the top level cv-qualifiers
12157      of P's type are ignored for type deduction.  If P is a
12158      reference type, the type referred to by P is used for
12159      type deduction.  */
12160   *parm = TYPE_MAIN_VARIANT (*parm);
12161   if (TREE_CODE (*parm) == REFERENCE_TYPE)
12162     {
12163       *parm = TREE_TYPE (*parm);
12164       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12165     }
12166
12167   /* DR 322. For conversion deduction, remove a reference type on parm
12168      too (which has been swapped into ARG).  */
12169   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
12170     *arg = TREE_TYPE (*arg);
12171
12172   return result;
12173 }
12174
12175 /* Most parms like fn_type_unification.
12176
12177    If SUBR is 1, we're being called recursively (to unify the
12178    arguments of a function or method parameter of a function
12179    template). */
12180
12181 static int
12182 type_unification_real (tree tparms,
12183                        tree targs,
12184                        tree xparms,
12185                        tree xargs,
12186                        int subr,
12187                        unification_kind_t strict,
12188                        int flags)
12189 {
12190   tree parm, arg, arg_expr;
12191   int i;
12192   int ntparms = TREE_VEC_LENGTH (tparms);
12193   int sub_strict;
12194   int saw_undeduced = 0;
12195   tree parms, args;
12196
12197   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
12198   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
12199   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
12200   gcc_assert (ntparms > 0);
12201
12202   switch (strict)
12203     {
12204     case DEDUCE_CALL:
12205       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
12206                     | UNIFY_ALLOW_DERIVED);
12207       break;
12208
12209     case DEDUCE_CONV:
12210       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12211       break;
12212
12213     case DEDUCE_EXACT:
12214       sub_strict = UNIFY_ALLOW_NONE;
12215       break;
12216
12217     default:
12218       gcc_unreachable ();
12219     }
12220
12221  again:
12222   parms = xparms;
12223   args = xargs;
12224
12225   while (parms && parms != void_list_node
12226          && args && args != void_list_node)
12227     {
12228       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12229         break;
12230
12231       parm = TREE_VALUE (parms);
12232       parms = TREE_CHAIN (parms);
12233       arg = TREE_VALUE (args);
12234       args = TREE_CHAIN (args);
12235       arg_expr = NULL;
12236
12237       if (arg == error_mark_node)
12238         return 1;
12239       if (arg == unknown_type_node)
12240         /* We can't deduce anything from this, but we might get all the
12241            template args from other function args.  */
12242         continue;
12243
12244       /* Conversions will be performed on a function argument that
12245          corresponds with a function parameter that contains only
12246          non-deducible template parameters and explicitly specified
12247          template parameters.  */
12248       if (!uses_template_parms (parm))
12249         {
12250           tree type;
12251
12252           if (!TYPE_P (arg))
12253             type = TREE_TYPE (arg);
12254           else
12255             type = arg;
12256
12257           if (same_type_p (parm, type))
12258             continue;
12259           if (strict != DEDUCE_EXACT
12260               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
12261                                   flags))
12262             continue;
12263
12264           return 1;
12265         }
12266
12267       if (!TYPE_P (arg))
12268         {
12269           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12270           if (type_unknown_p (arg))
12271             {
12272               /* [temp.deduct.type] 
12273
12274                  A template-argument can be deduced from a pointer to
12275                  function or pointer to member function argument if
12276                  the set of overloaded functions does not contain
12277                  function templates and at most one of a set of
12278                  overloaded functions provides a unique match.  */
12279               if (resolve_overloaded_unification
12280                   (tparms, targs, parm, arg, strict, sub_strict))
12281                 continue;
12282
12283               return 1;
12284             }
12285           arg_expr = arg;
12286           arg = unlowered_expr_type (arg);
12287           if (arg == error_mark_node)
12288             return 1;
12289         }
12290
12291       {
12292         int arg_strict = sub_strict;
12293
12294         if (!subr)
12295           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
12296                                                           arg_expr);
12297
12298         if (arg == init_list_type_node && arg_expr)
12299           arg = arg_expr;
12300         if (unify (tparms, targs, parm, arg, arg_strict))
12301           return 1;
12302       }
12303     }
12304
12305
12306   if (parms 
12307       && parms != void_list_node
12308       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12309     {
12310       /* Unify the remaining arguments with the pack expansion type.  */
12311       tree argvec;
12312       tree parmvec = make_tree_vec (1);
12313       int len = 0;
12314       tree t;
12315
12316       /* Count the number of arguments that remain.  */
12317       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12318         len++;
12319         
12320       /* Allocate a TREE_VEC and copy in all of the arguments */ 
12321       argvec = make_tree_vec (len);
12322       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12323         {
12324           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12325           ++i;
12326         }
12327
12328       /* Copy the parameter into parmvec.  */
12329       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12330       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12331                                 /*call_args_p=*/true, /*subr=*/subr))
12332         return 1;
12333
12334       /* Advance to the end of the list of parameters.  */
12335       parms = TREE_CHAIN (parms);
12336     }
12337
12338   /* Fail if we've reached the end of the parm list, and more args
12339      are present, and the parm list isn't variadic.  */
12340   if (args && args != void_list_node && parms == void_list_node)
12341     return 1;
12342   /* Fail if parms are left and they don't have default values.  */
12343   if (parms && parms != void_list_node
12344       && TREE_PURPOSE (parms) == NULL_TREE)
12345     return 1;
12346
12347   if (!subr)
12348     for (i = 0; i < ntparms; i++)
12349       if (!TREE_VEC_ELT (targs, i))
12350         {
12351           tree tparm;
12352
12353           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12354             continue;
12355
12356           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12357
12358           /* If this is an undeduced nontype parameter that depends on
12359              a type parameter, try another pass; its type may have been
12360              deduced from a later argument than the one from which
12361              this parameter can be deduced.  */
12362           if (TREE_CODE (tparm) == PARM_DECL
12363               && uses_template_parms (TREE_TYPE (tparm))
12364               && !saw_undeduced++)
12365             goto again;
12366
12367           /* Core issue #226 (C++0x) [temp.deduct]:
12368
12369                If a template argument has not been deduced, its
12370                default template argument, if any, is used. 
12371
12372              When we are in C++98 mode, TREE_PURPOSE will either
12373              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12374              to explicitly check cxx_dialect here.  */
12375           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12376             {
12377               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12378                                  targs, tf_none, NULL_TREE);
12379               if (arg == error_mark_node)
12380                 return 1;
12381               else
12382                 {
12383                   TREE_VEC_ELT (targs, i) = arg;
12384                   continue;
12385                 }
12386             }
12387
12388           /* If the type parameter is a parameter pack, then it will
12389              be deduced to an empty parameter pack.  */
12390           if (template_parameter_pack_p (tparm))
12391             {
12392               tree arg;
12393
12394               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12395                 {
12396                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12397                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12398                   TREE_CONSTANT (arg) = 1;
12399                 }
12400               else
12401                 arg = make_node (TYPE_ARGUMENT_PACK);
12402
12403               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12404
12405               TREE_VEC_ELT (targs, i) = arg;
12406               continue;
12407             }
12408
12409           return 2;
12410         }
12411
12412   return 0;
12413 }
12414
12415 /* Subroutine of type_unification_real.  Args are like the variables
12416    at the call site.  ARG is an overloaded function (or template-id);
12417    we try deducing template args from each of the overloads, and if
12418    only one succeeds, we go with that.  Modifies TARGS and returns
12419    true on success.  */
12420
12421 static bool
12422 resolve_overloaded_unification (tree tparms,
12423                                 tree targs,
12424                                 tree parm,
12425                                 tree arg,
12426                                 unification_kind_t strict,
12427                                 int sub_strict)
12428 {
12429   tree tempargs = copy_node (targs);
12430   int good = 0;
12431   bool addr_p;
12432
12433   if (TREE_CODE (arg) == ADDR_EXPR)
12434     {
12435       arg = TREE_OPERAND (arg, 0);
12436       addr_p = true;
12437     }
12438   else
12439     addr_p = false;
12440
12441   if (TREE_CODE (arg) == COMPONENT_REF)
12442     /* Handle `&x' where `x' is some static or non-static member
12443        function name.  */
12444     arg = TREE_OPERAND (arg, 1);
12445
12446   if (TREE_CODE (arg) == OFFSET_REF)
12447     arg = TREE_OPERAND (arg, 1);
12448
12449   /* Strip baselink information.  */
12450   if (BASELINK_P (arg))
12451     arg = BASELINK_FUNCTIONS (arg);
12452
12453   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12454     {
12455       /* If we got some explicit template args, we need to plug them into
12456          the affected templates before we try to unify, in case the
12457          explicit args will completely resolve the templates in question.  */
12458
12459       tree expl_subargs = TREE_OPERAND (arg, 1);
12460       arg = TREE_OPERAND (arg, 0);
12461
12462       for (; arg; arg = OVL_NEXT (arg))
12463         {
12464           tree fn = OVL_CURRENT (arg);
12465           tree subargs, elem;
12466
12467           if (TREE_CODE (fn) != TEMPLATE_DECL)
12468             continue;
12469
12470           ++processing_template_decl;
12471           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12472                                   expl_subargs, /*check_ret=*/false);
12473           if (subargs)
12474             {
12475               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12476               good += try_one_overload (tparms, targs, tempargs, parm,
12477                                         elem, strict, sub_strict, addr_p);
12478             }
12479           --processing_template_decl;
12480         }
12481     }
12482   else if (TREE_CODE (arg) != OVERLOAD
12483            && TREE_CODE (arg) != FUNCTION_DECL)
12484     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12485        -- but the deduction does not succeed because the expression is
12486        not just the function on its own.  */
12487     return false;
12488   else
12489     for (; arg; arg = OVL_NEXT (arg))
12490       good += try_one_overload (tparms, targs, tempargs, parm,
12491                                 TREE_TYPE (OVL_CURRENT (arg)),
12492                                 strict, sub_strict, addr_p);
12493
12494   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12495      to function or pointer to member function argument if the set of
12496      overloaded functions does not contain function templates and at most
12497      one of a set of overloaded functions provides a unique match.
12498
12499      So if we found multiple possibilities, we return success but don't
12500      deduce anything.  */
12501
12502   if (good == 1)
12503     {
12504       int i = TREE_VEC_LENGTH (targs);
12505       for (; i--; )
12506         if (TREE_VEC_ELT (tempargs, i))
12507           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12508     }
12509   if (good)
12510     return true;
12511
12512   return false;
12513 }
12514
12515 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12516    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12517    different overloads deduce different arguments for a given parm.
12518    ADDR_P is true if the expression for which deduction is being
12519    performed was of the form "& fn" rather than simply "fn".
12520
12521    Returns 1 on success.  */
12522
12523 static int
12524 try_one_overload (tree tparms,
12525                   tree orig_targs,
12526                   tree targs,
12527                   tree parm,
12528                   tree arg,
12529                   unification_kind_t strict,
12530                   int sub_strict,
12531                   bool addr_p)
12532 {
12533   int nargs;
12534   tree tempargs;
12535   int i;
12536
12537   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12538      to function or pointer to member function argument if the set of
12539      overloaded functions does not contain function templates and at most
12540      one of a set of overloaded functions provides a unique match.
12541
12542      So if this is a template, just return success.  */
12543
12544   if (uses_template_parms (arg))
12545     return 1;
12546
12547   if (TREE_CODE (arg) == METHOD_TYPE)
12548     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12549   else if (addr_p)
12550     arg = build_pointer_type (arg);
12551
12552   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12553
12554   /* We don't copy orig_targs for this because if we have already deduced
12555      some template args from previous args, unify would complain when we
12556      try to deduce a template parameter for the same argument, even though
12557      there isn't really a conflict.  */
12558   nargs = TREE_VEC_LENGTH (targs);
12559   tempargs = make_tree_vec (nargs);
12560
12561   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12562     return 0;
12563
12564   /* First make sure we didn't deduce anything that conflicts with
12565      explicitly specified args.  */
12566   for (i = nargs; i--; )
12567     {
12568       tree elt = TREE_VEC_ELT (tempargs, i);
12569       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12570
12571       if (!elt)
12572         /*NOP*/;
12573       else if (uses_template_parms (elt))
12574         /* Since we're unifying against ourselves, we will fill in
12575            template args used in the function parm list with our own
12576            template parms.  Discard them.  */
12577         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12578       else if (oldelt && !template_args_equal (oldelt, elt))
12579         return 0;
12580     }
12581
12582   for (i = nargs; i--; )
12583     {
12584       tree elt = TREE_VEC_ELT (tempargs, i);
12585
12586       if (elt)
12587         TREE_VEC_ELT (targs, i) = elt;
12588     }
12589
12590   return 1;
12591 }
12592
12593 /* PARM is a template class (perhaps with unbound template
12594    parameters).  ARG is a fully instantiated type.  If ARG can be
12595    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12596    TARGS are as for unify.  */
12597
12598 static tree
12599 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12600 {
12601   tree copy_of_targs;
12602
12603   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12604       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12605           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12606     return NULL_TREE;
12607
12608   /* We need to make a new template argument vector for the call to
12609      unify.  If we used TARGS, we'd clutter it up with the result of
12610      the attempted unification, even if this class didn't work out.
12611      We also don't want to commit ourselves to all the unifications
12612      we've already done, since unification is supposed to be done on
12613      an argument-by-argument basis.  In other words, consider the
12614      following pathological case:
12615
12616        template <int I, int J, int K>
12617        struct S {};
12618
12619        template <int I, int J>
12620        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12621
12622        template <int I, int J, int K>
12623        void f(S<I, J, K>, S<I, I, I>);
12624
12625        void g() {
12626          S<0, 0, 0> s0;
12627          S<0, 1, 2> s2;
12628
12629          f(s0, s2);
12630        }
12631
12632      Now, by the time we consider the unification involving `s2', we
12633      already know that we must have `f<0, 0, 0>'.  But, even though
12634      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12635      because there are two ways to unify base classes of S<0, 1, 2>
12636      with S<I, I, I>.  If we kept the already deduced knowledge, we
12637      would reject the possibility I=1.  */
12638   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12639
12640   /* If unification failed, we're done.  */
12641   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12642              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12643     return NULL_TREE;
12644
12645   return arg;
12646 }
12647
12648 /* Given a template type PARM and a class type ARG, find the unique
12649    base type in ARG that is an instance of PARM.  We do not examine
12650    ARG itself; only its base-classes.  If there is not exactly one
12651    appropriate base class, return NULL_TREE.  PARM may be the type of
12652    a partial specialization, as well as a plain template type.  Used
12653    by unify.  */
12654
12655 static tree
12656 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12657 {
12658   tree rval = NULL_TREE;
12659   tree binfo;
12660
12661   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
12662
12663   binfo = TYPE_BINFO (complete_type (arg));
12664   if (!binfo)
12665     /* The type could not be completed.  */
12666     return NULL_TREE;
12667
12668   /* Walk in inheritance graph order.  The search order is not
12669      important, and this avoids multiple walks of virtual bases.  */
12670   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12671     {
12672       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12673
12674       if (r)
12675         {
12676           /* If there is more than one satisfactory baseclass, then:
12677
12678                [temp.deduct.call]
12679
12680               If they yield more than one possible deduced A, the type
12681               deduction fails.
12682
12683              applies.  */
12684           if (rval && !same_type_p (r, rval))
12685             return NULL_TREE;
12686
12687           rval = r;
12688         }
12689     }
12690
12691   return rval;
12692 }
12693
12694 /* Returns the level of DECL, which declares a template parameter.  */
12695
12696 static int
12697 template_decl_level (tree decl)
12698 {
12699   switch (TREE_CODE (decl))
12700     {
12701     case TYPE_DECL:
12702     case TEMPLATE_DECL:
12703       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12704
12705     case PARM_DECL:
12706       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12707
12708     default:
12709       gcc_unreachable ();
12710     }
12711   return 0;
12712 }
12713
12714 /* Decide whether ARG can be unified with PARM, considering only the
12715    cv-qualifiers of each type, given STRICT as documented for unify.
12716    Returns nonzero iff the unification is OK on that basis.  */
12717
12718 static int
12719 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12720 {
12721   int arg_quals = cp_type_quals (arg);
12722   int parm_quals = cp_type_quals (parm);
12723
12724   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12725       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12726     {
12727       /*  Although a CVR qualifier is ignored when being applied to a
12728           substituted template parameter ([8.3.2]/1 for example), that
12729           does not apply during deduction [14.8.2.4]/1, (even though
12730           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12731           this).  Except when we're allowing additional CV qualifiers
12732           at the outer level [14.8.2.1]/3,1st bullet.  */
12733       if ((TREE_CODE (arg) == REFERENCE_TYPE
12734            || TREE_CODE (arg) == FUNCTION_TYPE
12735            || TREE_CODE (arg) == METHOD_TYPE)
12736           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12737         return 0;
12738
12739       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12740           && (parm_quals & TYPE_QUAL_RESTRICT))
12741         return 0;
12742     }
12743
12744   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12745       && (arg_quals & parm_quals) != parm_quals)
12746     return 0;
12747
12748   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12749       && (parm_quals & arg_quals) != arg_quals)
12750     return 0;
12751
12752   return 1;
12753 }
12754
12755 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12756 void 
12757 template_parm_level_and_index (tree parm, int* level, int* index)
12758 {
12759   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12760       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12761       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12762     {
12763       *index = TEMPLATE_TYPE_IDX (parm);
12764       *level = TEMPLATE_TYPE_LEVEL (parm);
12765     }
12766   else
12767     {
12768       *index = TEMPLATE_PARM_IDX (parm);
12769       *level = TEMPLATE_PARM_LEVEL (parm);
12770     }
12771 }
12772
12773 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12774    expansion at the end of PACKED_PARMS. Returns 0 if the type
12775    deduction succeeds, 1 otherwise. STRICT is the same as in
12776    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12777    call argument list. We'll need to adjust the arguments to make them
12778    types. SUBR tells us if this is from a recursive call to
12779    type_unification_real.  */
12780 int
12781 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12782                       tree packed_args, int strict, bool call_args_p,
12783                       bool subr)
12784 {
12785   tree parm 
12786     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12787   tree pattern = PACK_EXPANSION_PATTERN (parm);
12788   tree pack, packs = NULL_TREE;
12789   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12790   int len = TREE_VEC_LENGTH (packed_args);
12791
12792   /* Determine the parameter packs we will be deducing from the
12793      pattern, and record their current deductions.  */
12794   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12795        pack; pack = TREE_CHAIN (pack))
12796     {
12797       tree parm_pack = TREE_VALUE (pack);
12798       int idx, level;
12799
12800       /* Determine the index and level of this parameter pack.  */
12801       template_parm_level_and_index (parm_pack, &level, &idx);
12802
12803       /* Keep track of the parameter packs and their corresponding
12804          argument packs.  */
12805       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12806       TREE_TYPE (packs) = make_tree_vec (len - start);
12807     }
12808   
12809   /* Loop through all of the arguments that have not yet been
12810      unified and unify each with the pattern.  */
12811   for (i = start; i < len; i++)
12812     {
12813       tree parm = pattern;
12814
12815       /* For each parameter pack, clear out the deduced value so that
12816          we can deduce it again.  */
12817       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12818         {
12819           int idx, level;
12820           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12821
12822           TMPL_ARG (targs, level, idx) = NULL_TREE;
12823         }
12824
12825       /* Unify the pattern with the current argument.  */
12826       {
12827         tree arg = TREE_VEC_ELT (packed_args, i);
12828         tree arg_expr = NULL_TREE;
12829         int arg_strict = strict;
12830         bool skip_arg_p = false;
12831
12832         if (call_args_p)
12833           {
12834             int sub_strict;
12835
12836             /* This mirrors what we do in type_unification_real.  */
12837             switch (strict)
12838               {
12839               case DEDUCE_CALL:
12840                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12841                               | UNIFY_ALLOW_MORE_CV_QUAL
12842                               | UNIFY_ALLOW_DERIVED);
12843                 break;
12844                 
12845               case DEDUCE_CONV:
12846                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12847                 break;
12848                 
12849               case DEDUCE_EXACT:
12850                 sub_strict = UNIFY_ALLOW_NONE;
12851                 break;
12852                 
12853               default:
12854                 gcc_unreachable ();
12855               }
12856
12857             if (!TYPE_P (arg))
12858               {
12859                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12860                 if (type_unknown_p (arg))
12861                   {
12862                     /* [temp.deduct.type] A template-argument can be
12863                        deduced from a pointer to function or pointer
12864                        to member function argument if the set of
12865                        overloaded functions does not contain function
12866                        templates and at most one of a set of
12867                        overloaded functions provides a unique
12868                        match.  */
12869
12870                     if (resolve_overloaded_unification
12871                         (tparms, targs, parm, arg, strict, sub_strict)
12872                         != 0)
12873                       return 1;
12874                     skip_arg_p = true;
12875                   }
12876
12877                 if (!skip_arg_p)
12878                   {
12879                     arg_expr = arg;
12880                     arg = unlowered_expr_type (arg);
12881                     if (arg == error_mark_node)
12882                       return 1;
12883                   }
12884               }
12885       
12886             arg_strict = sub_strict;
12887
12888             if (!subr)
12889               arg_strict |= 
12890                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12891                                                   arg_expr);
12892           }
12893
12894         if (!skip_arg_p)
12895           {
12896             if (unify (tparms, targs, parm, arg, arg_strict))
12897               return 1;
12898           }
12899       }
12900
12901       /* For each parameter pack, collect the deduced value.  */
12902       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12903         {
12904           int idx, level;
12905           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12906
12907           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12908             TMPL_ARG (targs, level, idx);
12909         }
12910     }
12911
12912   /* Verify that the results of unification with the parameter packs
12913      produce results consistent with what we've seen before, and make
12914      the deduced argument packs available.  */
12915   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12916     {
12917       tree old_pack = TREE_VALUE (pack);
12918       tree new_args = TREE_TYPE (pack);
12919       int i, len = TREE_VEC_LENGTH (new_args);
12920       bool nondeduced_p = false;
12921
12922       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12923          actually deduce anything.  */
12924       for (i = 0; i < len && !nondeduced_p; ++i)
12925         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12926           nondeduced_p = true;
12927       if (nondeduced_p)
12928         continue;
12929
12930       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12931         {
12932           /* Prepend the explicit arguments onto NEW_ARGS.  */
12933           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12934           tree old_args = new_args;
12935           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12936           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12937
12938           /* Copy the explicit arguments.  */
12939           new_args = make_tree_vec (len);
12940           for (i = 0; i < explicit_len; i++)
12941             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12942
12943           /* Copy the deduced arguments.  */
12944           for (; i < len; i++)
12945             TREE_VEC_ELT (new_args, i) =
12946               TREE_VEC_ELT (old_args, i - explicit_len);
12947         }
12948
12949       if (!old_pack)
12950         {
12951           tree result;
12952           int idx, level;
12953           
12954           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12955
12956           /* Build the deduced *_ARGUMENT_PACK.  */
12957           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12958             {
12959               result = make_node (NONTYPE_ARGUMENT_PACK);
12960               TREE_TYPE (result) = 
12961                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12962               TREE_CONSTANT (result) = 1;
12963             }
12964           else
12965             result = make_node (TYPE_ARGUMENT_PACK);
12966
12967           SET_ARGUMENT_PACK_ARGS (result, new_args);
12968
12969           /* Note the deduced argument packs for this parameter
12970              pack.  */
12971           TMPL_ARG (targs, level, idx) = result;
12972         }
12973       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12974                && (ARGUMENT_PACK_ARGS (old_pack) 
12975                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12976         {
12977           /* We only had the explicitly-provided arguments before, but
12978              now we have a complete set of arguments.  */
12979           int idx, level;
12980           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12981           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12982
12983           /* Keep the original deduced argument pack.  */
12984           TMPL_ARG (targs, level, idx) = old_pack;
12985
12986           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12987           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12988           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12989         }
12990       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12991                                     new_args))
12992         /* Inconsistent unification of this parameter pack.  */
12993         return 1;
12994       else
12995         {
12996           int idx, level;
12997           
12998           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12999
13000           /* Keep the original deduced argument pack.  */
13001           TMPL_ARG (targs, level, idx) = old_pack;
13002         }
13003     }
13004
13005   return 0;
13006 }
13007
13008 /* Deduce the value of template parameters.  TPARMS is the (innermost)
13009    set of template parameters to a template.  TARGS is the bindings
13010    for those template parameters, as determined thus far; TARGS may
13011    include template arguments for outer levels of template parameters
13012    as well.  PARM is a parameter to a template function, or a
13013    subcomponent of that parameter; ARG is the corresponding argument.
13014    This function attempts to match PARM with ARG in a manner
13015    consistent with the existing assignments in TARGS.  If more values
13016    are deduced, then TARGS is updated.
13017
13018    Returns 0 if the type deduction succeeds, 1 otherwise.  The
13019    parameter STRICT is a bitwise or of the following flags:
13020
13021      UNIFY_ALLOW_NONE:
13022        Require an exact match between PARM and ARG.
13023      UNIFY_ALLOW_MORE_CV_QUAL:
13024        Allow the deduced ARG to be more cv-qualified (by qualification
13025        conversion) than ARG.
13026      UNIFY_ALLOW_LESS_CV_QUAL:
13027        Allow the deduced ARG to be less cv-qualified than ARG.
13028      UNIFY_ALLOW_DERIVED:
13029        Allow the deduced ARG to be a template base class of ARG,
13030        or a pointer to a template base class of the type pointed to by
13031        ARG.
13032      UNIFY_ALLOW_INTEGER:
13033        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
13034        case for more information.
13035      UNIFY_ALLOW_OUTER_LEVEL:
13036        This is the outermost level of a deduction. Used to determine validity
13037        of qualification conversions. A valid qualification conversion must
13038        have const qualified pointers leading up to the inner type which
13039        requires additional CV quals, except at the outer level, where const
13040        is not required [conv.qual]. It would be normal to set this flag in
13041        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
13042      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
13043        This is the outermost level of a deduction, and PARM can be more CV
13044        qualified at this point.
13045      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
13046        This is the outermost level of a deduction, and PARM can be less CV
13047        qualified at this point.  */
13048
13049 static int
13050 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
13051 {
13052   int idx;
13053   tree targ;
13054   tree tparm;
13055   int strict_in = strict;
13056
13057   /* I don't think this will do the right thing with respect to types.
13058      But the only case I've seen it in so far has been array bounds, where
13059      signedness is the only information lost, and I think that will be
13060      okay.  */
13061   while (TREE_CODE (parm) == NOP_EXPR)
13062     parm = TREE_OPERAND (parm, 0);
13063
13064   if (arg == error_mark_node)
13065     return 1;
13066   if (arg == unknown_type_node
13067       || arg == init_list_type_node)
13068     /* We can't deduce anything from this, but we might get all the
13069        template args from other function args.  */
13070     return 0;
13071
13072   /* If PARM uses template parameters, then we can't bail out here,
13073      even if ARG == PARM, since we won't record unifications for the
13074      template parameters.  We might need them if we're trying to
13075      figure out which of two things is more specialized.  */
13076   if (arg == parm && !uses_template_parms (parm))
13077     return 0;
13078
13079   /* Handle init lists early, so the rest of the function can assume
13080      we're dealing with a type. */
13081   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
13082     {
13083       tree elt, elttype;
13084       unsigned i;
13085
13086       if (!is_std_init_list (parm))
13087         /* We can only deduce from an initializer list argument if the
13088            parameter is std::initializer_list; otherwise this is a
13089            non-deduced context. */
13090         return 0;
13091
13092       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
13093
13094       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
13095         {
13096           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
13097             elt = TREE_TYPE (elt);
13098           if (unify (tparms, targs, elttype, elt, UNIFY_ALLOW_NONE))
13099             return 1;
13100         }
13101       return 0;
13102     }
13103
13104   /* Immediately reject some pairs that won't unify because of
13105      cv-qualification mismatches.  */
13106   if (TREE_CODE (arg) == TREE_CODE (parm)
13107       && TYPE_P (arg)
13108       /* It is the elements of the array which hold the cv quals of an array
13109          type, and the elements might be template type parms. We'll check
13110          when we recurse.  */
13111       && TREE_CODE (arg) != ARRAY_TYPE
13112       /* We check the cv-qualifiers when unifying with template type
13113          parameters below.  We want to allow ARG `const T' to unify with
13114          PARM `T' for example, when computing which of two templates
13115          is more specialized, for example.  */
13116       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
13117       && !check_cv_quals_for_unify (strict_in, arg, parm))
13118     return 1;
13119
13120   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
13121       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
13122     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
13123   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
13124   strict &= ~UNIFY_ALLOW_DERIVED;
13125   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13126   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
13127
13128   switch (TREE_CODE (parm))
13129     {
13130     case TYPENAME_TYPE:
13131     case SCOPE_REF:
13132     case UNBOUND_CLASS_TEMPLATE:
13133       /* In a type which contains a nested-name-specifier, template
13134          argument values cannot be deduced for template parameters used
13135          within the nested-name-specifier.  */
13136       return 0;
13137
13138     case TEMPLATE_TYPE_PARM:
13139     case TEMPLATE_TEMPLATE_PARM:
13140     case BOUND_TEMPLATE_TEMPLATE_PARM:
13141       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13142       if (tparm == error_mark_node)
13143         return 1;
13144
13145       if (TEMPLATE_TYPE_LEVEL (parm)
13146           != template_decl_level (tparm))
13147         /* The PARM is not one we're trying to unify.  Just check
13148            to see if it matches ARG.  */
13149         return (TREE_CODE (arg) == TREE_CODE (parm)
13150                 && same_type_p (parm, arg)) ? 0 : 1;
13151       idx = TEMPLATE_TYPE_IDX (parm);
13152       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13153       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
13154
13155       /* Check for mixed types and values.  */
13156       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13157            && TREE_CODE (tparm) != TYPE_DECL)
13158           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13159               && TREE_CODE (tparm) != TEMPLATE_DECL))
13160         return 1;
13161
13162       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13163         {
13164           /* ARG must be constructed from a template class or a template
13165              template parameter.  */
13166           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
13167               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
13168             return 1;
13169
13170           {
13171             tree parmvec = TYPE_TI_ARGS (parm);
13172             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
13173             tree parm_parms 
13174               = DECL_INNERMOST_TEMPLATE_PARMS
13175                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
13176             int i, len;
13177             int parm_variadic_p = 0;
13178
13179             /* The resolution to DR150 makes clear that default
13180                arguments for an N-argument may not be used to bind T
13181                to a template template parameter with fewer than N
13182                parameters.  It is not safe to permit the binding of
13183                default arguments as an extension, as that may change
13184                the meaning of a conforming program.  Consider:
13185
13186                   struct Dense { static const unsigned int dim = 1; };
13187
13188                   template <template <typename> class View,
13189                             typename Block>
13190                   void operator+(float, View<Block> const&);
13191
13192                   template <typename Block,
13193                             unsigned int Dim = Block::dim>
13194                   struct Lvalue_proxy { operator float() const; };
13195
13196                   void
13197                   test_1d (void) {
13198                     Lvalue_proxy<Dense> p;
13199                     float b;
13200                     b + p;
13201                   }
13202
13203               Here, if Lvalue_proxy is permitted to bind to View, then
13204               the global operator+ will be used; if they are not, the
13205               Lvalue_proxy will be converted to float.  */
13206             if (coerce_template_parms (parm_parms,
13207                                        argvec,
13208                                        TYPE_TI_TEMPLATE (parm),
13209                                        tf_none,
13210                                        /*require_all_args=*/true,
13211                                        /*use_default_args=*/false)
13212                 == error_mark_node)
13213               return 1;
13214
13215             /* Deduce arguments T, i from TT<T> or TT<i>.
13216                We check each element of PARMVEC and ARGVEC individually
13217                rather than the whole TREE_VEC since they can have
13218                different number of elements.  */
13219
13220             parmvec = expand_template_argument_pack (parmvec);
13221             argvec = expand_template_argument_pack (argvec);
13222
13223             len = TREE_VEC_LENGTH (parmvec);
13224
13225             /* Check if the parameters end in a pack, making them
13226                variadic.  */
13227             if (len > 0
13228                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
13229               parm_variadic_p = 1;
13230             
13231             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
13232               return 1;
13233
13234              for (i = 0; i < len - parm_variadic_p; ++i)
13235               {
13236                 if (unify (tparms, targs,
13237                            TREE_VEC_ELT (parmvec, i),
13238                            TREE_VEC_ELT (argvec, i),
13239                            UNIFY_ALLOW_NONE))
13240                   return 1;
13241               }
13242
13243             if (parm_variadic_p
13244                 && unify_pack_expansion (tparms, targs,
13245                                          parmvec, argvec,
13246                                          UNIFY_ALLOW_NONE,
13247                                          /*call_args_p=*/false,
13248                                          /*subr=*/false))
13249               return 1;
13250           }
13251           arg = TYPE_TI_TEMPLATE (arg);
13252
13253           /* Fall through to deduce template name.  */
13254         }
13255
13256       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13257           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13258         {
13259           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
13260
13261           /* Simple cases: Value already set, does match or doesn't.  */
13262           if (targ != NULL_TREE && template_args_equal (targ, arg))
13263             return 0;
13264           else if (targ)
13265             return 1;
13266         }
13267       else
13268         {
13269           /* If PARM is `const T' and ARG is only `int', we don't have
13270              a match unless we are allowing additional qualification.
13271              If ARG is `const int' and PARM is just `T' that's OK;
13272              that binds `const int' to `T'.  */
13273           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
13274                                          arg, parm))
13275             return 1;
13276
13277           /* Consider the case where ARG is `const volatile int' and
13278              PARM is `const T'.  Then, T should be `volatile int'.  */
13279           arg = cp_build_qualified_type_real
13280             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
13281           if (arg == error_mark_node)
13282             return 1;
13283
13284           /* Simple cases: Value already set, does match or doesn't.  */
13285           if (targ != NULL_TREE && same_type_p (targ, arg))
13286             return 0;
13287           else if (targ)
13288             return 1;
13289
13290           /* Make sure that ARG is not a variable-sized array.  (Note
13291              that were talking about variable-sized arrays (like
13292              `int[n]'), rather than arrays of unknown size (like
13293              `int[]').)  We'll get very confused by such a type since
13294              the bound of the array will not be computable in an
13295              instantiation.  Besides, such types are not allowed in
13296              ISO C++, so we can do as we please here.  */
13297           if (variably_modified_type_p (arg, NULL_TREE))
13298             return 1;
13299         }
13300
13301       /* If ARG is a parameter pack or an expansion, we cannot unify
13302          against it unless PARM is also a parameter pack.  */
13303       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13304           && !template_parameter_pack_p (parm))
13305         return 1;
13306
13307       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13308       return 0;
13309
13310     case TEMPLATE_PARM_INDEX:
13311       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13312       if (tparm == error_mark_node)
13313         return 1;
13314
13315       if (TEMPLATE_PARM_LEVEL (parm)
13316           != template_decl_level (tparm))
13317         /* The PARM is not one we're trying to unify.  Just check
13318            to see if it matches ARG.  */
13319         return !(TREE_CODE (arg) == TREE_CODE (parm)
13320                  && cp_tree_equal (parm, arg));
13321
13322       idx = TEMPLATE_PARM_IDX (parm);
13323       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13324
13325       if (targ)
13326         return !cp_tree_equal (targ, arg);
13327
13328       /* [temp.deduct.type] If, in the declaration of a function template
13329          with a non-type template-parameter, the non-type
13330          template-parameter is used in an expression in the function
13331          parameter-list and, if the corresponding template-argument is
13332          deduced, the template-argument type shall match the type of the
13333          template-parameter exactly, except that a template-argument
13334          deduced from an array bound may be of any integral type.
13335          The non-type parameter might use already deduced type parameters.  */
13336       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
13337       if (!TREE_TYPE (arg))
13338         /* Template-parameter dependent expression.  Just accept it for now.
13339            It will later be processed in convert_template_argument.  */
13340         ;
13341       else if (same_type_p (TREE_TYPE (arg), tparm))
13342         /* OK */;
13343       else if ((strict & UNIFY_ALLOW_INTEGER)
13344                && (TREE_CODE (tparm) == INTEGER_TYPE
13345                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
13346         /* Convert the ARG to the type of PARM; the deduced non-type
13347            template argument must exactly match the types of the
13348            corresponding parameter.  */
13349         arg = fold (build_nop (TREE_TYPE (parm), arg));
13350       else if (uses_template_parms (tparm))
13351         /* We haven't deduced the type of this parameter yet.  Try again
13352            later.  */
13353         return 0;
13354       else
13355         return 1;
13356
13357       /* If ARG is a parameter pack or an expansion, we cannot unify
13358          against it unless PARM is also a parameter pack.  */
13359       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13360           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13361         return 1;
13362
13363       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13364       return 0;
13365
13366     case PTRMEM_CST:
13367      {
13368         /* A pointer-to-member constant can be unified only with
13369          another constant.  */
13370       if (TREE_CODE (arg) != PTRMEM_CST)
13371         return 1;
13372
13373       /* Just unify the class member. It would be useless (and possibly
13374          wrong, depending on the strict flags) to unify also
13375          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13376          arg refer to the same variable, even if through different
13377          classes. For instance:
13378
13379          struct A { int x; };
13380          struct B : A { };
13381
13382          Unification of &A::x and &B::x must succeed.  */
13383       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13384                     PTRMEM_CST_MEMBER (arg), strict);
13385      }
13386
13387     case POINTER_TYPE:
13388       {
13389         if (TREE_CODE (arg) != POINTER_TYPE)
13390           return 1;
13391
13392         /* [temp.deduct.call]
13393
13394            A can be another pointer or pointer to member type that can
13395            be converted to the deduced A via a qualification
13396            conversion (_conv.qual_).
13397
13398            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13399            This will allow for additional cv-qualification of the
13400            pointed-to types if appropriate.  */
13401
13402         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13403           /* The derived-to-base conversion only persists through one
13404              level of pointers.  */
13405           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13406
13407         return unify (tparms, targs, TREE_TYPE (parm),
13408                       TREE_TYPE (arg), strict);
13409       }
13410
13411     case REFERENCE_TYPE:
13412       if (TREE_CODE (arg) != REFERENCE_TYPE)
13413         return 1;
13414       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13415                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13416
13417     case ARRAY_TYPE:
13418       if (TREE_CODE (arg) != ARRAY_TYPE)
13419         return 1;
13420       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13421           != (TYPE_DOMAIN (arg) == NULL_TREE))
13422         return 1;
13423       if (TYPE_DOMAIN (parm) != NULL_TREE)
13424         {
13425           tree parm_max;
13426           tree arg_max;
13427           bool parm_cst;
13428           bool arg_cst;
13429
13430           /* Our representation of array types uses "N - 1" as the
13431              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13432              not an integer constant.  We cannot unify arbitrarily
13433              complex expressions, so we eliminate the MINUS_EXPRs
13434              here.  */
13435           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13436           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13437           if (!parm_cst)
13438             {
13439               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13440               parm_max = TREE_OPERAND (parm_max, 0);
13441             }
13442           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13443           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13444           if (!arg_cst)
13445             {
13446               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13447                  trying to unify the type of a variable with the type
13448                  of a template parameter.  For example:
13449
13450                    template <unsigned int N>
13451                    void f (char (&) [N]);
13452                    int g(); 
13453                    void h(int i) {
13454                      char a[g(i)];
13455                      f(a); 
13456                    }
13457
13458                 Here, the type of the ARG will be "int [g(i)]", and
13459                 may be a SAVE_EXPR, etc.  */
13460               if (TREE_CODE (arg_max) != MINUS_EXPR)
13461                 return 1;
13462               arg_max = TREE_OPERAND (arg_max, 0);
13463             }
13464
13465           /* If only one of the bounds used a MINUS_EXPR, compensate
13466              by adding one to the other bound.  */
13467           if (parm_cst && !arg_cst)
13468             parm_max = fold_build2 (PLUS_EXPR,
13469                                     integer_type_node,
13470                                     parm_max,
13471                                     integer_one_node);
13472           else if (arg_cst && !parm_cst)
13473             arg_max = fold_build2 (PLUS_EXPR,
13474                                    integer_type_node,
13475                                    arg_max,
13476                                    integer_one_node);
13477
13478           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13479             return 1;
13480         }
13481       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13482                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13483
13484     case REAL_TYPE:
13485     case COMPLEX_TYPE:
13486     case VECTOR_TYPE:
13487     case INTEGER_TYPE:
13488     case BOOLEAN_TYPE:
13489     case ENUMERAL_TYPE:
13490     case VOID_TYPE:
13491       if (TREE_CODE (arg) != TREE_CODE (parm))
13492         return 1;
13493
13494       /* We have already checked cv-qualification at the top of the
13495          function.  */
13496       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13497         return 1;
13498
13499       /* As far as unification is concerned, this wins.  Later checks
13500          will invalidate it if necessary.  */
13501       return 0;
13502
13503       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13504       /* Type INTEGER_CST can come from ordinary constant template args.  */
13505     case INTEGER_CST:
13506       while (TREE_CODE (arg) == NOP_EXPR)
13507         arg = TREE_OPERAND (arg, 0);
13508
13509       if (TREE_CODE (arg) != INTEGER_CST)
13510         return 1;
13511       return !tree_int_cst_equal (parm, arg);
13512
13513     case TREE_VEC:
13514       {
13515         int i;
13516         if (TREE_CODE (arg) != TREE_VEC)
13517           return 1;
13518         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13519           return 1;
13520         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13521           if (unify (tparms, targs,
13522                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13523                      UNIFY_ALLOW_NONE))
13524             return 1;
13525         return 0;
13526       }
13527
13528     case RECORD_TYPE:
13529     case UNION_TYPE:
13530       if (TREE_CODE (arg) != TREE_CODE (parm))
13531         return 1;
13532
13533       if (TYPE_PTRMEMFUNC_P (parm))
13534         {
13535           if (!TYPE_PTRMEMFUNC_P (arg))
13536             return 1;
13537
13538           return unify (tparms, targs,
13539                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13540                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13541                         strict);
13542         }
13543
13544       if (CLASSTYPE_TEMPLATE_INFO (parm))
13545         {
13546           tree t = NULL_TREE;
13547
13548           if (strict_in & UNIFY_ALLOW_DERIVED)
13549             {
13550               /* First, we try to unify the PARM and ARG directly.  */
13551               t = try_class_unification (tparms, targs,
13552                                          parm, arg);
13553
13554               if (!t)
13555                 {
13556                   /* Fallback to the special case allowed in
13557                      [temp.deduct.call]:
13558
13559                        If P is a class, and P has the form
13560                        template-id, then A can be a derived class of
13561                        the deduced A.  Likewise, if P is a pointer to
13562                        a class of the form template-id, A can be a
13563                        pointer to a derived class pointed to by the
13564                        deduced A.  */
13565                   t = get_template_base (tparms, targs, parm, arg);
13566
13567                   if (!t)
13568                     return 1;
13569                 }
13570             }
13571           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13572                    && (CLASSTYPE_TI_TEMPLATE (parm)
13573                        == CLASSTYPE_TI_TEMPLATE (arg)))
13574             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13575                Then, we should unify `int' and `U'.  */
13576             t = arg;
13577           else
13578             /* There's no chance of unification succeeding.  */
13579             return 1;
13580
13581           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13582                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13583         }
13584       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13585         return 1;
13586       return 0;
13587
13588     case METHOD_TYPE:
13589     case FUNCTION_TYPE:
13590       if (TREE_CODE (arg) != TREE_CODE (parm))
13591         return 1;
13592
13593       /* CV qualifications for methods can never be deduced, they must
13594          match exactly.  We need to check them explicitly here,
13595          because type_unification_real treats them as any other
13596          cv-qualified parameter.  */
13597       if (TREE_CODE (parm) == METHOD_TYPE
13598           && (!check_cv_quals_for_unify
13599               (UNIFY_ALLOW_NONE,
13600                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13601                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13602         return 1;
13603
13604       if (unify (tparms, targs, TREE_TYPE (parm),
13605                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13606         return 1;
13607       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13608                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13609                                     LOOKUP_NORMAL);
13610
13611     case OFFSET_TYPE:
13612       /* Unify a pointer to member with a pointer to member function, which
13613          deduces the type of the member as a function type. */
13614       if (TYPE_PTRMEMFUNC_P (arg))
13615         {
13616           tree method_type;
13617           tree fntype;
13618           cp_cv_quals cv_quals;
13619
13620           /* Check top-level cv qualifiers */
13621           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13622             return 1;
13623
13624           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13625                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13626             return 1;
13627
13628           /* Determine the type of the function we are unifying against. */
13629           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13630           fntype =
13631             build_function_type (TREE_TYPE (method_type),
13632                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13633
13634           /* Extract the cv-qualifiers of the member function from the
13635              implicit object parameter and place them on the function
13636              type to be restored later. */
13637           cv_quals =
13638             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13639           fntype = build_qualified_type (fntype, cv_quals);
13640           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13641         }
13642
13643       if (TREE_CODE (arg) != OFFSET_TYPE)
13644         return 1;
13645       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13646                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13647         return 1;
13648       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13649                     strict);
13650
13651     case CONST_DECL:
13652       if (DECL_TEMPLATE_PARM_P (parm))
13653         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13654       if (arg != integral_constant_value (parm))
13655         return 1;
13656       return 0;
13657
13658     case FIELD_DECL:
13659     case TEMPLATE_DECL:
13660       /* Matched cases are handled by the ARG == PARM test above.  */
13661       return 1;
13662
13663     case TYPE_ARGUMENT_PACK:
13664     case NONTYPE_ARGUMENT_PACK:
13665       {
13666         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13667         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13668         int i, len = TREE_VEC_LENGTH (packed_parms);
13669         int argslen = TREE_VEC_LENGTH (packed_args);
13670         int parm_variadic_p = 0;
13671
13672         for (i = 0; i < len; ++i)
13673           {
13674             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13675               {
13676                 if (i == len - 1)
13677                   /* We can unify against something with a trailing
13678                      parameter pack.  */
13679                   parm_variadic_p = 1;
13680                 else
13681                   /* Since there is something following the pack
13682                      expansion, we cannot unify this template argument
13683                      list.  */
13684                   return 0;
13685               }
13686           }
13687           
13688
13689         /* If we don't have enough arguments to satisfy the parameters
13690            (not counting the pack expression at the end), or we have
13691            too many arguments for a parameter list that doesn't end in
13692            a pack expression, we can't unify.  */
13693         if (argslen < (len - parm_variadic_p)
13694             || (argslen > len && !parm_variadic_p))
13695           return 1;
13696
13697         /* Unify all of the parameters that precede the (optional)
13698            pack expression.  */
13699         for (i = 0; i < len - parm_variadic_p; ++i)
13700           {
13701             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13702                        TREE_VEC_ELT (packed_args, i), strict))
13703               return 1;
13704           }
13705
13706         if (parm_variadic_p)
13707           return unify_pack_expansion (tparms, targs, 
13708                                        packed_parms, packed_args,
13709                                        strict, /*call_args_p=*/false,
13710                                        /*subr=*/false);
13711         return 0;
13712       }
13713
13714       break;
13715
13716     case TYPEOF_TYPE:
13717     case DECLTYPE_TYPE:
13718       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13719          nodes.  */
13720       return 0;
13721
13722     case ERROR_MARK:
13723       /* Unification fails if we hit an error node.  */
13724       return 1;
13725
13726     default:
13727       gcc_assert (EXPR_P (parm));
13728
13729       /* We must be looking at an expression.  This can happen with
13730          something like:
13731
13732            template <int I>
13733            void foo(S<I>, S<I + 2>);
13734
13735          This is a "nondeduced context":
13736
13737            [deduct.type]
13738
13739            The nondeduced contexts are:
13740
13741            --A type that is a template-id in which one or more of
13742              the template-arguments is an expression that references
13743              a template-parameter.
13744
13745          In these cases, we assume deduction succeeded, but don't
13746          actually infer any unifications.  */
13747
13748       if (!uses_template_parms (parm)
13749           && !template_args_equal (parm, arg))
13750         return 1;
13751       else
13752         return 0;
13753     }
13754 }
13755 \f
13756 /* Note that DECL can be defined in this translation unit, if
13757    required.  */
13758
13759 static void
13760 mark_definable (tree decl)
13761 {
13762   tree clone;
13763   DECL_NOT_REALLY_EXTERN (decl) = 1;
13764   FOR_EACH_CLONE (clone, decl)
13765     DECL_NOT_REALLY_EXTERN (clone) = 1;
13766 }
13767
13768 /* Called if RESULT is explicitly instantiated, or is a member of an
13769    explicitly instantiated class.  */
13770
13771 void
13772 mark_decl_instantiated (tree result, int extern_p)
13773 {
13774   SET_DECL_EXPLICIT_INSTANTIATION (result);
13775
13776   /* If this entity has already been written out, it's too late to
13777      make any modifications.  */
13778   if (TREE_ASM_WRITTEN (result))
13779     return;
13780
13781   if (TREE_CODE (result) != FUNCTION_DECL)
13782     /* The TREE_PUBLIC flag for function declarations will have been
13783        set correctly by tsubst.  */
13784     TREE_PUBLIC (result) = 1;
13785
13786   /* This might have been set by an earlier implicit instantiation.  */
13787   DECL_COMDAT (result) = 0;
13788
13789   if (extern_p)
13790     DECL_NOT_REALLY_EXTERN (result) = 0;
13791   else
13792     {
13793       mark_definable (result);
13794       /* Always make artificials weak.  */
13795       if (DECL_ARTIFICIAL (result) && flag_weak)
13796         comdat_linkage (result);
13797       /* For WIN32 we also want to put explicit instantiations in
13798          linkonce sections.  */
13799       else if (TREE_PUBLIC (result))
13800         maybe_make_one_only (result);
13801     }
13802
13803   /* If EXTERN_P, then this function will not be emitted -- unless
13804      followed by an explicit instantiation, at which point its linkage
13805      will be adjusted.  If !EXTERN_P, then this function will be
13806      emitted here.  In neither circumstance do we want
13807      import_export_decl to adjust the linkage.  */
13808   DECL_INTERFACE_KNOWN (result) = 1;
13809 }
13810
13811 /* Given two function templates PAT1 and PAT2, return:
13812
13813    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13814    -1 if PAT2 is more specialized than PAT1.
13815    0 if neither is more specialized.
13816
13817    LEN indicates the number of parameters we should consider
13818    (defaulted parameters should not be considered).
13819
13820    The 1998 std underspecified function template partial ordering, and
13821    DR214 addresses the issue.  We take pairs of arguments, one from
13822    each of the templates, and deduce them against each other.  One of
13823    the templates will be more specialized if all the *other*
13824    template's arguments deduce against its arguments and at least one
13825    of its arguments *does* *not* deduce against the other template's
13826    corresponding argument.  Deduction is done as for class templates.
13827    The arguments used in deduction have reference and top level cv
13828    qualifiers removed.  Iff both arguments were originally reference
13829    types *and* deduction succeeds in both directions, the template
13830    with the more cv-qualified argument wins for that pairing (if
13831    neither is more cv-qualified, they both are equal).  Unlike regular
13832    deduction, after all the arguments have been deduced in this way,
13833    we do *not* verify the deduced template argument values can be
13834    substituted into non-deduced contexts, nor do we have to verify
13835    that all template arguments have been deduced.  */
13836
13837 int
13838 more_specialized_fn (tree pat1, tree pat2, int len)
13839 {
13840   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13841   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13842   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13843   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13844   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13845   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13846   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13847   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13848   int better1 = 0;
13849   int better2 = 0;
13850
13851   /* Remove the this parameter from non-static member functions.  If
13852      one is a non-static member function and the other is not a static
13853      member function, remove the first parameter from that function
13854      also.  This situation occurs for operator functions where we
13855      locate both a member function (with this pointer) and non-member
13856      operator (with explicit first operand).  */
13857   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13858     {
13859       len--; /* LEN is the number of significant arguments for DECL1 */
13860       args1 = TREE_CHAIN (args1);
13861       if (!DECL_STATIC_FUNCTION_P (decl2))
13862         args2 = TREE_CHAIN (args2);
13863     }
13864   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13865     {
13866       args2 = TREE_CHAIN (args2);
13867       if (!DECL_STATIC_FUNCTION_P (decl1))
13868         {
13869           len--;
13870           args1 = TREE_CHAIN (args1);
13871         }
13872     }
13873
13874   /* If only one is a conversion operator, they are unordered.  */
13875   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13876     return 0;
13877
13878   /* Consider the return type for a conversion function */
13879   if (DECL_CONV_FN_P (decl1))
13880     {
13881       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13882       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13883       len++;
13884     }
13885
13886   processing_template_decl++;
13887
13888   while (len--
13889          /* Stop when an ellipsis is seen.  */
13890          && args1 != NULL_TREE && args2 != NULL_TREE)
13891     {
13892       tree arg1 = TREE_VALUE (args1);
13893       tree arg2 = TREE_VALUE (args2);
13894       int deduce1, deduce2;
13895       int quals1 = -1;
13896       int quals2 = -1;
13897
13898       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13899           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13900         {
13901           /* When both arguments are pack expansions, we need only
13902              unify the patterns themselves.  */
13903           arg1 = PACK_EXPANSION_PATTERN (arg1);
13904           arg2 = PACK_EXPANSION_PATTERN (arg2);
13905
13906           /* This is the last comparison we need to do.  */
13907           len = 0;
13908         }
13909
13910       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13911         {
13912           arg1 = TREE_TYPE (arg1);
13913           quals1 = cp_type_quals (arg1);
13914         }
13915
13916       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13917         {
13918           arg2 = TREE_TYPE (arg2);
13919           quals2 = cp_type_quals (arg2);
13920         }
13921
13922       if ((quals1 < 0) != (quals2 < 0))
13923         {
13924           /* Only of the args is a reference, see if we should apply
13925              array/function pointer decay to it.  This is not part of
13926              DR214, but is, IMHO, consistent with the deduction rules
13927              for the function call itself, and with our earlier
13928              implementation of the underspecified partial ordering
13929              rules.  (nathan).  */
13930           if (quals1 >= 0)
13931             {
13932               switch (TREE_CODE (arg1))
13933                 {
13934                 case ARRAY_TYPE:
13935                   arg1 = TREE_TYPE (arg1);
13936                   /* FALLTHROUGH. */
13937                 case FUNCTION_TYPE:
13938                   arg1 = build_pointer_type (arg1);
13939                   break;
13940
13941                 default:
13942                   break;
13943                 }
13944             }
13945           else
13946             {
13947               switch (TREE_CODE (arg2))
13948                 {
13949                 case ARRAY_TYPE:
13950                   arg2 = TREE_TYPE (arg2);
13951                   /* FALLTHROUGH. */
13952                 case FUNCTION_TYPE:
13953                   arg2 = build_pointer_type (arg2);
13954                   break;
13955
13956                 default:
13957                   break;
13958                 }
13959             }
13960         }
13961
13962       arg1 = TYPE_MAIN_VARIANT (arg1);
13963       arg2 = TYPE_MAIN_VARIANT (arg2);
13964
13965       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13966         {
13967           int i, len2 = list_length (args2);
13968           tree parmvec = make_tree_vec (1);
13969           tree argvec = make_tree_vec (len2);
13970           tree ta = args2;
13971
13972           /* Setup the parameter vector, which contains only ARG1.  */
13973           TREE_VEC_ELT (parmvec, 0) = arg1;
13974
13975           /* Setup the argument vector, which contains the remaining
13976              arguments.  */
13977           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13978             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13979
13980           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13981                                            argvec, UNIFY_ALLOW_NONE, 
13982                                            /*call_args_p=*/false, 
13983                                            /*subr=*/0);
13984
13985           /* We cannot deduce in the other direction, because ARG1 is
13986              a pack expansion but ARG2 is not.  */
13987           deduce2 = 0;
13988         }
13989       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13990         {
13991           int i, len1 = list_length (args1);
13992           tree parmvec = make_tree_vec (1);
13993           tree argvec = make_tree_vec (len1);
13994           tree ta = args1;
13995
13996           /* Setup the parameter vector, which contains only ARG1.  */
13997           TREE_VEC_ELT (parmvec, 0) = arg2;
13998
13999           /* Setup the argument vector, which contains the remaining
14000              arguments.  */
14001           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
14002             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
14003
14004           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
14005                                            argvec, UNIFY_ALLOW_NONE, 
14006                                            /*call_args_p=*/false, 
14007                                            /*subr=*/0);
14008
14009           /* We cannot deduce in the other direction, because ARG2 is
14010              a pack expansion but ARG1 is not.*/
14011           deduce1 = 0;
14012         }
14013
14014       else
14015         {
14016           /* The normal case, where neither argument is a pack
14017              expansion.  */
14018           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
14019           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
14020         }
14021
14022       if (!deduce1)
14023         better2 = -1;
14024       if (!deduce2)
14025         better1 = -1;
14026       if (better1 < 0 && better2 < 0)
14027         /* We've failed to deduce something in either direction.
14028            These must be unordered.  */
14029         break;
14030
14031       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
14032         {
14033           /* Deduces in both directions, see if quals can
14034              disambiguate.  Pretend the worse one failed to deduce. */
14035           if ((quals1 & quals2) == quals2)
14036             deduce1 = 0;
14037           if ((quals1 & quals2) == quals1)
14038             deduce2 = 0;
14039         }
14040       if (deduce1 && !deduce2 && !better2)
14041         better2 = 1;
14042       if (deduce2 && !deduce1 && !better1)
14043         better1 = 1;
14044
14045       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14046           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14047         /* We have already processed all of the arguments in our
14048            handing of the pack expansion type.  */
14049         len = 0;
14050
14051       args1 = TREE_CHAIN (args1);
14052       args2 = TREE_CHAIN (args2);
14053     }
14054
14055   processing_template_decl--;
14056
14057   /* All things being equal, if the next argument is a pack expansion
14058      for one function but not for the other, prefer the
14059      non-variadic function.  */
14060   if ((better1 > 0) - (better2 > 0) == 0
14061       && args1 && TREE_VALUE (args1)
14062       && args2 && TREE_VALUE (args2))
14063     {
14064       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
14065         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
14066       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
14067         return 1;
14068     }
14069
14070   return (better1 > 0) - (better2 > 0);
14071 }
14072
14073 /* Determine which of two partial specializations is more specialized.
14074
14075    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
14076    to the first partial specialization.  The TREE_VALUE is the
14077    innermost set of template parameters for the partial
14078    specialization.  PAT2 is similar, but for the second template.
14079
14080    Return 1 if the first partial specialization is more specialized;
14081    -1 if the second is more specialized; 0 if neither is more
14082    specialized.
14083
14084    See [temp.class.order] for information about determining which of
14085    two templates is more specialized.  */
14086
14087 static int
14088 more_specialized_class (tree pat1, tree pat2)
14089 {
14090   tree targs;
14091   tree tmpl1, tmpl2;
14092   int winner = 0;
14093   bool any_deductions = false;
14094
14095   tmpl1 = TREE_TYPE (pat1);
14096   tmpl2 = TREE_TYPE (pat2);
14097
14098   /* Just like what happens for functions, if we are ordering between
14099      different class template specializations, we may encounter dependent
14100      types in the arguments, and we need our dependency check functions
14101      to behave correctly.  */
14102   ++processing_template_decl;
14103   targs = get_class_bindings (TREE_VALUE (pat1),
14104                               CLASSTYPE_TI_ARGS (tmpl1),
14105                               CLASSTYPE_TI_ARGS (tmpl2));
14106   if (targs)
14107     {
14108       --winner;
14109       any_deductions = true;
14110     }
14111
14112   targs = get_class_bindings (TREE_VALUE (pat2),
14113                               CLASSTYPE_TI_ARGS (tmpl2),
14114                               CLASSTYPE_TI_ARGS (tmpl1));
14115   if (targs)
14116     {
14117       ++winner;
14118       any_deductions = true;
14119     }
14120   --processing_template_decl;
14121
14122   /* In the case of a tie where at least one of the class templates
14123      has a parameter pack at the end, the template with the most
14124      non-packed parameters wins.  */
14125   if (winner == 0
14126       && any_deductions
14127       && (template_args_variadic_p (TREE_PURPOSE (pat1))
14128           || template_args_variadic_p (TREE_PURPOSE (pat2))))
14129     {
14130       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
14131       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
14132       int len1 = TREE_VEC_LENGTH (args1);
14133       int len2 = TREE_VEC_LENGTH (args2);
14134
14135       /* We don't count the pack expansion at the end.  */
14136       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
14137         --len1;
14138       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
14139         --len2;
14140
14141       if (len1 > len2)
14142         return 1;
14143       else if (len1 < len2)
14144         return -1;
14145     }
14146
14147   return winner;
14148 }
14149
14150 /* Return the template arguments that will produce the function signature
14151    DECL from the function template FN, with the explicit template
14152    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
14153    also match.  Return NULL_TREE if no satisfactory arguments could be
14154    found.  */
14155
14156 static tree
14157 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
14158 {
14159   int ntparms = DECL_NTPARMS (fn);
14160   tree targs = make_tree_vec (ntparms);
14161   tree decl_type;
14162   tree decl_arg_types;
14163
14164   /* Substitute the explicit template arguments into the type of DECL.
14165      The call to fn_type_unification will handle substitution into the
14166      FN.  */
14167   decl_type = TREE_TYPE (decl);
14168   if (explicit_args && uses_template_parms (decl_type))
14169     {
14170       tree tmpl;
14171       tree converted_args;
14172
14173       if (DECL_TEMPLATE_INFO (decl))
14174         tmpl = DECL_TI_TEMPLATE (decl);
14175       else
14176         /* We can get here for some invalid specializations.  */
14177         return NULL_TREE;
14178
14179       converted_args
14180         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
14181                                  explicit_args, NULL_TREE,
14182                                  tf_none,
14183                                  /*require_all_args=*/false,
14184                                  /*use_default_args=*/false);
14185       if (converted_args == error_mark_node)
14186         return NULL_TREE;
14187
14188       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
14189       if (decl_type == error_mark_node)
14190         return NULL_TREE;
14191     }
14192
14193   /* Never do unification on the 'this' parameter.  */
14194   decl_arg_types = skip_artificial_parms_for (decl, 
14195                                               TYPE_ARG_TYPES (decl_type));
14196
14197   if (fn_type_unification (fn, explicit_args, targs,
14198                            decl_arg_types,
14199                            (check_rettype || DECL_CONV_FN_P (fn)
14200                             ? TREE_TYPE (decl_type) : NULL_TREE),
14201                            DEDUCE_EXACT, LOOKUP_NORMAL))
14202     return NULL_TREE;
14203
14204   return targs;
14205 }
14206
14207 /* Return the innermost template arguments that, when applied to a
14208    template specialization whose innermost template parameters are
14209    TPARMS, and whose specialization arguments are PARMS, yield the
14210    ARGS.
14211
14212    For example, suppose we have:
14213
14214      template <class T, class U> struct S {};
14215      template <class T> struct S<T*, int> {};
14216
14217    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
14218    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
14219    int}.  The resulting vector will be {double}, indicating that `T'
14220    is bound to `double'.  */
14221
14222 static tree
14223 get_class_bindings (tree tparms, tree spec_args, tree args)
14224 {
14225   int i, ntparms = TREE_VEC_LENGTH (tparms);
14226   tree deduced_args;
14227   tree innermost_deduced_args;
14228
14229   innermost_deduced_args = make_tree_vec (ntparms);
14230   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14231     {
14232       deduced_args = copy_node (args);
14233       SET_TMPL_ARGS_LEVEL (deduced_args,
14234                            TMPL_ARGS_DEPTH (deduced_args),
14235                            innermost_deduced_args);
14236     }
14237   else
14238     deduced_args = innermost_deduced_args;
14239
14240   if (unify (tparms, deduced_args,
14241              INNERMOST_TEMPLATE_ARGS (spec_args),
14242              INNERMOST_TEMPLATE_ARGS (args),
14243              UNIFY_ALLOW_NONE))
14244     return NULL_TREE;
14245
14246   for (i =  0; i < ntparms; ++i)
14247     if (! TREE_VEC_ELT (innermost_deduced_args, i))
14248       return NULL_TREE;
14249
14250   /* Verify that nondeduced template arguments agree with the type
14251      obtained from argument deduction.
14252
14253      For example:
14254
14255        struct A { typedef int X; };
14256        template <class T, class U> struct C {};
14257        template <class T> struct C<T, typename T::X> {};
14258
14259      Then with the instantiation `C<A, int>', we can deduce that
14260      `T' is `A' but unify () does not check whether `typename T::X'
14261      is `int'.  */
14262   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
14263   if (spec_args == error_mark_node
14264       /* We only need to check the innermost arguments; the other
14265          arguments will always agree.  */
14266       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
14267                               INNERMOST_TEMPLATE_ARGS (args)))
14268     return NULL_TREE;
14269
14270   /* Now that we have bindings for all of the template arguments,
14271      ensure that the arguments deduced for the template template
14272      parameters have compatible template parameter lists.  See the use
14273      of template_template_parm_bindings_ok_p in fn_type_unification
14274      for more information.  */
14275   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
14276     return NULL_TREE;
14277
14278   return deduced_args;
14279 }
14280
14281 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
14282    Return the TREE_LIST node with the most specialized template, if
14283    any.  If there is no most specialized template, the error_mark_node
14284    is returned.
14285
14286    Note that this function does not look at, or modify, the
14287    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
14288    returned is one of the elements of INSTANTIATIONS, callers may
14289    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
14290    and retrieve it from the value returned.  */
14291
14292 tree
14293 most_specialized_instantiation (tree templates)
14294 {
14295   tree fn, champ;
14296
14297   ++processing_template_decl;
14298
14299   champ = templates;
14300   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
14301     {
14302       int fate = 0;
14303
14304       if (get_bindings (TREE_VALUE (champ),
14305                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14306                         NULL_TREE, /*check_ret=*/false))
14307         fate--;
14308
14309       if (get_bindings (TREE_VALUE (fn),
14310                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14311                         NULL_TREE, /*check_ret=*/false))
14312         fate++;
14313
14314       if (fate == -1)
14315         champ = fn;
14316       else if (!fate)
14317         {
14318           /* Equally specialized, move to next function.  If there
14319              is no next function, nothing's most specialized.  */
14320           fn = TREE_CHAIN (fn);
14321           champ = fn;
14322           if (!fn)
14323             break;
14324         }
14325     }
14326
14327   if (champ)
14328     /* Now verify that champ is better than everything earlier in the
14329        instantiation list.  */
14330     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
14331       if (get_bindings (TREE_VALUE (champ),
14332                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14333                         NULL_TREE, /*check_ret=*/false)
14334           || !get_bindings (TREE_VALUE (fn),
14335                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14336                             NULL_TREE, /*check_ret=*/false))
14337         {
14338           champ = NULL_TREE;
14339           break;
14340         }
14341
14342   processing_template_decl--;
14343
14344   if (!champ)
14345     return error_mark_node;
14346
14347   return champ;
14348 }
14349
14350 /* If DECL is a specialization of some template, return the most
14351    general such template.  Otherwise, returns NULL_TREE.
14352
14353    For example, given:
14354
14355      template <class T> struct S { template <class U> void f(U); };
14356
14357    if TMPL is `template <class U> void S<int>::f(U)' this will return
14358    the full template.  This function will not trace past partial
14359    specializations, however.  For example, given in addition:
14360
14361      template <class T> struct S<T*> { template <class U> void f(U); };
14362
14363    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14364    `template <class T> template <class U> S<T*>::f(U)'.  */
14365
14366 tree
14367 most_general_template (tree decl)
14368 {
14369   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14370      an immediate specialization.  */
14371   if (TREE_CODE (decl) == FUNCTION_DECL)
14372     {
14373       if (DECL_TEMPLATE_INFO (decl)) {
14374         decl = DECL_TI_TEMPLATE (decl);
14375
14376         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14377            template friend.  */
14378         if (TREE_CODE (decl) != TEMPLATE_DECL)
14379           return NULL_TREE;
14380       } else
14381         return NULL_TREE;
14382     }
14383
14384   /* Look for more and more general templates.  */
14385   while (DECL_TEMPLATE_INFO (decl))
14386     {
14387       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14388          (See cp-tree.h for details.)  */
14389       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14390         break;
14391
14392       if (CLASS_TYPE_P (TREE_TYPE (decl))
14393           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14394         break;
14395
14396       /* Stop if we run into an explicitly specialized class template.  */
14397       if (!DECL_NAMESPACE_SCOPE_P (decl)
14398           && DECL_CONTEXT (decl)
14399           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14400         break;
14401
14402       decl = DECL_TI_TEMPLATE (decl);
14403     }
14404
14405   return decl;
14406 }
14407
14408 /* Return the most specialized of the class template partial
14409    specializations of TMPL which can produce TYPE, a specialization of
14410    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14411    a _TYPE node corresponding to the partial specialization, while the
14412    TREE_PURPOSE is the set of template arguments that must be
14413    substituted into the TREE_TYPE in order to generate TYPE.
14414
14415    If the choice of partial specialization is ambiguous, a diagnostic
14416    is issued, and the error_mark_node is returned.  If there are no
14417    partial specializations of TMPL matching TYPE, then NULL_TREE is
14418    returned.  */
14419
14420 static tree
14421 most_specialized_class (tree type, tree tmpl)
14422 {
14423   tree list = NULL_TREE;
14424   tree t;
14425   tree champ;
14426   int fate;
14427   bool ambiguous_p;
14428   tree args;
14429   tree outer_args = NULL_TREE;
14430
14431   tmpl = most_general_template (tmpl);
14432   args = CLASSTYPE_TI_ARGS (type);
14433
14434   /* For determining which partial specialization to use, only the
14435      innermost args are interesting.  */
14436   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14437     {
14438       outer_args = strip_innermost_template_args (args, 1);
14439       args = INNERMOST_TEMPLATE_ARGS (args);
14440     }
14441
14442   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14443     {
14444       tree partial_spec_args;
14445       tree spec_args;
14446       tree parms = TREE_VALUE (t);
14447
14448       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14449       if (outer_args)
14450         {
14451           int i;
14452
14453           ++processing_template_decl;
14454
14455           /* Discard the outer levels of args, and then substitute in the
14456              template args from the enclosing class.  */
14457           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14458           partial_spec_args = tsubst_template_args
14459             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14460
14461           /* PARMS already refers to just the innermost parms, but the
14462              template parms in partial_spec_args had their levels lowered
14463              by tsubst, so we need to do the same for the parm list.  We
14464              can't just tsubst the TREE_VEC itself, as tsubst wants to
14465              treat a TREE_VEC as an argument vector.  */
14466           parms = copy_node (parms);
14467           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14468             TREE_VEC_ELT (parms, i) =
14469               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14470
14471           --processing_template_decl;
14472         }
14473       spec_args = get_class_bindings (parms,
14474                                       partial_spec_args,
14475                                       args);
14476       if (spec_args)
14477         {
14478           if (outer_args)
14479             spec_args = add_to_template_args (outer_args, spec_args);
14480           list = tree_cons (spec_args, TREE_VALUE (t), list);
14481           TREE_TYPE (list) = TREE_TYPE (t);
14482         }
14483     }
14484
14485   if (! list)
14486     return NULL_TREE;
14487
14488   ambiguous_p = false;
14489   t = list;
14490   champ = t;
14491   t = TREE_CHAIN (t);
14492   for (; t; t = TREE_CHAIN (t))
14493     {
14494       fate = more_specialized_class (champ, t);
14495       if (fate == 1)
14496         ;
14497       else
14498         {
14499           if (fate == 0)
14500             {
14501               t = TREE_CHAIN (t);
14502               if (! t)
14503                 {
14504                   ambiguous_p = true;
14505                   break;
14506                 }
14507             }
14508           champ = t;
14509         }
14510     }
14511
14512   if (!ambiguous_p)
14513     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14514       {
14515         fate = more_specialized_class (champ, t);
14516         if (fate != 1)
14517           {
14518             ambiguous_p = true;
14519             break;
14520           }
14521       }
14522
14523   if (ambiguous_p)
14524     {
14525       const char *str = "candidates are:";
14526       error ("ambiguous class template instantiation for %q#T", type);
14527       for (t = list; t; t = TREE_CHAIN (t))
14528         {
14529           error ("%s %+#T", str, TREE_TYPE (t));
14530           str = "               ";
14531         }
14532       return error_mark_node;
14533     }
14534
14535   return champ;
14536 }
14537
14538 /* Explicitly instantiate DECL.  */
14539
14540 void
14541 do_decl_instantiation (tree decl, tree storage)
14542 {
14543   tree result = NULL_TREE;
14544   int extern_p = 0;
14545
14546   if (!decl || decl == error_mark_node)
14547     /* An error occurred, for which grokdeclarator has already issued
14548        an appropriate message.  */
14549     return;
14550   else if (! DECL_LANG_SPECIFIC (decl))
14551     {
14552       error ("explicit instantiation of non-template %q#D", decl);
14553       return;
14554     }
14555   else if (TREE_CODE (decl) == VAR_DECL)
14556     {
14557       /* There is an asymmetry here in the way VAR_DECLs and
14558          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14559          the latter, the DECL we get back will be marked as a
14560          template instantiation, and the appropriate
14561          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14562          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14563          should handle VAR_DECLs as it currently handles
14564          FUNCTION_DECLs.  */
14565       if (!DECL_CLASS_SCOPE_P (decl))
14566         {
14567           error ("%qD is not a static data member of a class template", decl);
14568           return;
14569         }
14570       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14571       if (!result || TREE_CODE (result) != VAR_DECL)
14572         {
14573           error ("no matching template for %qD found", decl);
14574           return;
14575         }
14576       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14577         {
14578           error ("type %qT for explicit instantiation %qD does not match "
14579                  "declared type %qT", TREE_TYPE (result), decl,
14580                  TREE_TYPE (decl));
14581           return;
14582         }
14583     }
14584   else if (TREE_CODE (decl) != FUNCTION_DECL)
14585     {
14586       error ("explicit instantiation of %q#D", decl);
14587       return;
14588     }
14589   else
14590     result = decl;
14591
14592   /* Check for various error cases.  Note that if the explicit
14593      instantiation is valid the RESULT will currently be marked as an
14594      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14595      until we get here.  */
14596
14597   if (DECL_TEMPLATE_SPECIALIZATION (result))
14598     {
14599       /* DR 259 [temp.spec].
14600
14601          Both an explicit instantiation and a declaration of an explicit
14602          specialization shall not appear in a program unless the explicit
14603          instantiation follows a declaration of the explicit specialization.
14604
14605          For a given set of template parameters, if an explicit
14606          instantiation of a template appears after a declaration of an
14607          explicit specialization for that template, the explicit
14608          instantiation has no effect.  */
14609       return;
14610     }
14611   else if (DECL_EXPLICIT_INSTANTIATION (result))
14612     {
14613       /* [temp.spec]
14614
14615          No program shall explicitly instantiate any template more
14616          than once.
14617
14618          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14619          the first instantiation was `extern' and the second is not,
14620          and EXTERN_P for the opposite case.  */
14621       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14622         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
14623       /* If an "extern" explicit instantiation follows an ordinary
14624          explicit instantiation, the template is instantiated.  */
14625       if (extern_p)
14626         return;
14627     }
14628   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14629     {
14630       error ("no matching template for %qD found", result);
14631       return;
14632     }
14633   else if (!DECL_TEMPLATE_INFO (result))
14634     {
14635       permerror (input_location, "explicit instantiation of non-template %q#D", result);
14636       return;
14637     }
14638
14639   if (storage == NULL_TREE)
14640     ;
14641   else if (storage == ridpointers[(int) RID_EXTERN])
14642     {
14643       if (!in_system_header && (cxx_dialect == cxx98))
14644         pedwarn (input_location, OPT_pedantic, 
14645                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
14646                  "instantiations");
14647       extern_p = 1;
14648     }
14649   else
14650     error ("storage class %qD applied to template instantiation", storage);
14651
14652   check_explicit_instantiation_namespace (result);
14653   mark_decl_instantiated (result, extern_p);
14654   if (! extern_p)
14655     instantiate_decl (result, /*defer_ok=*/1,
14656                       /*expl_inst_class_mem_p=*/false);
14657 }
14658
14659 static void
14660 mark_class_instantiated (tree t, int extern_p)
14661 {
14662   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14663   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14664   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14665   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14666   if (! extern_p)
14667     {
14668       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14669       rest_of_type_compilation (t, 1);
14670     }
14671 }
14672
14673 /* Called from do_type_instantiation through binding_table_foreach to
14674    do recursive instantiation for the type bound in ENTRY.  */
14675 static void
14676 bt_instantiate_type_proc (binding_entry entry, void *data)
14677 {
14678   tree storage = *(tree *) data;
14679
14680   if (MAYBE_CLASS_TYPE_P (entry->type)
14681       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14682     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14683 }
14684
14685 /* Called from do_type_instantiation to instantiate a member
14686    (a member function or a static member variable) of an
14687    explicitly instantiated class template.  */
14688 static void
14689 instantiate_class_member (tree decl, int extern_p)
14690 {
14691   mark_decl_instantiated (decl, extern_p);
14692   if (! extern_p)
14693     instantiate_decl (decl, /*defer_ok=*/1,
14694                       /*expl_inst_class_mem_p=*/true);
14695 }
14696
14697 /* Perform an explicit instantiation of template class T.  STORAGE, if
14698    non-null, is the RID for extern, inline or static.  COMPLAIN is
14699    nonzero if this is called from the parser, zero if called recursively,
14700    since the standard is unclear (as detailed below).  */
14701
14702 void
14703 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14704 {
14705   int extern_p = 0;
14706   int nomem_p = 0;
14707   int static_p = 0;
14708   int previous_instantiation_extern_p = 0;
14709
14710   if (TREE_CODE (t) == TYPE_DECL)
14711     t = TREE_TYPE (t);
14712
14713   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14714     {
14715       error ("explicit instantiation of non-template type %qT", t);
14716       return;
14717     }
14718
14719   complete_type (t);
14720
14721   if (!COMPLETE_TYPE_P (t))
14722     {
14723       if (complain & tf_error)
14724         error ("explicit instantiation of %q#T before definition of template",
14725                t);
14726       return;
14727     }
14728
14729   if (storage != NULL_TREE)
14730     {
14731       if (!in_system_header)
14732         {
14733           if (storage == ridpointers[(int) RID_EXTERN])
14734             {
14735               if (cxx_dialect == cxx98)
14736                 pedwarn (input_location, OPT_pedantic, 
14737                          "ISO C++ 1998 forbids the use of %<extern%> on "
14738                          "explicit instantiations");
14739             }
14740           else
14741             pedwarn (input_location, OPT_pedantic, 
14742                      "ISO C++ forbids the use of %qE"
14743                      " on explicit instantiations", storage);
14744         }
14745
14746       if (storage == ridpointers[(int) RID_INLINE])
14747         nomem_p = 1;
14748       else if (storage == ridpointers[(int) RID_EXTERN])
14749         extern_p = 1;
14750       else if (storage == ridpointers[(int) RID_STATIC])
14751         static_p = 1;
14752       else
14753         {
14754           error ("storage class %qD applied to template instantiation",
14755                  storage);
14756           extern_p = 0;
14757         }
14758     }
14759
14760   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14761     {
14762       /* DR 259 [temp.spec].
14763
14764          Both an explicit instantiation and a declaration of an explicit
14765          specialization shall not appear in a program unless the explicit
14766          instantiation follows a declaration of the explicit specialization.
14767
14768          For a given set of template parameters, if an explicit
14769          instantiation of a template appears after a declaration of an
14770          explicit specialization for that template, the explicit
14771          instantiation has no effect.  */
14772       return;
14773     }
14774   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14775     {
14776       /* [temp.spec]
14777
14778          No program shall explicitly instantiate any template more
14779          than once.
14780
14781          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14782          instantiation was `extern'.  If EXTERN_P then the second is.
14783          These cases are OK.  */
14784       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14785
14786       if (!previous_instantiation_extern_p && !extern_p
14787           && (complain & tf_error))
14788         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
14789
14790       /* If we've already instantiated the template, just return now.  */
14791       if (!CLASSTYPE_INTERFACE_ONLY (t))
14792         return;
14793     }
14794
14795   check_explicit_instantiation_namespace (TYPE_NAME (t));
14796   mark_class_instantiated (t, extern_p);
14797
14798   if (nomem_p)
14799     return;
14800
14801   {
14802     tree tmp;
14803
14804     /* In contrast to implicit instantiation, where only the
14805        declarations, and not the definitions, of members are
14806        instantiated, we have here:
14807
14808          [temp.explicit]
14809
14810          The explicit instantiation of a class template specialization
14811          implies the instantiation of all of its members not
14812          previously explicitly specialized in the translation unit
14813          containing the explicit instantiation.
14814
14815        Of course, we can't instantiate member template classes, since
14816        we don't have any arguments for them.  Note that the standard
14817        is unclear on whether the instantiation of the members are
14818        *explicit* instantiations or not.  However, the most natural
14819        interpretation is that it should be an explicit instantiation.  */
14820
14821     if (! static_p)
14822       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14823         if (TREE_CODE (tmp) == FUNCTION_DECL
14824             && DECL_TEMPLATE_INSTANTIATION (tmp))
14825           instantiate_class_member (tmp, extern_p);
14826
14827     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14828       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14829         instantiate_class_member (tmp, extern_p);
14830
14831     if (CLASSTYPE_NESTED_UTDS (t))
14832       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14833                              bt_instantiate_type_proc, &storage);
14834   }
14835 }
14836
14837 /* Given a function DECL, which is a specialization of TMPL, modify
14838    DECL to be a re-instantiation of TMPL with the same template
14839    arguments.  TMPL should be the template into which tsubst'ing
14840    should occur for DECL, not the most general template.
14841
14842    One reason for doing this is a scenario like this:
14843
14844      template <class T>
14845      void f(const T&, int i);
14846
14847      void g() { f(3, 7); }
14848
14849      template <class T>
14850      void f(const T& t, const int i) { }
14851
14852    Note that when the template is first instantiated, with
14853    instantiate_template, the resulting DECL will have no name for the
14854    first parameter, and the wrong type for the second.  So, when we go
14855    to instantiate the DECL, we regenerate it.  */
14856
14857 static void
14858 regenerate_decl_from_template (tree decl, tree tmpl)
14859 {
14860   /* The arguments used to instantiate DECL, from the most general
14861      template.  */
14862   tree args;
14863   tree code_pattern;
14864
14865   args = DECL_TI_ARGS (decl);
14866   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14867
14868   /* Make sure that we can see identifiers, and compute access
14869      correctly.  */
14870   push_access_scope (decl);
14871
14872   if (TREE_CODE (decl) == FUNCTION_DECL)
14873     {
14874       tree decl_parm;
14875       tree pattern_parm;
14876       tree specs;
14877       int args_depth;
14878       int parms_depth;
14879
14880       args_depth = TMPL_ARGS_DEPTH (args);
14881       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14882       if (args_depth > parms_depth)
14883         args = get_innermost_template_args (args, parms_depth);
14884
14885       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14886                                               args, tf_error, NULL_TREE);
14887       if (specs)
14888         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14889                                                     specs);
14890
14891       /* Merge parameter declarations.  */
14892       decl_parm = skip_artificial_parms_for (decl,
14893                                              DECL_ARGUMENTS (decl));
14894       pattern_parm
14895         = skip_artificial_parms_for (code_pattern,
14896                                      DECL_ARGUMENTS (code_pattern));
14897       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14898         {
14899           tree parm_type;
14900           tree attributes;
14901           
14902           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14903             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14904           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14905                               NULL_TREE);
14906           parm_type = type_decays_to (parm_type);
14907           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14908             TREE_TYPE (decl_parm) = parm_type;
14909           attributes = DECL_ATTRIBUTES (pattern_parm);
14910           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14911             {
14912               DECL_ATTRIBUTES (decl_parm) = attributes;
14913               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14914             }
14915           decl_parm = TREE_CHAIN (decl_parm);
14916           pattern_parm = TREE_CHAIN (pattern_parm);
14917         }
14918       /* Merge any parameters that match with the function parameter
14919          pack.  */
14920       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14921         {
14922           int i, len;
14923           tree expanded_types;
14924           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14925              the parameters in this function parameter pack.  */
14926           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14927                                                  args, tf_error, NULL_TREE);
14928           len = TREE_VEC_LENGTH (expanded_types);
14929           for (i = 0; i < len; i++)
14930             {
14931               tree parm_type;
14932               tree attributes;
14933           
14934               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14935                 /* Rename the parameter to include the index.  */
14936                 DECL_NAME (decl_parm) = 
14937                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14938               parm_type = TREE_VEC_ELT (expanded_types, i);
14939               parm_type = type_decays_to (parm_type);
14940               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14941                 TREE_TYPE (decl_parm) = parm_type;
14942               attributes = DECL_ATTRIBUTES (pattern_parm);
14943               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14944                 {
14945                   DECL_ATTRIBUTES (decl_parm) = attributes;
14946                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14947                 }
14948               decl_parm = TREE_CHAIN (decl_parm);
14949             }
14950         }
14951       /* Merge additional specifiers from the CODE_PATTERN.  */
14952       if (DECL_DECLARED_INLINE_P (code_pattern)
14953           && !DECL_DECLARED_INLINE_P (decl))
14954         DECL_DECLARED_INLINE_P (decl) = 1;
14955     }
14956   else if (TREE_CODE (decl) == VAR_DECL)
14957     DECL_INITIAL (decl) =
14958       tsubst_expr (DECL_INITIAL (code_pattern), args,
14959                    tf_error, DECL_TI_TEMPLATE (decl),
14960                    /*integral_constant_expression_p=*/false);
14961   else
14962     gcc_unreachable ();
14963
14964   pop_access_scope (decl);
14965 }
14966
14967 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14968    substituted to get DECL.  */
14969
14970 tree
14971 template_for_substitution (tree decl)
14972 {
14973   tree tmpl = DECL_TI_TEMPLATE (decl);
14974
14975   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14976      for the instantiation.  This is not always the most general
14977      template.  Consider, for example:
14978
14979         template <class T>
14980         struct S { template <class U> void f();
14981                    template <> void f<int>(); };
14982
14983      and an instantiation of S<double>::f<int>.  We want TD to be the
14984      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14985   while (/* An instantiation cannot have a definition, so we need a
14986             more general template.  */
14987          DECL_TEMPLATE_INSTANTIATION (tmpl)
14988            /* We must also deal with friend templates.  Given:
14989
14990                 template <class T> struct S {
14991                   template <class U> friend void f() {};
14992                 };
14993
14994               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14995               so far as the language is concerned, but that's still
14996               where we get the pattern for the instantiation from.  On
14997               other hand, if the definition comes outside the class, say:
14998
14999                 template <class T> struct S {
15000                   template <class U> friend void f();
15001                 };
15002                 template <class U> friend void f() {}
15003
15004               we don't need to look any further.  That's what the check for
15005               DECL_INITIAL is for.  */
15006           || (TREE_CODE (decl) == FUNCTION_DECL
15007               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
15008               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
15009     {
15010       /* The present template, TD, should not be a definition.  If it
15011          were a definition, we should be using it!  Note that we
15012          cannot restructure the loop to just keep going until we find
15013          a template with a definition, since that might go too far if
15014          a specialization was declared, but not defined.  */
15015       gcc_assert (TREE_CODE (decl) != VAR_DECL
15016                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
15017
15018       /* Fetch the more general template.  */
15019       tmpl = DECL_TI_TEMPLATE (tmpl);
15020     }
15021
15022   return tmpl;
15023 }
15024
15025 /* Produce the definition of D, a _DECL generated from a template.  If
15026    DEFER_OK is nonzero, then we don't have to actually do the
15027    instantiation now; we just have to do it sometime.  Normally it is
15028    an error if this is an explicit instantiation but D is undefined.
15029    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
15030    explicitly instantiated class template.  */
15031
15032 tree
15033 instantiate_decl (tree d, int defer_ok,
15034                   bool expl_inst_class_mem_p)
15035 {
15036   tree tmpl = DECL_TI_TEMPLATE (d);
15037   tree gen_args;
15038   tree args;
15039   tree td;
15040   tree code_pattern;
15041   tree spec;
15042   tree gen_tmpl;
15043   bool pattern_defined;
15044   int need_push;
15045   location_t saved_loc = input_location;
15046   bool external_p;
15047
15048   /* This function should only be used to instantiate templates for
15049      functions and static member variables.  */
15050   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
15051               || TREE_CODE (d) == VAR_DECL);
15052
15053   /* Variables are never deferred; if instantiation is required, they
15054      are instantiated right away.  That allows for better code in the
15055      case that an expression refers to the value of the variable --
15056      if the variable has a constant value the referring expression can
15057      take advantage of that fact.  */
15058   if (TREE_CODE (d) == VAR_DECL)
15059     defer_ok = 0;
15060
15061   /* Don't instantiate cloned functions.  Instead, instantiate the
15062      functions they cloned.  */
15063   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
15064     d = DECL_CLONED_FUNCTION (d);
15065
15066   if (DECL_TEMPLATE_INSTANTIATED (d))
15067     /* D has already been instantiated.  It might seem reasonable to
15068        check whether or not D is an explicit instantiation, and, if so,
15069        stop here.  But when an explicit instantiation is deferred
15070        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
15071        is set, even though we still need to do the instantiation.  */
15072     return d;
15073
15074   /* If we already have a specialization of this declaration, then
15075      there's no reason to instantiate it.  Note that
15076      retrieve_specialization gives us both instantiations and
15077      specializations, so we must explicitly check
15078      DECL_TEMPLATE_SPECIALIZATION.  */
15079   gen_tmpl = most_general_template (tmpl);
15080   gen_args = DECL_TI_ARGS (d);
15081   spec = retrieve_specialization (gen_tmpl, gen_args,
15082                                   /*class_specializations_p=*/false);
15083   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
15084     return spec;
15085
15086   /* This needs to happen before any tsubsting.  */
15087   if (! push_tinst_level (d))
15088     return d;
15089
15090   timevar_push (TV_PARSE);
15091
15092   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
15093      for the instantiation.  */
15094   td = template_for_substitution (d);
15095   code_pattern = DECL_TEMPLATE_RESULT (td);
15096
15097   /* We should never be trying to instantiate a member of a class
15098      template or partial specialization.  */
15099   gcc_assert (d != code_pattern);
15100
15101   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
15102       || DECL_TEMPLATE_SPECIALIZATION (td))
15103     /* In the case of a friend template whose definition is provided
15104        outside the class, we may have too many arguments.  Drop the
15105        ones we don't need.  The same is true for specializations.  */
15106     args = get_innermost_template_args
15107       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
15108   else
15109     args = gen_args;
15110
15111   if (TREE_CODE (d) == FUNCTION_DECL)
15112     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
15113   else
15114     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
15115
15116   /* We may be in the middle of deferred access check.  Disable it now.  */
15117   push_deferring_access_checks (dk_no_deferred);
15118
15119   /* Unless an explicit instantiation directive has already determined
15120      the linkage of D, remember that a definition is available for
15121      this entity.  */
15122   if (pattern_defined
15123       && !DECL_INTERFACE_KNOWN (d)
15124       && !DECL_NOT_REALLY_EXTERN (d))
15125     mark_definable (d);
15126
15127   input_location = DECL_SOURCE_LOCATION (d);
15128
15129   /* If D is a member of an explicitly instantiated class template,
15130      and no definition is available, treat it like an implicit
15131      instantiation.  */
15132   if (!pattern_defined && expl_inst_class_mem_p
15133       && DECL_EXPLICIT_INSTANTIATION (d))
15134     {
15135       DECL_NOT_REALLY_EXTERN (d) = 0;
15136       DECL_INTERFACE_KNOWN (d) = 0;
15137       SET_DECL_IMPLICIT_INSTANTIATION (d);
15138     }
15139
15140   if (!defer_ok)
15141     {
15142       /* Recheck the substitutions to obtain any warning messages
15143          about ignoring cv qualifiers.  */
15144       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
15145       tree type = TREE_TYPE (gen);
15146
15147       /* Make sure that we can see identifiers, and compute access
15148          correctly.  D is already the target FUNCTION_DECL with the
15149          right context.  */
15150       push_access_scope (d);
15151
15152       if (TREE_CODE (gen) == FUNCTION_DECL)
15153         {
15154           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
15155           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
15156                                           d);
15157           /* Don't simply tsubst the function type, as that will give
15158              duplicate warnings about poor parameter qualifications.
15159              The function arguments are the same as the decl_arguments
15160              without the top level cv qualifiers.  */
15161           type = TREE_TYPE (type);
15162         }
15163       tsubst (type, gen_args, tf_warning_or_error, d);
15164
15165       pop_access_scope (d);
15166     }
15167
15168   /* Check to see whether we know that this template will be
15169      instantiated in some other file, as with "extern template"
15170      extension.  */
15171   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
15172   /* In general, we do not instantiate such templates...  */
15173   if (external_p
15174       /* ... but we instantiate inline functions so that we can inline
15175          them and ... */
15176       && ! (TREE_CODE (d) == FUNCTION_DECL
15177             && possibly_inlined_p (d))
15178       /* ... we instantiate static data members whose values are
15179          needed in integral constant expressions.  */
15180       && ! (TREE_CODE (d) == VAR_DECL
15181             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
15182     goto out;
15183   /* Defer all other templates, unless we have been explicitly
15184      forbidden from doing so.  */
15185   if (/* If there is no definition, we cannot instantiate the
15186          template.  */
15187       ! pattern_defined
15188       /* If it's OK to postpone instantiation, do so.  */
15189       || defer_ok
15190       /* If this is a static data member that will be defined
15191          elsewhere, we don't want to instantiate the entire data
15192          member, but we do want to instantiate the initializer so that
15193          we can substitute that elsewhere.  */
15194       || (external_p && TREE_CODE (d) == VAR_DECL))
15195     {
15196       /* The definition of the static data member is now required so
15197          we must substitute the initializer.  */
15198       if (TREE_CODE (d) == VAR_DECL
15199           && !DECL_INITIAL (d)
15200           && DECL_INITIAL (code_pattern))
15201         {
15202           tree ns;
15203           tree init;
15204
15205           ns = decl_namespace_context (d);
15206           push_nested_namespace (ns);
15207           push_nested_class (DECL_CONTEXT (d));
15208           init = tsubst_expr (DECL_INITIAL (code_pattern),
15209                               args,
15210                               tf_warning_or_error, NULL_TREE,
15211                               /*integral_constant_expression_p=*/false);
15212           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
15213                           /*asmspec_tree=*/NULL_TREE,
15214                           LOOKUP_ONLYCONVERTING);
15215           pop_nested_class ();
15216           pop_nested_namespace (ns);
15217         }
15218
15219       /* We restore the source position here because it's used by
15220          add_pending_template.  */
15221       input_location = saved_loc;
15222
15223       if (at_eof && !pattern_defined
15224           && DECL_EXPLICIT_INSTANTIATION (d))
15225         /* [temp.explicit]
15226
15227            The definition of a non-exported function template, a
15228            non-exported member function template, or a non-exported
15229            member function or static data member of a class template
15230            shall be present in every translation unit in which it is
15231            explicitly instantiated.  */
15232         permerror (input_location,  "explicit instantiation of %qD "
15233                    "but no definition available", d);
15234
15235       /* ??? Historically, we have instantiated inline functions, even
15236          when marked as "extern template".  */
15237       if (!(external_p && TREE_CODE (d) == VAR_DECL))
15238         add_pending_template (d);
15239       goto out;
15240     }
15241   /* Tell the repository that D is available in this translation unit
15242      -- and see if it is supposed to be instantiated here.  */
15243   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
15244     {
15245       /* In a PCH file, despite the fact that the repository hasn't
15246          requested instantiation in the PCH it is still possible that
15247          an instantiation will be required in a file that includes the
15248          PCH.  */
15249       if (pch_file)
15250         add_pending_template (d);
15251       /* Instantiate inline functions so that the inliner can do its
15252          job, even though we'll not be emitting a copy of this
15253          function.  */
15254       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
15255         goto out;
15256     }
15257
15258   need_push = !cfun || !global_bindings_p ();
15259   if (need_push)
15260     push_to_top_level ();
15261
15262   /* Mark D as instantiated so that recursive calls to
15263      instantiate_decl do not try to instantiate it again.  */
15264   DECL_TEMPLATE_INSTANTIATED (d) = 1;
15265
15266   /* Regenerate the declaration in case the template has been modified
15267      by a subsequent redeclaration.  */
15268   regenerate_decl_from_template (d, td);
15269
15270   /* We already set the file and line above.  Reset them now in case
15271      they changed as a result of calling regenerate_decl_from_template.  */
15272   input_location = DECL_SOURCE_LOCATION (d);
15273
15274   if (TREE_CODE (d) == VAR_DECL)
15275     {
15276       tree init;
15277
15278       /* Clear out DECL_RTL; whatever was there before may not be right
15279          since we've reset the type of the declaration.  */
15280       SET_DECL_RTL (d, NULL_RTX);
15281       DECL_IN_AGGR_P (d) = 0;
15282
15283       /* The initializer is placed in DECL_INITIAL by
15284          regenerate_decl_from_template.  Pull it out so that
15285          finish_decl can process it.  */
15286       init = DECL_INITIAL (d);
15287       DECL_INITIAL (d) = NULL_TREE;
15288       DECL_INITIALIZED_P (d) = 0;
15289
15290       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
15291          initializer.  That function will defer actual emission until
15292          we have a chance to determine linkage.  */
15293       DECL_EXTERNAL (d) = 0;
15294
15295       /* Enter the scope of D so that access-checking works correctly.  */
15296       push_nested_class (DECL_CONTEXT (d));
15297       finish_decl (d, init, NULL_TREE);
15298       pop_nested_class ();
15299     }
15300   else if (TREE_CODE (d) == FUNCTION_DECL)
15301     {
15302       htab_t saved_local_specializations;
15303       tree subst_decl;
15304       tree tmpl_parm;
15305       tree spec_parm;
15306
15307       /* Save away the current list, in case we are instantiating one
15308          template from within the body of another.  */
15309       saved_local_specializations = local_specializations;
15310
15311       /* Set up the list of local specializations.  */
15312       local_specializations = htab_create (37,
15313                                            hash_local_specialization,
15314                                            eq_local_specializations,
15315                                            NULL);
15316
15317       /* Set up context.  */
15318       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
15319
15320       /* Create substitution entries for the parameters.  */
15321       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
15322       tmpl_parm = DECL_ARGUMENTS (subst_decl);
15323       spec_parm = DECL_ARGUMENTS (d);
15324       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
15325         {
15326           register_local_specialization (spec_parm, tmpl_parm);
15327           spec_parm = skip_artificial_parms_for (d, spec_parm);
15328           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
15329         }
15330       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15331         {
15332           register_local_specialization (spec_parm, tmpl_parm);
15333           tmpl_parm = TREE_CHAIN (tmpl_parm);
15334           spec_parm = TREE_CHAIN (spec_parm);
15335         }
15336       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15337         {
15338           /* Collect all of the extra "packed" parameters into an
15339              argument pack.  */
15340           tree parmvec;
15341           tree parmtypevec;
15342           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
15343           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
15344           int i, len = 0;
15345           tree t;
15346           
15347           /* Count how many parameters remain.  */
15348           for (t = spec_parm; t; t = TREE_CHAIN (t))
15349             len++;
15350
15351           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
15352           parmvec = make_tree_vec (len);
15353           parmtypevec = make_tree_vec (len);
15354           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15355             {
15356               TREE_VEC_ELT (parmvec, i) = spec_parm;
15357               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15358             }
15359
15360           /* Build the argument packs.  */
15361           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15362           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15363           TREE_TYPE (argpack) = argtypepack;
15364           
15365           /* Register the (value) argument pack as a specialization of
15366              TMPL_PARM, then move on.  */
15367           register_local_specialization (argpack, tmpl_parm);
15368           tmpl_parm = TREE_CHAIN (tmpl_parm);
15369         }
15370       gcc_assert (!spec_parm);
15371
15372       /* Substitute into the body of the function.  */
15373       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15374                    tf_warning_or_error, tmpl,
15375                    /*integral_constant_expression_p=*/false);
15376
15377       /* Set the current input_location to the end of the function
15378          so that finish_function knows where we are.  */
15379       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15380
15381       /* We don't need the local specializations any more.  */
15382       htab_delete (local_specializations);
15383       local_specializations = saved_local_specializations;
15384
15385       /* Finish the function.  */
15386       d = finish_function (0);
15387       expand_or_defer_fn (d);
15388     }
15389
15390   /* We're not deferring instantiation any more.  */
15391   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15392
15393   if (need_push)
15394     pop_from_top_level ();
15395
15396 out:
15397   input_location = saved_loc;
15398   pop_deferring_access_checks ();
15399   pop_tinst_level ();
15400
15401   timevar_pop (TV_PARSE);
15402
15403   return d;
15404 }
15405
15406 /* Run through the list of templates that we wish we could
15407    instantiate, and instantiate any we can.  RETRIES is the
15408    number of times we retry pending template instantiation.  */
15409
15410 void
15411 instantiate_pending_templates (int retries)
15412 {
15413   int reconsider;
15414   location_t saved_loc = input_location;
15415
15416   /* Instantiating templates may trigger vtable generation.  This in turn
15417      may require further template instantiations.  We place a limit here
15418      to avoid infinite loop.  */
15419   if (pending_templates && retries >= max_tinst_depth)
15420     {
15421       tree decl = pending_templates->tinst->decl;
15422
15423       error ("template instantiation depth exceeds maximum of %d"
15424              " instantiating %q+D, possibly from virtual table generation"
15425              " (use -ftemplate-depth-NN to increase the maximum)",
15426              max_tinst_depth, decl);
15427       if (TREE_CODE (decl) == FUNCTION_DECL)
15428         /* Pretend that we defined it.  */
15429         DECL_INITIAL (decl) = error_mark_node;
15430       return;
15431     }
15432
15433   do
15434     {
15435       struct pending_template **t = &pending_templates;
15436       struct pending_template *last = NULL;
15437       reconsider = 0;
15438       while (*t)
15439         {
15440           tree instantiation = reopen_tinst_level ((*t)->tinst);
15441           bool complete = false;
15442
15443           if (TYPE_P (instantiation))
15444             {
15445               tree fn;
15446
15447               if (!COMPLETE_TYPE_P (instantiation))
15448                 {
15449                   instantiate_class_template (instantiation);
15450                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15451                     for (fn = TYPE_METHODS (instantiation);
15452                          fn;
15453                          fn = TREE_CHAIN (fn))
15454                       if (! DECL_ARTIFICIAL (fn))
15455                         instantiate_decl (fn,
15456                                           /*defer_ok=*/0,
15457                                           /*expl_inst_class_mem_p=*/false);
15458                   if (COMPLETE_TYPE_P (instantiation))
15459                     reconsider = 1;
15460                 }
15461
15462               complete = COMPLETE_TYPE_P (instantiation);
15463             }
15464           else
15465             {
15466               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15467                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15468                 {
15469                   instantiation
15470                     = instantiate_decl (instantiation,
15471                                         /*defer_ok=*/0,
15472                                         /*expl_inst_class_mem_p=*/false);
15473                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15474                     reconsider = 1;
15475                 }
15476
15477               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15478                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15479             }
15480
15481           if (complete)
15482             /* If INSTANTIATION has been instantiated, then we don't
15483                need to consider it again in the future.  */
15484             *t = (*t)->next;
15485           else
15486             {
15487               last = *t;
15488               t = &(*t)->next;
15489             }
15490           tinst_depth = 0;
15491           current_tinst_level = NULL;
15492         }
15493       last_pending_template = last;
15494     }
15495   while (reconsider);
15496
15497   input_location = saved_loc;
15498 }
15499
15500 /* Substitute ARGVEC into T, which is a list of initializers for
15501    either base class or a non-static data member.  The TREE_PURPOSEs
15502    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15503    instantiate_decl.  */
15504
15505 static tree
15506 tsubst_initializer_list (tree t, tree argvec)
15507 {
15508   tree inits = NULL_TREE;
15509
15510   for (; t; t = TREE_CHAIN (t))
15511     {
15512       tree decl;
15513       tree init;
15514       tree expanded_bases = NULL_TREE;
15515       tree expanded_arguments = NULL_TREE;
15516       int i, len = 1;
15517
15518       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15519         {
15520           tree expr;
15521           tree arg;
15522
15523           /* Expand the base class expansion type into separate base
15524              classes.  */
15525           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15526                                                  tf_warning_or_error,
15527                                                  NULL_TREE);
15528           if (expanded_bases == error_mark_node)
15529             continue;
15530           
15531           /* We'll be building separate TREE_LISTs of arguments for
15532              each base.  */
15533           len = TREE_VEC_LENGTH (expanded_bases);
15534           expanded_arguments = make_tree_vec (len);
15535           for (i = 0; i < len; i++)
15536             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15537
15538           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15539              expand each argument in the TREE_VALUE of t.  */
15540           expr = make_node (EXPR_PACK_EXPANSION);
15541           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15542             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15543
15544           if (TREE_VALUE (t) == void_type_node)
15545             /* VOID_TYPE_NODE is used to indicate
15546                value-initialization.  */
15547             {
15548               for (i = 0; i < len; i++)
15549                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
15550             }
15551           else
15552             {
15553               /* Substitute parameter packs into each argument in the
15554                  TREE_LIST.  */
15555               in_base_initializer = 1;
15556               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15557                 {
15558                   tree expanded_exprs;
15559
15560                   /* Expand the argument.  */
15561                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15562                   expanded_exprs 
15563                     = tsubst_pack_expansion (expr, argvec,
15564                                              tf_warning_or_error,
15565                                              NULL_TREE);
15566                   if (expanded_exprs == error_mark_node)
15567                     continue;
15568
15569                   /* Prepend each of the expanded expressions to the
15570                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15571                   for (i = 0; i < len; i++)
15572                     {
15573                       TREE_VEC_ELT (expanded_arguments, i) = 
15574                         tree_cons (NULL_TREE, 
15575                                    TREE_VEC_ELT (expanded_exprs, i),
15576                                    TREE_VEC_ELT (expanded_arguments, i));
15577                     }
15578                 }
15579               in_base_initializer = 0;
15580
15581               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15582                  since we built them backwards.  */
15583               for (i = 0; i < len; i++)
15584                 {
15585                   TREE_VEC_ELT (expanded_arguments, i) = 
15586                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
15587                 }
15588             }
15589         }
15590
15591       for (i = 0; i < len; ++i)
15592         {
15593           if (expanded_bases)
15594             {
15595               decl = TREE_VEC_ELT (expanded_bases, i);
15596               decl = expand_member_init (decl);
15597               init = TREE_VEC_ELT (expanded_arguments, i);
15598             }
15599           else
15600             {
15601               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15602                                   tf_warning_or_error, NULL_TREE);
15603
15604               decl = expand_member_init (decl);
15605               if (decl && !DECL_P (decl))
15606                 in_base_initializer = 1;
15607
15608               init = tsubst_expr (TREE_VALUE (t), argvec, 
15609                                   tf_warning_or_error, NULL_TREE,
15610                                   /*integral_constant_expression_p=*/false);
15611               in_base_initializer = 0;
15612             }
15613
15614           if (decl)
15615             {
15616               init = build_tree_list (decl, init);
15617               TREE_CHAIN (init) = inits;
15618               inits = init;
15619             }
15620         }
15621     }
15622   return inits;
15623 }
15624
15625 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15626
15627 static void
15628 set_current_access_from_decl (tree decl)
15629 {
15630   if (TREE_PRIVATE (decl))
15631     current_access_specifier = access_private_node;
15632   else if (TREE_PROTECTED (decl))
15633     current_access_specifier = access_protected_node;
15634   else
15635     current_access_specifier = access_public_node;
15636 }
15637
15638 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15639    is the instantiation (which should have been created with
15640    start_enum) and ARGS are the template arguments to use.  */
15641
15642 static void
15643 tsubst_enum (tree tag, tree newtag, tree args)
15644 {
15645   tree e;
15646
15647   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15648     {
15649       tree value;
15650       tree decl;
15651
15652       decl = TREE_VALUE (e);
15653       /* Note that in a template enum, the TREE_VALUE is the
15654          CONST_DECL, not the corresponding INTEGER_CST.  */
15655       value = tsubst_expr (DECL_INITIAL (decl),
15656                            args, tf_warning_or_error, NULL_TREE,
15657                            /*integral_constant_expression_p=*/true);
15658
15659       /* Give this enumeration constant the correct access.  */
15660       set_current_access_from_decl (decl);
15661
15662       /* Actually build the enumerator itself.  */
15663       build_enumerator (DECL_NAME (decl), value, newtag);
15664     }
15665
15666   finish_enum (newtag);
15667   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15668     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15669 }
15670
15671 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15672    its type -- but without substituting the innermost set of template
15673    arguments.  So, innermost set of template parameters will appear in
15674    the type.  */
15675
15676 tree
15677 get_mostly_instantiated_function_type (tree decl)
15678 {
15679   tree fn_type;
15680   tree tmpl;
15681   tree targs;
15682   tree tparms;
15683   int parm_depth;
15684
15685   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15686   targs = DECL_TI_ARGS (decl);
15687   tparms = DECL_TEMPLATE_PARMS (tmpl);
15688   parm_depth = TMPL_PARMS_DEPTH (tparms);
15689
15690   /* There should be as many levels of arguments as there are levels
15691      of parameters.  */
15692   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15693
15694   fn_type = TREE_TYPE (tmpl);
15695
15696   if (parm_depth == 1)
15697     /* No substitution is necessary.  */
15698     ;
15699   else
15700     {
15701       int i, save_access_control;
15702       tree partial_args;
15703
15704       /* Replace the innermost level of the TARGS with NULL_TREEs to
15705          let tsubst know not to substitute for those parameters.  */
15706       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15707       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15708         SET_TMPL_ARGS_LEVEL (partial_args, i,
15709                              TMPL_ARGS_LEVEL (targs, i));
15710       SET_TMPL_ARGS_LEVEL (partial_args,
15711                            TMPL_ARGS_DEPTH (targs),
15712                            make_tree_vec (DECL_NTPARMS (tmpl)));
15713
15714       /* Disable access control as this function is used only during
15715          name-mangling.  */
15716       save_access_control = flag_access_control;
15717       flag_access_control = 0;
15718
15719       ++processing_template_decl;
15720       /* Now, do the (partial) substitution to figure out the
15721          appropriate function type.  */
15722       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15723       --processing_template_decl;
15724
15725       /* Substitute into the template parameters to obtain the real
15726          innermost set of parameters.  This step is important if the
15727          innermost set of template parameters contains value
15728          parameters whose types depend on outer template parameters.  */
15729       TREE_VEC_LENGTH (partial_args)--;
15730       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15731
15732       flag_access_control = save_access_control;
15733     }
15734
15735   return fn_type;
15736 }
15737
15738 /* Return truthvalue if we're processing a template different from
15739    the last one involved in diagnostics.  */
15740 int
15741 problematic_instantiation_changed (void)
15742 {
15743   return last_template_error_tick != tinst_level_tick;
15744 }
15745
15746 /* Remember current template involved in diagnostics.  */
15747 void
15748 record_last_problematic_instantiation (void)
15749 {
15750   last_template_error_tick = tinst_level_tick;
15751 }
15752
15753 struct tinst_level *
15754 current_instantiation (void)
15755 {
15756   return current_tinst_level;
15757 }
15758
15759 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15760    type. Return zero for ok, nonzero for disallowed. Issue error and
15761    warning messages under control of COMPLAIN.  */
15762
15763 static int
15764 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15765 {
15766   if (INTEGRAL_TYPE_P (type))
15767     return 0;
15768   else if (POINTER_TYPE_P (type))
15769     return 0;
15770   else if (TYPE_PTR_TO_MEMBER_P (type))
15771     return 0;
15772   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15773     return 0;
15774   else if (TREE_CODE (type) == TYPENAME_TYPE)
15775     return 0;
15776
15777   if (complain & tf_error)
15778     error ("%q#T is not a valid type for a template constant parameter", type);
15779   return 1;
15780 }
15781
15782 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15783    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15784
15785 static bool
15786 dependent_type_p_r (tree type)
15787 {
15788   tree scope;
15789
15790   /* [temp.dep.type]
15791
15792      A type is dependent if it is:
15793
15794      -- a template parameter. Template template parameters are types
15795         for us (since TYPE_P holds true for them) so we handle
15796         them here.  */
15797   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15798       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15799     return true;
15800   /* -- a qualified-id with a nested-name-specifier which contains a
15801         class-name that names a dependent type or whose unqualified-id
15802         names a dependent type.  */
15803   if (TREE_CODE (type) == TYPENAME_TYPE)
15804     return true;
15805   /* -- a cv-qualified type where the cv-unqualified type is
15806         dependent.  */
15807   type = TYPE_MAIN_VARIANT (type);
15808   /* -- a compound type constructed from any dependent type.  */
15809   if (TYPE_PTR_TO_MEMBER_P (type))
15810     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15811             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15812                                            (type)));
15813   else if (TREE_CODE (type) == POINTER_TYPE
15814            || TREE_CODE (type) == REFERENCE_TYPE)
15815     return dependent_type_p (TREE_TYPE (type));
15816   else if (TREE_CODE (type) == FUNCTION_TYPE
15817            || TREE_CODE (type) == METHOD_TYPE)
15818     {
15819       tree arg_type;
15820
15821       if (dependent_type_p (TREE_TYPE (type)))
15822         return true;
15823       for (arg_type = TYPE_ARG_TYPES (type);
15824            arg_type;
15825            arg_type = TREE_CHAIN (arg_type))
15826         if (dependent_type_p (TREE_VALUE (arg_type)))
15827           return true;
15828       return false;
15829     }
15830   /* -- an array type constructed from any dependent type or whose
15831         size is specified by a constant expression that is
15832         value-dependent.  */
15833   if (TREE_CODE (type) == ARRAY_TYPE)
15834     {
15835       if (TYPE_DOMAIN (type)
15836           && dependent_type_p (TYPE_DOMAIN (type)))
15837         return true;
15838       return dependent_type_p (TREE_TYPE (type));
15839     }
15840   else if (TREE_CODE (type) == INTEGER_TYPE
15841            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15842     {
15843       /* If this is the TYPE_DOMAIN of an array type, consider it
15844          dependent.  */
15845       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15846               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15847     }
15848
15849   /* -- a template-id in which either the template name is a template
15850      parameter ...  */
15851   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15852     return true;
15853   /* ... or any of the template arguments is a dependent type or
15854         an expression that is type-dependent or value-dependent.  */
15855   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15856            && (any_dependent_template_arguments_p
15857                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15858     return true;
15859
15860   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15861      argument of the `typeof' expression is not type-dependent, then
15862      it should already been have resolved.  */
15863   if (TREE_CODE (type) == TYPEOF_TYPE
15864       || TREE_CODE (type) == DECLTYPE_TYPE)
15865     return true;
15866
15867   /* A template argument pack is dependent if any of its packed
15868      arguments are.  */
15869   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15870     {
15871       tree args = ARGUMENT_PACK_ARGS (type);
15872       int i, len = TREE_VEC_LENGTH (args);
15873       for (i = 0; i < len; ++i)
15874         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15875           return true;
15876     }
15877
15878   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15879      be template parameters.  */
15880   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15881     return true;
15882
15883   /* The standard does not specifically mention types that are local
15884      to template functions or local classes, but they should be
15885      considered dependent too.  For example:
15886
15887        template <int I> void f() {
15888          enum E { a = I };
15889          S<sizeof (E)> s;
15890        }
15891
15892      The size of `E' cannot be known until the value of `I' has been
15893      determined.  Therefore, `E' must be considered dependent.  */
15894   scope = TYPE_CONTEXT (type);
15895   if (scope && TYPE_P (scope))
15896     return dependent_type_p (scope);
15897   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15898     return type_dependent_expression_p (scope);
15899
15900   /* Other types are non-dependent.  */
15901   return false;
15902 }
15903
15904 /* Returns TRUE if TYPE is dependent, in the sense of
15905    [temp.dep.type].  */
15906
15907 bool
15908 dependent_type_p (tree type)
15909 {
15910   /* If there are no template parameters in scope, then there can't be
15911      any dependent types.  */
15912   if (!processing_template_decl)
15913     {
15914       /* If we are not processing a template, then nobody should be
15915          providing us with a dependent type.  */
15916       gcc_assert (type);
15917       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
15918       return false;
15919     }
15920
15921   /* If the type is NULL, we have not computed a type for the entity
15922      in question; in that case, the type is dependent.  */
15923   if (!type)
15924     return true;
15925
15926   /* Erroneous types can be considered non-dependent.  */
15927   if (type == error_mark_node)
15928     return false;
15929
15930   /* If we have not already computed the appropriate value for TYPE,
15931      do so now.  */
15932   if (!TYPE_DEPENDENT_P_VALID (type))
15933     {
15934       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15935       TYPE_DEPENDENT_P_VALID (type) = 1;
15936     }
15937
15938   return TYPE_DEPENDENT_P (type);
15939 }
15940
15941 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15942
15943 static bool
15944 dependent_scope_ref_p (tree expression, bool criterion (tree))
15945 {
15946   tree scope;
15947   tree name;
15948
15949   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15950
15951   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15952     return true;
15953
15954   scope = TREE_OPERAND (expression, 0);
15955   name = TREE_OPERAND (expression, 1);
15956
15957   /* [temp.dep.expr]
15958
15959      An id-expression is type-dependent if it contains a
15960      nested-name-specifier that contains a class-name that names a
15961      dependent type.  */
15962   /* The suggested resolution to Core Issue 2 implies that if the
15963      qualifying type is the current class, then we must peek
15964      inside it.  */
15965   if (DECL_P (name)
15966       && currently_open_class (scope)
15967       && !criterion (name))
15968     return false;
15969   if (dependent_type_p (scope))
15970     return true;
15971
15972   return false;
15973 }
15974
15975 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15976    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15977    expression.  */
15978
15979 bool
15980 value_dependent_expression_p (tree expression)
15981 {
15982   if (!processing_template_decl)
15983     return false;
15984
15985   /* A name declared with a dependent type.  */
15986   if (DECL_P (expression) && type_dependent_expression_p (expression))
15987     return true;
15988
15989   switch (TREE_CODE (expression))
15990     {
15991     case IDENTIFIER_NODE:
15992       /* A name that has not been looked up -- must be dependent.  */
15993       return true;
15994
15995     case TEMPLATE_PARM_INDEX:
15996       /* A non-type template parm.  */
15997       return true;
15998
15999     case CONST_DECL:
16000       /* A non-type template parm.  */
16001       if (DECL_TEMPLATE_PARM_P (expression))
16002         return true;
16003       return value_dependent_expression_p (DECL_INITIAL (expression));
16004
16005     case VAR_DECL:
16006        /* A constant with integral or enumeration type and is initialized
16007           with an expression that is value-dependent.  */
16008       if (DECL_INITIAL (expression)
16009           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
16010           && value_dependent_expression_p (DECL_INITIAL (expression)))
16011         return true;
16012       return false;
16013
16014     case DYNAMIC_CAST_EXPR:
16015     case STATIC_CAST_EXPR:
16016     case CONST_CAST_EXPR:
16017     case REINTERPRET_CAST_EXPR:
16018     case CAST_EXPR:
16019       /* These expressions are value-dependent if the type to which
16020          the cast occurs is dependent or the expression being casted
16021          is value-dependent.  */
16022       {
16023         tree type = TREE_TYPE (expression);
16024
16025         if (dependent_type_p (type))
16026           return true;
16027
16028         /* A functional cast has a list of operands.  */
16029         expression = TREE_OPERAND (expression, 0);
16030         if (!expression)
16031           {
16032             /* If there are no operands, it must be an expression such
16033                as "int()". This should not happen for aggregate types
16034                because it would form non-constant expressions.  */
16035             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
16036
16037             return false;
16038           }
16039
16040         if (TREE_CODE (expression) == TREE_LIST)
16041           return any_value_dependent_elements_p (expression);
16042
16043         return value_dependent_expression_p (expression);
16044       }
16045
16046     case SIZEOF_EXPR:
16047     case ALIGNOF_EXPR:
16048       /* A `sizeof' expression is value-dependent if the operand is
16049          type-dependent or is a pack expansion.  */
16050       expression = TREE_OPERAND (expression, 0);
16051       if (PACK_EXPANSION_P (expression))
16052         return true;
16053       else if (TYPE_P (expression))
16054         return dependent_type_p (expression);
16055       return type_dependent_expression_p (expression);
16056
16057     case SCOPE_REF:
16058       return dependent_scope_ref_p (expression, value_dependent_expression_p);
16059
16060     case COMPONENT_REF:
16061       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
16062               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
16063
16064     case CALL_EXPR:
16065       /* A CALL_EXPR may appear in a constant expression if it is a
16066          call to a builtin function, e.g., __builtin_constant_p.  All
16067          such calls are value-dependent.  */
16068       return true;
16069
16070     case NONTYPE_ARGUMENT_PACK:
16071       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
16072          is value-dependent.  */
16073       {
16074         tree values = ARGUMENT_PACK_ARGS (expression);
16075         int i, len = TREE_VEC_LENGTH (values);
16076         
16077         for (i = 0; i < len; ++i)
16078           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
16079             return true;
16080         
16081         return false;
16082       }
16083
16084     case TRAIT_EXPR:
16085       {
16086         tree type2 = TRAIT_EXPR_TYPE2 (expression);
16087         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
16088                 || (type2 ? dependent_type_p (type2) : false));
16089       }
16090
16091     case MODOP_EXPR:
16092       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
16093               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
16094
16095     default:
16096       /* A constant expression is value-dependent if any subexpression is
16097          value-dependent.  */
16098       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
16099         {
16100         case tcc_reference:
16101         case tcc_unary:
16102           return (value_dependent_expression_p
16103                   (TREE_OPERAND (expression, 0)));
16104
16105         case tcc_comparison:
16106         case tcc_binary:
16107           return ((value_dependent_expression_p
16108                    (TREE_OPERAND (expression, 0)))
16109                   || (value_dependent_expression_p
16110                       (TREE_OPERAND (expression, 1))));
16111
16112         case tcc_expression:
16113         case tcc_vl_exp:
16114           {
16115             int i;
16116             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
16117               /* In some cases, some of the operands may be missing.
16118                  (For example, in the case of PREDECREMENT_EXPR, the
16119                  amount to increment by may be missing.)  That doesn't
16120                  make the expression dependent.  */
16121               if (TREE_OPERAND (expression, i)
16122                   && (value_dependent_expression_p
16123                       (TREE_OPERAND (expression, i))))
16124                 return true;
16125             return false;
16126           }
16127
16128         default:
16129           break;
16130         }
16131     }
16132
16133   /* The expression is not value-dependent.  */
16134   return false;
16135 }
16136
16137 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
16138    [temp.dep.expr].  */
16139
16140 bool
16141 type_dependent_expression_p (tree expression)
16142 {
16143   if (!processing_template_decl)
16144     return false;
16145
16146   if (expression == error_mark_node)
16147     return false;
16148
16149   /* An unresolved name is always dependent.  */
16150   if (TREE_CODE (expression) == IDENTIFIER_NODE
16151       || TREE_CODE (expression) == USING_DECL)
16152     return true;
16153
16154   /* Some expression forms are never type-dependent.  */
16155   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
16156       || TREE_CODE (expression) == SIZEOF_EXPR
16157       || TREE_CODE (expression) == ALIGNOF_EXPR
16158       || TREE_CODE (expression) == TRAIT_EXPR
16159       || TREE_CODE (expression) == TYPEID_EXPR
16160       || TREE_CODE (expression) == DELETE_EXPR
16161       || TREE_CODE (expression) == VEC_DELETE_EXPR
16162       || TREE_CODE (expression) == THROW_EXPR)
16163     return false;
16164
16165   /* The types of these expressions depends only on the type to which
16166      the cast occurs.  */
16167   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
16168       || TREE_CODE (expression) == STATIC_CAST_EXPR
16169       || TREE_CODE (expression) == CONST_CAST_EXPR
16170       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
16171       || TREE_CODE (expression) == CAST_EXPR)
16172     return dependent_type_p (TREE_TYPE (expression));
16173
16174   /* The types of these expressions depends only on the type created
16175      by the expression.  */
16176   if (TREE_CODE (expression) == NEW_EXPR
16177       || TREE_CODE (expression) == VEC_NEW_EXPR)
16178     {
16179       /* For NEW_EXPR tree nodes created inside a template, either
16180          the object type itself or a TREE_LIST may appear as the
16181          operand 1.  */
16182       tree type = TREE_OPERAND (expression, 1);
16183       if (TREE_CODE (type) == TREE_LIST)
16184         /* This is an array type.  We need to check array dimensions
16185            as well.  */
16186         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
16187                || value_dependent_expression_p
16188                     (TREE_OPERAND (TREE_VALUE (type), 1));
16189       else
16190         return dependent_type_p (type);
16191     }
16192
16193   if (TREE_CODE (expression) == SCOPE_REF
16194       && dependent_scope_ref_p (expression,
16195                                 type_dependent_expression_p))
16196     return true;
16197
16198   if (TREE_CODE (expression) == FUNCTION_DECL
16199       && DECL_LANG_SPECIFIC (expression)
16200       && DECL_TEMPLATE_INFO (expression)
16201       && (any_dependent_template_arguments_p
16202           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
16203     return true;
16204
16205   if (TREE_CODE (expression) == TEMPLATE_DECL
16206       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
16207     return false;
16208
16209   if (TREE_CODE (expression) == STMT_EXPR)
16210     expression = stmt_expr_value_expr (expression);
16211
16212   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
16213     {
16214       tree elt;
16215       unsigned i;
16216
16217       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
16218         {
16219           if (type_dependent_expression_p (elt))
16220             return true;
16221         }
16222       return false;
16223     }
16224
16225   if (TREE_TYPE (expression) == unknown_type_node)
16226     {
16227       if (TREE_CODE (expression) == ADDR_EXPR)
16228         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
16229       if (TREE_CODE (expression) == COMPONENT_REF
16230           || TREE_CODE (expression) == OFFSET_REF)
16231         {
16232           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
16233             return true;
16234           expression = TREE_OPERAND (expression, 1);
16235           if (TREE_CODE (expression) == IDENTIFIER_NODE)
16236             return false;
16237         }
16238       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
16239       if (TREE_CODE (expression) == SCOPE_REF)
16240         return false;
16241
16242       if (TREE_CODE (expression) == BASELINK)
16243         expression = BASELINK_FUNCTIONS (expression);
16244
16245       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
16246         {
16247           if (any_dependent_template_arguments_p
16248               (TREE_OPERAND (expression, 1)))
16249             return true;
16250           expression = TREE_OPERAND (expression, 0);
16251         }
16252       gcc_assert (TREE_CODE (expression) == OVERLOAD
16253                   || TREE_CODE (expression) == FUNCTION_DECL);
16254
16255       while (expression)
16256         {
16257           if (type_dependent_expression_p (OVL_CURRENT (expression)))
16258             return true;
16259           expression = OVL_NEXT (expression);
16260         }
16261       return false;
16262     }
16263
16264   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
16265
16266   return (dependent_type_p (TREE_TYPE (expression)));
16267 }
16268
16269 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
16270    contains a type-dependent expression.  */
16271
16272 bool
16273 any_type_dependent_arguments_p (const_tree args)
16274 {
16275   while (args)
16276     {
16277       tree arg = TREE_VALUE (args);
16278
16279       if (type_dependent_expression_p (arg))
16280         return true;
16281       args = TREE_CHAIN (args);
16282     }
16283   return false;
16284 }
16285
16286 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
16287    expressions) contains any value-dependent expressions.  */
16288
16289 bool
16290 any_value_dependent_elements_p (const_tree list)
16291 {
16292   for (; list; list = TREE_CHAIN (list))
16293     if (value_dependent_expression_p (TREE_VALUE (list)))
16294       return true;
16295
16296   return false;
16297 }
16298
16299 /* Returns TRUE if the ARG (a template argument) is dependent.  */
16300
16301 bool
16302 dependent_template_arg_p (tree arg)
16303 {
16304   if (!processing_template_decl)
16305     return false;
16306
16307   if (TREE_CODE (arg) == TEMPLATE_DECL
16308       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16309     return dependent_template_p (arg);
16310   else if (ARGUMENT_PACK_P (arg))
16311     {
16312       tree args = ARGUMENT_PACK_ARGS (arg);
16313       int i, len = TREE_VEC_LENGTH (args);
16314       for (i = 0; i < len; ++i)
16315         {
16316           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16317             return true;
16318         }
16319
16320       return false;
16321     }
16322   else if (TYPE_P (arg))
16323     return dependent_type_p (arg);
16324   else
16325     return (type_dependent_expression_p (arg)
16326             || value_dependent_expression_p (arg));
16327 }
16328
16329 /* Returns true if ARGS (a collection of template arguments) contains
16330    any types that require structural equality testing.  */
16331
16332 bool
16333 any_template_arguments_need_structural_equality_p (tree args)
16334 {
16335   int i;
16336   int j;
16337
16338   if (!args)
16339     return false;
16340   if (args == error_mark_node)
16341     return true;
16342
16343   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16344     {
16345       tree level = TMPL_ARGS_LEVEL (args, i + 1);
16346       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16347         {
16348           tree arg = TREE_VEC_ELT (level, j);
16349           tree packed_args = NULL_TREE;
16350           int k, len = 1;
16351
16352           if (ARGUMENT_PACK_P (arg))
16353             {
16354               /* Look inside the argument pack.  */
16355               packed_args = ARGUMENT_PACK_ARGS (arg);
16356               len = TREE_VEC_LENGTH (packed_args);
16357             }
16358
16359           for (k = 0; k < len; ++k)
16360             {
16361               if (packed_args)
16362                 arg = TREE_VEC_ELT (packed_args, k);
16363
16364               if (error_operand_p (arg))
16365                 return true;
16366               else if (TREE_CODE (arg) == TEMPLATE_DECL
16367                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16368                 continue;
16369               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
16370                 return true;
16371               else if (!TYPE_P (arg) && TREE_TYPE (arg)
16372                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
16373                 return true;
16374             }
16375         }
16376     }
16377
16378   return false;
16379 }
16380
16381 /* Returns true if ARGS (a collection of template arguments) contains
16382    any dependent arguments.  */
16383
16384 bool
16385 any_dependent_template_arguments_p (const_tree args)
16386 {
16387   int i;
16388   int j;
16389
16390   if (!args)
16391     return false;
16392   if (args == error_mark_node)
16393     return true;
16394
16395   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16396     {
16397       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16398       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16399         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16400           return true;
16401     }
16402
16403   return false;
16404 }
16405
16406 /* Returns TRUE if the template TMPL is dependent.  */
16407
16408 bool
16409 dependent_template_p (tree tmpl)
16410 {
16411   if (TREE_CODE (tmpl) == OVERLOAD)
16412     {
16413       while (tmpl)
16414         {
16415           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16416             return true;
16417           tmpl = OVL_CHAIN (tmpl);
16418         }
16419       return false;
16420     }
16421
16422   /* Template template parameters are dependent.  */
16423   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16424       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16425     return true;
16426   /* So are names that have not been looked up.  */
16427   if (TREE_CODE (tmpl) == SCOPE_REF
16428       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16429     return true;
16430   /* So are member templates of dependent classes.  */
16431   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16432     return dependent_type_p (DECL_CONTEXT (tmpl));
16433   return false;
16434 }
16435
16436 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16437
16438 bool
16439 dependent_template_id_p (tree tmpl, tree args)
16440 {
16441   return (dependent_template_p (tmpl)
16442           || any_dependent_template_arguments_p (args));
16443 }
16444
16445 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
16446    is dependent.  */
16447
16448 bool
16449 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
16450 {
16451   int i;
16452
16453   if (!processing_template_decl)
16454     return false;
16455
16456   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
16457     {
16458       tree decl = TREE_VEC_ELT (declv, i);
16459       tree init = TREE_VEC_ELT (initv, i);
16460       tree cond = TREE_VEC_ELT (condv, i);
16461       tree incr = TREE_VEC_ELT (incrv, i);
16462
16463       if (type_dependent_expression_p (decl))
16464         return true;
16465
16466       if (init && type_dependent_expression_p (init))
16467         return true;
16468
16469       if (type_dependent_expression_p (cond))
16470         return true;
16471
16472       if (COMPARISON_CLASS_P (cond)
16473           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
16474               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
16475         return true;
16476
16477       if (TREE_CODE (incr) == MODOP_EXPR)
16478         {
16479           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
16480               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
16481             return true;
16482         }
16483       else if (type_dependent_expression_p (incr))
16484         return true;
16485       else if (TREE_CODE (incr) == MODIFY_EXPR)
16486         {
16487           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
16488             return true;
16489           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
16490             {
16491               tree t = TREE_OPERAND (incr, 1);
16492               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
16493                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
16494                 return true;
16495             }
16496         }
16497     }
16498
16499   return false;
16500 }
16501
16502 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16503    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16504    no such TYPE can be found.  Note that this function peers inside
16505    uninstantiated templates and therefore should be used only in
16506    extremely limited situations.  ONLY_CURRENT_P restricts this
16507    peering to the currently open classes hierarchy (which is required
16508    when comparing types).  */
16509
16510 tree
16511 resolve_typename_type (tree type, bool only_current_p)
16512 {
16513   tree scope;
16514   tree name;
16515   tree decl;
16516   int quals;
16517   tree pushed_scope;
16518   tree result;
16519
16520   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16521
16522   scope = TYPE_CONTEXT (type);
16523   name = TYPE_IDENTIFIER (type);
16524
16525   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16526      it first before we can figure out what NAME refers to.  */
16527   if (TREE_CODE (scope) == TYPENAME_TYPE)
16528     scope = resolve_typename_type (scope, only_current_p);
16529   /* If we don't know what SCOPE refers to, then we cannot resolve the
16530      TYPENAME_TYPE.  */
16531   if (TREE_CODE (scope) == TYPENAME_TYPE)
16532     return type;
16533   /* If the SCOPE is a template type parameter, we have no way of
16534      resolving the name.  */
16535   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16536     return type;
16537   /* If the SCOPE is not the current instantiation, there's no reason
16538      to look inside it.  */
16539   if (only_current_p && !currently_open_class (scope))
16540     return type;
16541   /* If SCOPE isn't the template itself, it will not have a valid
16542      TYPE_FIELDS list.  */
16543   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16544     /* scope is either the template itself or a compatible instantiation
16545        like X<T>, so look up the name in the original template.  */
16546     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16547   else
16548     /* scope is a partial instantiation, so we can't do the lookup or we
16549        will lose the template arguments.  */
16550     return type;
16551   /* Enter the SCOPE so that name lookup will be resolved as if we
16552      were in the class definition.  In particular, SCOPE will no
16553      longer be considered a dependent type.  */
16554   pushed_scope = push_scope (scope);
16555   /* Look up the declaration.  */
16556   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16557
16558   result = NULL_TREE;
16559   
16560   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16561      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16562   if (!decl)
16563     /*nop*/;
16564   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16565            && TREE_CODE (decl) == TYPE_DECL)
16566     {
16567       result = TREE_TYPE (decl);
16568       if (result == error_mark_node)
16569         result = NULL_TREE;
16570     }
16571   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16572            && DECL_CLASS_TEMPLATE_P (decl))
16573     {
16574       tree tmpl;
16575       tree args;
16576       /* Obtain the template and the arguments.  */
16577       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16578       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16579       /* Instantiate the template.  */
16580       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16581                                       /*entering_scope=*/0,
16582                                       tf_error | tf_user);
16583       if (result == error_mark_node)
16584         result = NULL_TREE;
16585     }
16586   
16587   /* Leave the SCOPE.  */
16588   if (pushed_scope)
16589     pop_scope (pushed_scope);
16590
16591   /* If we failed to resolve it, return the original typename.  */
16592   if (!result)
16593     return type;
16594   
16595   /* If lookup found a typename type, resolve that too.  */
16596   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16597     {
16598       /* Ill-formed programs can cause infinite recursion here, so we
16599          must catch that.  */
16600       TYPENAME_IS_RESOLVING_P (type) = 1;
16601       result = resolve_typename_type (result, only_current_p);
16602       TYPENAME_IS_RESOLVING_P (type) = 0;
16603     }
16604   
16605   /* Qualify the resulting type.  */
16606   quals = cp_type_quals (type);
16607   if (quals)
16608     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16609
16610   return result;
16611 }
16612
16613 /* EXPR is an expression which is not type-dependent.  Return a proxy
16614    for EXPR that can be used to compute the types of larger
16615    expressions containing EXPR.  */
16616
16617 tree
16618 build_non_dependent_expr (tree expr)
16619 {
16620   tree inner_expr;
16621
16622   /* Preserve null pointer constants so that the type of things like
16623      "p == 0" where "p" is a pointer can be determined.  */
16624   if (null_ptr_cst_p (expr))
16625     return expr;
16626   /* Preserve OVERLOADs; the functions must be available to resolve
16627      types.  */
16628   inner_expr = expr;
16629   if (TREE_CODE (inner_expr) == STMT_EXPR)
16630     inner_expr = stmt_expr_value_expr (inner_expr);
16631   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16632     inner_expr = TREE_OPERAND (inner_expr, 0);
16633   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16634     inner_expr = TREE_OPERAND (inner_expr, 1);
16635   if (is_overloaded_fn (inner_expr)
16636       || TREE_CODE (inner_expr) == OFFSET_REF)
16637     return expr;
16638   /* There is no need to return a proxy for a variable.  */
16639   if (TREE_CODE (expr) == VAR_DECL)
16640     return expr;
16641   /* Preserve string constants; conversions from string constants to
16642      "char *" are allowed, even though normally a "const char *"
16643      cannot be used to initialize a "char *".  */
16644   if (TREE_CODE (expr) == STRING_CST)
16645     return expr;
16646   /* Preserve arithmetic constants, as an optimization -- there is no
16647      reason to create a new node.  */
16648   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16649     return expr;
16650   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16651      There is at least one place where we want to know that a
16652      particular expression is a throw-expression: when checking a ?:
16653      expression, there are special rules if the second or third
16654      argument is a throw-expression.  */
16655   if (TREE_CODE (expr) == THROW_EXPR)
16656     return expr;
16657
16658   if (TREE_CODE (expr) == COND_EXPR)
16659     return build3 (COND_EXPR,
16660                    TREE_TYPE (expr),
16661                    TREE_OPERAND (expr, 0),
16662                    (TREE_OPERAND (expr, 1)
16663                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16664                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16665                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16666   if (TREE_CODE (expr) == COMPOUND_EXPR
16667       && !COMPOUND_EXPR_OVERLOADED (expr))
16668     return build2 (COMPOUND_EXPR,
16669                    TREE_TYPE (expr),
16670                    TREE_OPERAND (expr, 0),
16671                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16672
16673   /* If the type is unknown, it can't really be non-dependent */
16674   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16675
16676   /* Otherwise, build a NON_DEPENDENT_EXPR.
16677
16678      REFERENCE_TYPEs are not stripped for expressions in templates
16679      because doing so would play havoc with mangling.  Consider, for
16680      example:
16681
16682        template <typename T> void f<T& g>() { g(); }
16683
16684      In the body of "f", the expression for "g" will have
16685      REFERENCE_TYPE, even though the standard says that it should
16686      not.  The reason is that we must preserve the syntactic form of
16687      the expression so that mangling (say) "f<g>" inside the body of
16688      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16689      stripped here.  */
16690   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16691 }
16692
16693 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16694    Return a new TREE_LIST with the various arguments replaced with
16695    equivalent non-dependent expressions.  */
16696
16697 tree
16698 build_non_dependent_args (tree args)
16699 {
16700   tree a;
16701   tree new_args;
16702
16703   new_args = NULL_TREE;
16704   for (a = args; a; a = TREE_CHAIN (a))
16705     new_args = tree_cons (NULL_TREE,
16706                           build_non_dependent_expr (TREE_VALUE (a)),
16707                           new_args);
16708   return nreverse (new_args);
16709 }
16710
16711 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
16712    with a level one deeper than the actual template parms.  */
16713
16714 tree
16715 make_auto (void)
16716 {
16717   tree au;
16718
16719   /* ??? Is it worth caching this for multiple autos at the same level?  */
16720   au = cxx_make_type (TEMPLATE_TYPE_PARM);
16721   TYPE_NAME (au) = build_decl (TYPE_DECL, get_identifier ("auto"), au);
16722   TYPE_STUB_DECL (au) = TYPE_NAME (au);
16723   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
16724     (0, processing_template_decl + 1, processing_template_decl + 1,
16725      TYPE_NAME (au), NULL_TREE);
16726   TYPE_CANONICAL (au) = canonical_type_parameter (au);
16727   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
16728   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
16729
16730   return au;
16731 }
16732
16733 /* Replace auto in TYPE with std::initializer_list<auto>.  */
16734
16735 static tree
16736 listify_autos (tree type, tree auto_node)
16737 {
16738   tree std_init_list = namespace_binding
16739     (get_identifier ("initializer_list"), std_node);
16740   tree argvec;
16741   tree init_auto;
16742   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
16743     {    
16744       error ("deducing auto from brace-enclosed initializer list requires "
16745              "#include <initializer_list>");
16746       return error_mark_node;
16747     }
16748   argvec = make_tree_vec (1);
16749   TREE_VEC_ELT (argvec, 0) = auto_node;
16750   init_auto = lookup_template_class (std_init_list, argvec, NULL_TREE,
16751                                      NULL_TREE, 0, tf_warning_or_error);
16752
16753   TREE_VEC_ELT (argvec, 0) = init_auto;
16754   if (processing_template_decl)
16755     argvec = add_to_template_args (current_template_args (), argvec);
16756   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
16757 }
16758
16759 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
16760    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
16761
16762 tree
16763 do_auto_deduction (tree type, tree init, tree auto_node)
16764 {
16765   tree parms, args, tparms, targs;
16766   int val;
16767
16768   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
16769      with either a new invented type template parameter U or, if the
16770      initializer is a braced-init-list (8.5.4), with
16771      std::initializer_list<U>.  */
16772   if (BRACE_ENCLOSED_INITIALIZER_P (init))
16773     type = listify_autos (type, auto_node);
16774
16775   parms = build_tree_list (NULL_TREE, type);
16776   args = build_tree_list (NULL_TREE, init);
16777   tparms = make_tree_vec (1);
16778   targs = make_tree_vec (1);
16779   TREE_VEC_ELT (tparms, 0)
16780     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
16781   val = type_unification_real (tparms, targs, parms, args, 0,
16782                                DEDUCE_CALL, LOOKUP_NORMAL);
16783   if (val > 0)
16784     {
16785       error ("unable to deduce %qT from %qE", type, init);
16786       return error_mark_node;
16787     }
16788
16789   if (processing_template_decl)
16790     targs = add_to_template_args (current_template_args (), targs);
16791   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
16792 }
16793
16794 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
16795    result.  */
16796
16797 tree
16798 splice_late_return_type (tree type, tree late_return_type)
16799 {
16800   tree argvec;
16801
16802   if (late_return_type == NULL_TREE)
16803     return type;
16804   argvec = make_tree_vec (1);
16805   TREE_VEC_ELT (argvec, 0) = late_return_type;
16806   if (processing_template_decl)
16807     argvec = add_to_template_args (current_template_args (), argvec);
16808   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
16809 }
16810
16811 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
16812
16813 bool
16814 is_auto (const_tree type)
16815 {
16816   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16817       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
16818     return true;
16819   else
16820     return false;
16821 }
16822
16823 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
16824    appear as a type-specifier for the declaration in question, we don't
16825    have to look through the whole type.  */
16826
16827 tree
16828 type_uses_auto (tree type)
16829 {
16830   enum tree_code code;
16831   if (is_auto (type))
16832     return type;
16833
16834   code = TREE_CODE (type);
16835
16836   if (code == POINTER_TYPE || code == REFERENCE_TYPE
16837       || code == OFFSET_TYPE || code == FUNCTION_TYPE
16838       || code == METHOD_TYPE || code == ARRAY_TYPE)
16839     return type_uses_auto (TREE_TYPE (type));
16840
16841   if (TYPE_PTRMEMFUNC_P (type))
16842     return type_uses_auto (TREE_TYPE (TREE_TYPE
16843                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
16844
16845   return NULL_TREE;
16846 }
16847
16848 #include "gt-cp-pt.h"