OSDN Git Service

/testsuite
[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  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*);
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);
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 int template_args_equal (tree, tree);
162 static void tsubst_default_arguments (tree);
163 static tree for_each_template_parm_r (tree *, int *, void *);
164 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
165 static void copy_default_args_to_explicit_spec (tree);
166 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
167 static int eq_local_specializations (const void *, const void *);
168 static bool dependent_template_arg_p (tree);
169 static bool any_template_arguments_need_structural_equality_p (tree);
170 static bool dependent_type_p_r (tree);
171 static tree tsubst (tree, tree, tsubst_flags_t, tree);
172 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
173 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
174 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
175
176 /* Make the current scope suitable for access checking when we are
177    processing T.  T can be FUNCTION_DECL for instantiated function
178    template, or VAR_DECL for static member variable (need by
179    instantiate_decl).  */
180
181 static void
182 push_access_scope (tree t)
183 {
184   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
185               || TREE_CODE (t) == VAR_DECL);
186
187   if (DECL_FRIEND_CONTEXT (t))
188     push_nested_class (DECL_FRIEND_CONTEXT (t));
189   else if (DECL_CLASS_SCOPE_P (t))
190     push_nested_class (DECL_CONTEXT (t));
191   else
192     push_to_top_level ();
193
194   if (TREE_CODE (t) == FUNCTION_DECL)
195     {
196       saved_access_scope = tree_cons
197         (NULL_TREE, current_function_decl, saved_access_scope);
198       current_function_decl = t;
199     }
200 }
201
202 /* Restore the scope set up by push_access_scope.  T is the node we
203    are processing.  */
204
205 static void
206 pop_access_scope (tree t)
207 {
208   if (TREE_CODE (t) == FUNCTION_DECL)
209     {
210       current_function_decl = TREE_VALUE (saved_access_scope);
211       saved_access_scope = TREE_CHAIN (saved_access_scope);
212     }
213
214   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
215     pop_nested_class ();
216   else
217     pop_from_top_level ();
218 }
219
220 /* Do any processing required when DECL (a member template
221    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
222    to DECL, unless it is a specialization, in which case the DECL
223    itself is returned.  */
224
225 tree
226 finish_member_template_decl (tree decl)
227 {
228   if (decl == error_mark_node)
229     return error_mark_node;
230
231   gcc_assert (DECL_P (decl));
232
233   if (TREE_CODE (decl) == TYPE_DECL)
234     {
235       tree type;
236
237       type = TREE_TYPE (decl);
238       if (IS_AGGR_TYPE (type)
239           && CLASSTYPE_TEMPLATE_INFO (type)
240           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
241         {
242           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
243           check_member_template (tmpl);
244           return tmpl;
245         }
246       return NULL_TREE;
247     }
248   else if (TREE_CODE (decl) == FIELD_DECL)
249     error ("data member %qD cannot be a member template", decl);
250   else if (DECL_TEMPLATE_INFO (decl))
251     {
252       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
253         {
254           check_member_template (DECL_TI_TEMPLATE (decl));
255           return DECL_TI_TEMPLATE (decl);
256         }
257       else
258         return decl;
259     }
260   else
261     error ("invalid member template declaration %qD", decl);
262
263   return error_mark_node;
264 }
265
266 /* Returns the template nesting level of the indicated class TYPE.
267
268    For example, in:
269      template <class T>
270      struct A
271      {
272        template <class U>
273        struct B {};
274      };
275
276    A<T>::B<U> has depth two, while A<T> has depth one.
277    Both A<T>::B<int> and A<int>::B<U> have depth one, if
278    they are instantiations, not specializations.
279
280    This function is guaranteed to return 0 if passed NULL_TREE so
281    that, for example, `template_class_depth (current_class_type)' is
282    always safe.  */
283
284 int
285 template_class_depth (tree type)
286 {
287   int depth;
288
289   for (depth = 0;
290        type && TREE_CODE (type) != NAMESPACE_DECL;
291        type = (TREE_CODE (type) == FUNCTION_DECL)
292          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
293     {
294       if (TREE_CODE (type) != FUNCTION_DECL)
295         {
296           if (CLASSTYPE_TEMPLATE_INFO (type)
297               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
298               && uses_template_parms (CLASSTYPE_TI_ARGS (type)))
299             ++depth;
300         }
301       else
302         {
303           if (DECL_TEMPLATE_INFO (type)
304               && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
305               && uses_template_parms (DECL_TI_ARGS (type)))
306             ++depth;
307         }
308     }
309
310   return depth;
311 }
312
313 /* Subroutine of maybe_begin_member_template_processing.
314    Returns true if processing DECL needs us to push template parms.  */
315
316 static bool
317 inline_needs_template_parms (tree decl)
318 {
319   if (! DECL_TEMPLATE_INFO (decl))
320     return false;
321
322   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
323           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
324 }
325
326 /* Subroutine of maybe_begin_member_template_processing.
327    Push the template parms in PARMS, starting from LEVELS steps into the
328    chain, and ending at the beginning, since template parms are listed
329    innermost first.  */
330
331 static void
332 push_inline_template_parms_recursive (tree parmlist, int levels)
333 {
334   tree parms = TREE_VALUE (parmlist);
335   int i;
336
337   if (levels > 1)
338     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
339
340   ++processing_template_decl;
341   current_template_parms
342     = tree_cons (size_int (processing_template_decl),
343                  parms, current_template_parms);
344   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
345
346   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
347                NULL);
348   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
349     {
350       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
351
352       if (parm == error_mark_node)
353         continue;
354
355       gcc_assert (DECL_P (parm));
356
357       switch (TREE_CODE (parm))
358         {
359         case TYPE_DECL:
360         case TEMPLATE_DECL:
361           pushdecl (parm);
362           break;
363
364         case PARM_DECL:
365           {
366             /* Make a CONST_DECL as is done in process_template_parm.
367                It is ugly that we recreate this here; the original
368                version built in process_template_parm is no longer
369                available.  */
370             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
371                                     TREE_TYPE (parm));
372             DECL_ARTIFICIAL (decl) = 1;
373             TREE_CONSTANT (decl) = 1;
374             TREE_INVARIANT (decl) = 1;
375             TREE_READONLY (decl) = 1;
376             DECL_INITIAL (decl) = DECL_INITIAL (parm);
377             SET_DECL_TEMPLATE_PARM_P (decl);
378             pushdecl (decl);
379           }
380           break;
381
382         default:
383           gcc_unreachable ();
384         }
385     }
386 }
387
388 /* Restore the template parameter context for a member template or
389    a friend template defined in a class definition.  */
390
391 void
392 maybe_begin_member_template_processing (tree decl)
393 {
394   tree parms;
395   int levels = 0;
396
397   if (inline_needs_template_parms (decl))
398     {
399       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
400       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
401
402       if (DECL_TEMPLATE_SPECIALIZATION (decl))
403         {
404           --levels;
405           parms = TREE_CHAIN (parms);
406         }
407
408       push_inline_template_parms_recursive (parms, levels);
409     }
410
411   /* Remember how many levels of template parameters we pushed so that
412      we can pop them later.  */
413   VEC_safe_push (int, heap, inline_parm_levels, levels);
414 }
415
416 /* Undo the effects of maybe_begin_member_template_processing.  */
417
418 void
419 maybe_end_member_template_processing (void)
420 {
421   int i;
422   int last;
423
424   if (VEC_length (int, inline_parm_levels) == 0)
425     return;
426
427   last = VEC_pop (int, inline_parm_levels);
428   for (i = 0; i < last; ++i)
429     {
430       --processing_template_decl;
431       current_template_parms = TREE_CHAIN (current_template_parms);
432       poplevel (0, 0, 0);
433     }
434 }
435
436 /* Return a new template argument vector which contains all of ARGS,
437    but has as its innermost set of arguments the EXTRA_ARGS.  */
438
439 static tree
440 add_to_template_args (tree args, tree extra_args)
441 {
442   tree new_args;
443   int extra_depth;
444   int i;
445   int j;
446
447   extra_depth = TMPL_ARGS_DEPTH (extra_args);
448   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
449
450   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
451     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
452
453   for (j = 1; j <= extra_depth; ++j, ++i)
454     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
455
456   return new_args;
457 }
458
459 /* Like add_to_template_args, but only the outermost ARGS are added to
460    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
461    (EXTRA_ARGS) levels are added.  This function is used to combine
462    the template arguments from a partial instantiation with the
463    template arguments used to attain the full instantiation from the
464    partial instantiation.  */
465
466 static tree
467 add_outermost_template_args (tree args, tree extra_args)
468 {
469   tree new_args;
470
471   /* If there are more levels of EXTRA_ARGS than there are ARGS,
472      something very fishy is going on.  */
473   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
474
475   /* If *all* the new arguments will be the EXTRA_ARGS, just return
476      them.  */
477   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
478     return extra_args;
479
480   /* For the moment, we make ARGS look like it contains fewer levels.  */
481   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
482
483   new_args = add_to_template_args (args, extra_args);
484
485   /* Now, we restore ARGS to its full dimensions.  */
486   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
487
488   return new_args;
489 }
490
491 /* Return the N levels of innermost template arguments from the ARGS.  */
492
493 tree
494 get_innermost_template_args (tree args, int n)
495 {
496   tree new_args;
497   int extra_levels;
498   int i;
499
500   gcc_assert (n >= 0);
501
502   /* If N is 1, just return the innermost set of template arguments.  */
503   if (n == 1)
504     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
505
506   /* If we're not removing anything, just return the arguments we were
507      given.  */
508   extra_levels = TMPL_ARGS_DEPTH (args) - n;
509   gcc_assert (extra_levels >= 0);
510   if (extra_levels == 0)
511     return args;
512
513   /* Make a new set of arguments, not containing the outer arguments.  */
514   new_args = make_tree_vec (n);
515   for (i = 1; i <= n; ++i)
516     SET_TMPL_ARGS_LEVEL (new_args, i,
517                          TMPL_ARGS_LEVEL (args, i + extra_levels));
518
519   return new_args;
520 }
521
522 /* The inverse of get_innermost_template_args: Return all but the innermost
523    EXTRA_LEVELS levels of template arguments from the ARGS.  */
524
525 static tree
526 strip_innermost_template_args (tree args, int extra_levels)
527 {
528   tree new_args;
529   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
530   int i;
531
532   gcc_assert (n >= 0);
533
534   /* If N is 1, just return the outermost set of template arguments.  */
535   if (n == 1)
536     return TMPL_ARGS_LEVEL (args, 1);
537
538   /* If we're not removing anything, just return the arguments we were
539      given.  */
540   gcc_assert (extra_levels >= 0);
541   if (extra_levels == 0)
542     return args;
543
544   /* Make a new set of arguments, not containing the inner arguments.  */
545   new_args = make_tree_vec (n);
546   for (i = 1; i <= n; ++i)
547     SET_TMPL_ARGS_LEVEL (new_args, i,
548                          TMPL_ARGS_LEVEL (args, i));
549
550   return new_args;
551 }
552
553 /* We've got a template header coming up; push to a new level for storing
554    the parms.  */
555
556 void
557 begin_template_parm_list (void)
558 {
559   /* We use a non-tag-transparent scope here, which causes pushtag to
560      put tags in this scope, rather than in the enclosing class or
561      namespace scope.  This is the right thing, since we want
562      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
563      global template class, push_template_decl handles putting the
564      TEMPLATE_DECL into top-level scope.  For a nested template class,
565      e.g.:
566
567        template <class T> struct S1 {
568          template <class T> struct S2 {};
569        };
570
571      pushtag contains special code to call pushdecl_with_scope on the
572      TEMPLATE_DECL for S2.  */
573   begin_scope (sk_template_parms, NULL);
574   ++processing_template_decl;
575   ++processing_template_parmlist;
576   note_template_header (0);
577 }
578
579 /* This routine is called when a specialization is declared.  If it is
580    invalid to declare a specialization here, an error is reported and
581    false is returned, otherwise this routine will return true.  */
582
583 static bool
584 check_specialization_scope (void)
585 {
586   tree scope = current_scope ();
587
588   /* [temp.expl.spec]
589
590      An explicit specialization shall be declared in the namespace of
591      which the template is a member, or, for member templates, in the
592      namespace of which the enclosing class or enclosing class
593      template is a member.  An explicit specialization of a member
594      function, member class or static data member of a class template
595      shall be declared in the namespace of which the class template
596      is a member.  */
597   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
598     {
599       error ("explicit specialization in non-namespace scope %qD", scope);
600       return false;
601     }
602
603   /* [temp.expl.spec]
604
605      In an explicit specialization declaration for a member of a class
606      template or a member template that appears in namespace scope,
607      the member template and some of its enclosing class templates may
608      remain unspecialized, except that the declaration shall not
609      explicitly specialize a class member template if its enclosing
610      class templates are not explicitly specialized as well.  */
611   if (current_template_parms)
612     {
613       error ("enclosing class templates are not explicitly specialized");
614       return false;
615     }
616
617   return true;
618 }
619
620 /* We've just seen template <>.  */
621
622 bool
623 begin_specialization (void)
624 {
625   begin_scope (sk_template_spec, NULL);
626   note_template_header (1);
627   return check_specialization_scope ();
628 }
629
630 /* Called at then end of processing a declaration preceded by
631    template<>.  */
632
633 void
634 end_specialization (void)
635 {
636   finish_scope ();
637   reset_specialization ();
638 }
639
640 /* Any template <>'s that we have seen thus far are not referring to a
641    function specialization.  */
642
643 void
644 reset_specialization (void)
645 {
646   processing_specialization = 0;
647   template_header_count = 0;
648 }
649
650 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
651    it was of the form template <>.  */
652
653 static void
654 note_template_header (int specialization)
655 {
656   processing_specialization = specialization;
657   template_header_count++;
658 }
659
660 /* We're beginning an explicit instantiation.  */
661
662 void
663 begin_explicit_instantiation (void)
664 {
665   gcc_assert (!processing_explicit_instantiation);
666   processing_explicit_instantiation = true;
667 }
668
669
670 void
671 end_explicit_instantiation (void)
672 {
673   gcc_assert (processing_explicit_instantiation);
674   processing_explicit_instantiation = false;
675 }
676
677 /* An explicit specialization or partial specialization TMPL is being
678    declared.  Check that the namespace in which the specialization is
679    occurring is permissible.  Returns false iff it is invalid to
680    specialize TMPL in the current namespace.  */
681
682 static bool
683 check_specialization_namespace (tree tmpl)
684 {
685   tree tpl_ns = decl_namespace_context (tmpl);
686
687   /* [tmpl.expl.spec]
688
689      An explicit specialization shall be declared in the namespace of
690      which the template is a member, or, for member templates, in the
691      namespace of which the enclosing class or enclosing class
692      template is a member.  An explicit specialization of a member
693      function, member class or static data member of a class template
694      shall be declared in the namespace of which the class template is
695      a member.  */
696   if (is_associated_namespace (current_namespace, tpl_ns))
697     /* Same or super-using namespace.  */
698     return true;
699   else
700     {
701       pedwarn ("specialization of %qD in different namespace", tmpl);
702       pedwarn ("  from definition of %q+#D", tmpl);
703       return false;
704     }
705 }
706
707 /* SPEC is an explicit instantiation.  Check that it is valid to
708    perform this explicit instantiation in the current namespace.  */
709
710 static void
711 check_explicit_instantiation_namespace (tree spec)
712 {
713   tree ns;
714
715   /* DR 275: An explicit instantiation shall appear in an enclosing
716      namespace of its template.  */
717   ns = decl_namespace_context (spec);
718   if (!is_ancestor (current_namespace, ns))
719     pedwarn ("explicit instantiation of %qD in namespace %qD "
720              "(which does not enclose namespace %qD)",
721              spec, current_namespace, ns);
722 }
723
724 /* The TYPE is being declared.  If it is a template type, that means it
725    is a partial specialization.  Do appropriate error-checking.  */
726
727 tree
728 maybe_process_partial_specialization (tree type)
729 {
730   tree context;
731
732   if (type == error_mark_node)
733     return error_mark_node;
734
735   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
736     {
737       error ("name of class shadows template template parameter %qD",
738              TYPE_NAME (type));
739       return error_mark_node;
740     }
741
742   context = TYPE_CONTEXT (type);
743
744   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
745     {
746       /* This is for ordinary explicit specialization and partial
747          specialization of a template class such as:
748
749            template <> class C<int>;
750
751          or:
752
753            template <class T> class C<T*>;
754
755          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
756
757       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
758           && !COMPLETE_TYPE_P (type))
759         {
760           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
761           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
762           if (processing_template_decl)
763             push_template_decl (TYPE_MAIN_DECL (type));
764         }
765       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
766         error ("specialization of %qT after instantiation", type);
767     }
768   else if (CLASS_TYPE_P (type)
769            && !CLASSTYPE_USE_TEMPLATE (type)
770            && CLASSTYPE_TEMPLATE_INFO (type)
771            && context && CLASS_TYPE_P (context)
772            && CLASSTYPE_TEMPLATE_INFO (context))
773     {
774       /* This is for an explicit specialization of member class
775          template according to [temp.expl.spec/18]:
776
777            template <> template <class U> class C<int>::D;
778
779          The context `C<int>' must be an implicit instantiation.
780          Otherwise this is just a member class template declared
781          earlier like:
782
783            template <> class C<int> { template <class U> class D; };
784            template <> template <class U> class C<int>::D;
785
786          In the first case, `C<int>::D' is a specialization of `C<T>::D'
787          while in the second case, `C<int>::D' is a primary template
788          and `C<T>::D' may not exist.  */
789
790       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
791           && !COMPLETE_TYPE_P (type))
792         {
793           tree t;
794
795           if (current_namespace
796               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
797             {
798               pedwarn ("specializing %q#T in different namespace", type);
799               pedwarn ("  from definition of %q+#D",
800                        CLASSTYPE_TI_TEMPLATE (type));
801             }
802
803           /* Check for invalid specialization after instantiation:
804
805                template <> template <> class C<int>::D<int>;
806                template <> template <class U> class C<int>::D;  */
807
808           for (t = DECL_TEMPLATE_INSTANTIATIONS
809                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
810                t; t = TREE_CHAIN (t))
811             if (TREE_VALUE (t) != type
812                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
813               error ("specialization %qT after instantiation %qT",
814                      type, TREE_VALUE (t));
815
816           /* Mark TYPE as a specialization.  And as a result, we only
817              have one level of template argument for the innermost
818              class template.  */
819           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
820           CLASSTYPE_TI_ARGS (type)
821             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
822         }
823     }
824   else if (processing_specialization)
825     {
826       error ("explicit specialization of non-template %qT", type);
827       return error_mark_node;
828     }
829
830   return type;
831 }
832
833 /* Returns nonzero if we can optimize the retrieval of specializations
834    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
835    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
836
837 static inline bool
838 optimize_specialization_lookup_p (tree tmpl)
839 {
840   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
841           && DECL_CLASS_SCOPE_P (tmpl)
842           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
843              parameter.  */
844           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
845           /* The optimized lookup depends on the fact that the
846              template arguments for the member function template apply
847              purely to the containing class, which is not true if the
848              containing class is an explicit or partial
849              specialization.  */
850           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
851           && !DECL_MEMBER_TEMPLATE_P (tmpl)
852           && !DECL_CONV_FN_P (tmpl)
853           /* It is possible to have a template that is not a member
854              template and is not a member of a template class:
855
856              template <typename T>
857              struct S { friend A::f(); };
858
859              Here, the friend function is a template, but the context does
860              not have template information.  The optimized lookup relies
861              on having ARGS be the template arguments for both the class
862              and the function template.  */
863           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
864 }
865
866 /* Retrieve the specialization (in the sense of [temp.spec] - a
867    specialization is either an instantiation or an explicit
868    specialization) of TMPL for the given template ARGS.  If there is
869    no such specialization, return NULL_TREE.  The ARGS are a vector of
870    arguments, or a vector of vectors of arguments, in the case of
871    templates with more than one level of parameters.
872
873    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
874    then we search for a partial specialization matching ARGS.  This
875    parameter is ignored if TMPL is not a class template.  */
876
877 static tree
878 retrieve_specialization (tree tmpl, tree args,
879                          bool class_specializations_p)
880 {
881   if (args == error_mark_node)
882     return NULL_TREE;
883
884   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
885
886   /* There should be as many levels of arguments as there are
887      levels of parameters.  */
888   gcc_assert (TMPL_ARGS_DEPTH (args)
889               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
890
891   if (optimize_specialization_lookup_p (tmpl))
892     {
893       tree class_template;
894       tree class_specialization;
895       VEC(tree,gc) *methods;
896       tree fns;
897       int idx;
898
899       /* The template arguments actually apply to the containing
900          class.  Find the class specialization with those
901          arguments.  */
902       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
903       class_specialization
904         = retrieve_specialization (class_template, args,
905                                    /*class_specializations_p=*/false);
906       if (!class_specialization)
907         return NULL_TREE;
908       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
909          for the specialization.  */
910       idx = class_method_index_for_fn (class_specialization, tmpl);
911       if (idx == -1)
912         return NULL_TREE;
913       /* Iterate through the methods with the indicated name, looking
914          for the one that has an instance of TMPL.  */
915       methods = CLASSTYPE_METHOD_VEC (class_specialization);
916       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
917         {
918           tree fn = OVL_CURRENT (fns);
919           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
920             return fn;
921         }
922       return NULL_TREE;
923     }
924   else
925     {
926       tree *sp;
927       tree *head;
928
929       /* Class templates store their instantiations on the
930          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
931          DECL_TEMPLATE_SPECIALIZATIONS list.  */
932       if (!class_specializations_p
933           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
934           && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
935         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
936       else
937         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
938       head = sp;
939       /* Iterate through the list until we find a matching template.  */
940       while (*sp != NULL_TREE)
941         {
942           tree spec = *sp;
943
944           if (comp_template_args (TREE_PURPOSE (spec), args))
945             {
946               /* Use the move-to-front heuristic to speed up future
947                  searches.  */
948               if (spec != *head)
949                 {
950                   *sp = TREE_CHAIN (*sp);
951                   TREE_CHAIN (spec) = *head;
952                   *head = spec;
953                 }
954               return TREE_VALUE (spec);
955             }
956           sp = &TREE_CHAIN (spec);
957         }
958     }
959
960   return NULL_TREE;
961 }
962
963 /* Like retrieve_specialization, but for local declarations.  */
964
965 static tree
966 retrieve_local_specialization (tree tmpl)
967 {
968   tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
969                                           htab_hash_pointer (tmpl));
970   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
971 }
972
973 /* Returns nonzero iff DECL is a specialization of TMPL.  */
974
975 int
976 is_specialization_of (tree decl, tree tmpl)
977 {
978   tree t;
979
980   if (TREE_CODE (decl) == FUNCTION_DECL)
981     {
982       for (t = decl;
983            t != NULL_TREE;
984            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
985         if (t == tmpl)
986           return 1;
987     }
988   else
989     {
990       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
991
992       for (t = TREE_TYPE (decl);
993            t != NULL_TREE;
994            t = CLASSTYPE_USE_TEMPLATE (t)
995              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
996         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
997           return 1;
998     }
999
1000   return 0;
1001 }
1002
1003 /* Returns nonzero iff DECL is a specialization of friend declaration
1004    FRIEND according to [temp.friend].  */
1005
1006 bool
1007 is_specialization_of_friend (tree decl, tree friend)
1008 {
1009   bool need_template = true;
1010   int template_depth;
1011
1012   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1013               || TREE_CODE (decl) == TYPE_DECL);
1014
1015   /* For [temp.friend/6] when FRIEND is an ordinary member function
1016      of a template class, we want to check if DECL is a specialization
1017      if this.  */
1018   if (TREE_CODE (friend) == FUNCTION_DECL
1019       && DECL_TEMPLATE_INFO (friend)
1020       && !DECL_USE_TEMPLATE (friend))
1021     {
1022       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1023       friend = DECL_TI_TEMPLATE (friend);
1024       need_template = false;
1025     }
1026   else if (TREE_CODE (friend) == TEMPLATE_DECL
1027            && !PRIMARY_TEMPLATE_P (friend))
1028     need_template = false;
1029
1030   /* There is nothing to do if this is not a template friend.  */
1031   if (TREE_CODE (friend) != TEMPLATE_DECL)
1032     return false;
1033
1034   if (is_specialization_of (decl, friend))
1035     return true;
1036
1037   /* [temp.friend/6]
1038      A member of a class template may be declared to be a friend of a
1039      non-template class.  In this case, the corresponding member of
1040      every specialization of the class template is a friend of the
1041      class granting friendship.
1042
1043      For example, given a template friend declaration
1044
1045        template <class T> friend void A<T>::f();
1046
1047      the member function below is considered a friend
1048
1049        template <> struct A<int> {
1050          void f();
1051        };
1052
1053      For this type of template friend, TEMPLATE_DEPTH below will be
1054      nonzero.  To determine if DECL is a friend of FRIEND, we first
1055      check if the enclosing class is a specialization of another.  */
1056
1057   template_depth = template_class_depth (DECL_CONTEXT (friend));
1058   if (template_depth
1059       && DECL_CLASS_SCOPE_P (decl)
1060       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1061                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1062     {
1063       /* Next, we check the members themselves.  In order to handle
1064          a few tricky cases, such as when FRIEND's are
1065
1066            template <class T> friend void A<T>::g(T t);
1067            template <class T> template <T t> friend void A<T>::h();
1068
1069          and DECL's are
1070
1071            void A<int>::g(int);
1072            template <int> void A<int>::h();
1073
1074          we need to figure out ARGS, the template arguments from
1075          the context of DECL.  This is required for template substitution
1076          of `T' in the function parameter of `g' and template parameter
1077          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1078
1079       tree context = DECL_CONTEXT (decl);
1080       tree args = NULL_TREE;
1081       int current_depth = 0;
1082
1083       while (current_depth < template_depth)
1084         {
1085           if (CLASSTYPE_TEMPLATE_INFO (context))
1086             {
1087               if (current_depth == 0)
1088                 args = TYPE_TI_ARGS (context);
1089               else
1090                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1091               current_depth++;
1092             }
1093           context = TYPE_CONTEXT (context);
1094         }
1095
1096       if (TREE_CODE (decl) == FUNCTION_DECL)
1097         {
1098           bool is_template;
1099           tree friend_type;
1100           tree decl_type;
1101           tree friend_args_type;
1102           tree decl_args_type;
1103
1104           /* Make sure that both DECL and FRIEND are templates or
1105              non-templates.  */
1106           is_template = DECL_TEMPLATE_INFO (decl)
1107                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1108           if (need_template ^ is_template)
1109             return false;
1110           else if (is_template)
1111             {
1112               /* If both are templates, check template parameter list.  */
1113               tree friend_parms
1114                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1115                                          args, tf_none);
1116               if (!comp_template_parms
1117                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1118                       friend_parms))
1119                 return false;
1120
1121               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1122             }
1123           else
1124             decl_type = TREE_TYPE (decl);
1125
1126           friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1127                                               tf_none, NULL_TREE);
1128           if (friend_type == error_mark_node)
1129             return false;
1130
1131           /* Check if return types match.  */
1132           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1133             return false;
1134
1135           /* Check if function parameter types match, ignoring the
1136              `this' parameter.  */
1137           friend_args_type = TYPE_ARG_TYPES (friend_type);
1138           decl_args_type = TYPE_ARG_TYPES (decl_type);
1139           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1140             friend_args_type = TREE_CHAIN (friend_args_type);
1141           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1142             decl_args_type = TREE_CHAIN (decl_args_type);
1143
1144           return compparms (decl_args_type, friend_args_type);
1145         }
1146       else
1147         {
1148           /* DECL is a TYPE_DECL */
1149           bool is_template;
1150           tree decl_type = TREE_TYPE (decl);
1151
1152           /* Make sure that both DECL and FRIEND are templates or
1153              non-templates.  */
1154           is_template
1155             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1156               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1157
1158           if (need_template ^ is_template)
1159             return false;
1160           else if (is_template)
1161             {
1162               tree friend_parms;
1163               /* If both are templates, check the name of the two
1164                  TEMPLATE_DECL's first because is_friend didn't.  */
1165               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1166                   != DECL_NAME (friend))
1167                 return false;
1168
1169               /* Now check template parameter list.  */
1170               friend_parms
1171                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1172                                          args, tf_none);
1173               return comp_template_parms
1174                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1175                  friend_parms);
1176             }
1177           else
1178             return (DECL_NAME (decl)
1179                     == DECL_NAME (friend));
1180         }
1181     }
1182   return false;
1183 }
1184
1185 /* Register the specialization SPEC as a specialization of TMPL with
1186    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1187    is actually just a friend declaration.  Returns SPEC, or an
1188    equivalent prior declaration, if available.  */
1189
1190 static tree
1191 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1192 {
1193   tree fn;
1194
1195   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1196
1197   if (TREE_CODE (spec) == FUNCTION_DECL
1198       && uses_template_parms (DECL_TI_ARGS (spec)))
1199     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1200        register it; we want the corresponding TEMPLATE_DECL instead.
1201        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1202        the more obvious `uses_template_parms (spec)' to avoid problems
1203        with default function arguments.  In particular, given
1204        something like this:
1205
1206           template <class T> void f(T t1, T t = T())
1207
1208        the default argument expression is not substituted for in an
1209        instantiation unless and until it is actually needed.  */
1210     return spec;
1211
1212   fn = retrieve_specialization (tmpl, args,
1213                                 /*class_specializations_p=*/false);
1214   /* We can sometimes try to re-register a specialization that we've
1215      already got.  In particular, regenerate_decl_from_template calls
1216      duplicate_decls which will update the specialization list.  But,
1217      we'll still get called again here anyhow.  It's more convenient
1218      to simply allow this than to try to prevent it.  */
1219   if (fn == spec)
1220     return spec;
1221   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1222     {
1223       if (DECL_TEMPLATE_INSTANTIATION (fn))
1224         {
1225           if (TREE_USED (fn)
1226               || DECL_EXPLICIT_INSTANTIATION (fn))
1227             {
1228               error ("specialization of %qD after instantiation",
1229                      fn);
1230               return error_mark_node;
1231             }
1232           else
1233             {
1234               tree clone;
1235               /* This situation should occur only if the first
1236                  specialization is an implicit instantiation, the
1237                  second is an explicit specialization, and the
1238                  implicit instantiation has not yet been used.  That
1239                  situation can occur if we have implicitly
1240                  instantiated a member function and then specialized
1241                  it later.
1242
1243                  We can also wind up here if a friend declaration that
1244                  looked like an instantiation turns out to be a
1245                  specialization:
1246
1247                    template <class T> void foo(T);
1248                    class S { friend void foo<>(int) };
1249                    template <> void foo(int);
1250
1251                  We transform the existing DECL in place so that any
1252                  pointers to it become pointers to the updated
1253                  declaration.
1254
1255                  If there was a definition for the template, but not
1256                  for the specialization, we want this to look as if
1257                  there were no definition, and vice versa.  */
1258               DECL_INITIAL (fn) = NULL_TREE;
1259               duplicate_decls (spec, fn, is_friend);
1260               /* The call to duplicate_decls will have applied
1261                  [temp.expl.spec]:
1262
1263                    An explicit specialization of a function template
1264                    is inline only if it is explicitly declared to be,
1265                    and independently of whether its function template
1266                    is.
1267
1268                 to the primary function; now copy the inline bits to
1269                 the various clones.  */
1270               FOR_EACH_CLONE (clone, fn)
1271                 {
1272                   DECL_DECLARED_INLINE_P (clone)
1273                     = DECL_DECLARED_INLINE_P (fn);
1274                   DECL_INLINE (clone)
1275                     = DECL_INLINE (fn);
1276                 }
1277               check_specialization_namespace (fn);
1278
1279               return fn;
1280             }
1281         }
1282       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1283         {
1284           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1285             /* Dup decl failed, but this is a new definition. Set the
1286                line number so any errors match this new
1287                definition.  */
1288             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1289
1290           return fn;
1291         }
1292     }
1293
1294   /* A specialization must be declared in the same namespace as the
1295      template it is specializing.  */
1296   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1297       && !check_specialization_namespace (tmpl))
1298     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1299
1300   if (!optimize_specialization_lookup_p (tmpl))
1301     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1302       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1303
1304   return spec;
1305 }
1306
1307 /* Unregister the specialization SPEC as a specialization of TMPL.
1308    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1309    if the SPEC was listed as a specialization of TMPL.  */
1310
1311 bool
1312 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1313 {
1314   tree* s;
1315
1316   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1317        *s != NULL_TREE;
1318        s = &TREE_CHAIN (*s))
1319     if (TREE_VALUE (*s) == spec)
1320       {
1321         if (!new_spec)
1322           *s = TREE_CHAIN (*s);
1323         else
1324           TREE_VALUE (*s) = new_spec;
1325         return 1;
1326       }
1327
1328   return 0;
1329 }
1330
1331 /* Compare an entry in the local specializations hash table P1 (which
1332    is really a pointer to a TREE_LIST) with P2 (which is really a
1333    DECL).  */
1334
1335 static int
1336 eq_local_specializations (const void *p1, const void *p2)
1337 {
1338   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1339 }
1340
1341 /* Hash P1, an entry in the local specializations table.  */
1342
1343 static hashval_t
1344 hash_local_specialization (const void* p1)
1345 {
1346   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1347 }
1348
1349 /* Like register_specialization, but for local declarations.  We are
1350    registering SPEC, an instantiation of TMPL.  */
1351
1352 static void
1353 register_local_specialization (tree spec, tree tmpl)
1354 {
1355   void **slot;
1356
1357   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1358                                    htab_hash_pointer (tmpl), INSERT);
1359   *slot = build_tree_list (spec, tmpl);
1360 }
1361
1362 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1363    specialized class.  */
1364
1365 bool
1366 explicit_class_specialization_p (tree type)
1367 {
1368   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1369     return false;
1370   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1371 }
1372
1373 /* Print the list of candidate FNS in an error message.  */
1374
1375 void
1376 print_candidates (tree fns)
1377 {
1378   tree fn;
1379
1380   const char *str = "candidates are:";
1381
1382   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1383     {
1384       tree f;
1385
1386       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1387         error ("%s %+#D", str, OVL_CURRENT (f));
1388       str = "               ";
1389     }
1390 }
1391
1392 /* Returns the template (one of the functions given by TEMPLATE_ID)
1393    which can be specialized to match the indicated DECL with the
1394    explicit template args given in TEMPLATE_ID.  The DECL may be
1395    NULL_TREE if none is available.  In that case, the functions in
1396    TEMPLATE_ID are non-members.
1397
1398    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1399    specialization of a member template.
1400
1401    The TEMPLATE_COUNT is the number of references to qualifying
1402    template classes that appeared in the name of the function. See
1403    check_explicit_specialization for a more accurate description.
1404
1405    TSK indicates what kind of template declaration (if any) is being
1406    declared.  TSK_TEMPLATE indicates that the declaration given by
1407    DECL, though a FUNCTION_DECL, has template parameters, and is
1408    therefore a template function.
1409
1410    The template args (those explicitly specified and those deduced)
1411    are output in a newly created vector *TARGS_OUT.
1412
1413    If it is impossible to determine the result, an error message is
1414    issued.  The error_mark_node is returned to indicate failure.  */
1415
1416 static tree
1417 determine_specialization (tree template_id,
1418                           tree decl,
1419                           tree* targs_out,
1420                           int need_member_template,
1421                           int template_count,
1422                           tmpl_spec_kind tsk)
1423 {
1424   tree fns;
1425   tree targs;
1426   tree explicit_targs;
1427   tree candidates = NULL_TREE;
1428   /* A TREE_LIST of templates of which DECL may be a specialization.
1429      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1430      corresponding TREE_PURPOSE is the set of template arguments that,
1431      when used to instantiate the template, would produce a function
1432      with the signature of DECL.  */
1433   tree templates = NULL_TREE;
1434   int header_count;
1435   struct cp_binding_level *b;
1436
1437   *targs_out = NULL_TREE;
1438
1439   if (template_id == error_mark_node || decl == error_mark_node)
1440     return error_mark_node;
1441
1442   fns = TREE_OPERAND (template_id, 0);
1443   explicit_targs = TREE_OPERAND (template_id, 1);
1444
1445   if (fns == error_mark_node)
1446     return error_mark_node;
1447
1448   /* Check for baselinks.  */
1449   if (BASELINK_P (fns))
1450     fns = BASELINK_FUNCTIONS (fns);
1451
1452   if (!is_overloaded_fn (fns))
1453     {
1454       error ("%qD is not a function template", fns);
1455       return error_mark_node;
1456     }
1457
1458   /* Count the number of template headers specified for this
1459      specialization.  */
1460   header_count = 0;
1461   for (b = current_binding_level;
1462        b->kind == sk_template_parms;
1463        b = b->level_chain)
1464     ++header_count;
1465
1466   for (; fns; fns = OVL_NEXT (fns))
1467     {
1468       tree fn = OVL_CURRENT (fns);
1469
1470       if (TREE_CODE (fn) == TEMPLATE_DECL)
1471         {
1472           tree decl_arg_types;
1473           tree fn_arg_types;
1474
1475           /* In case of explicit specialization, we need to check if
1476              the number of template headers appearing in the specialization
1477              is correct. This is usually done in check_explicit_specialization,
1478              but the check done there cannot be exhaustive when specializing
1479              member functions. Consider the following code:
1480
1481              template <> void A<int>::f(int);
1482              template <> template <> void A<int>::f(int);
1483
1484              Assuming that A<int> is not itself an explicit specialization
1485              already, the first line specializes "f" which is a non-template
1486              member function, whilst the second line specializes "f" which
1487              is a template member function. So both lines are syntactically
1488              correct, and check_explicit_specialization does not reject
1489              them.
1490
1491              Here, we can do better, as we are matching the specialization
1492              against the declarations. We count the number of template
1493              headers, and we check if they match TEMPLATE_COUNT + 1
1494              (TEMPLATE_COUNT is the number of qualifying template classes,
1495              plus there must be another header for the member template
1496              itself).
1497
1498              Notice that if header_count is zero, this is not a
1499              specialization but rather a template instantiation, so there
1500              is no check we can perform here.  */
1501           if (header_count && header_count != template_count + 1)
1502             continue;
1503
1504           /* Check that the number of template arguments at the
1505              innermost level for DECL is the same as for FN.  */
1506           if (current_binding_level->kind == sk_template_parms
1507               && !current_binding_level->explicit_spec_p
1508               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1509                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1510                                       (current_template_parms))))
1511             continue;
1512
1513           /* DECL might be a specialization of FN.  */
1514           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1515           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1516
1517           /* For a non-static member function, we need to make sure
1518              that the const qualification is the same.  Since
1519              get_bindings does not try to merge the "this" parameter,
1520              we must do the comparison explicitly.  */
1521           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1522               && !same_type_p (TREE_VALUE (fn_arg_types),
1523                                TREE_VALUE (decl_arg_types)))
1524             continue;
1525
1526           /* Skip the "this" parameter and, for constructors of
1527              classes with virtual bases, the VTT parameter.  A
1528              full specialization of a constructor will have a VTT
1529              parameter, but a template never will.  */ 
1530           decl_arg_types 
1531             = skip_artificial_parms_for (decl, decl_arg_types);
1532           fn_arg_types 
1533             = skip_artificial_parms_for (fn, fn_arg_types);
1534
1535           /* Check that the number of function parameters matches.
1536              For example,
1537                template <class T> void f(int i = 0);
1538                template <> void f<int>();
1539              The specialization f<int> is invalid but is not caught
1540              by get_bindings below.  */
1541           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1542             continue;
1543
1544           /* Function templates cannot be specializations; there are
1545              no partial specializations of functions.  Therefore, if
1546              the type of DECL does not match FN, there is no
1547              match.  */
1548           if (tsk == tsk_template)
1549             {
1550               if (compparms (fn_arg_types, decl_arg_types))
1551                 candidates = tree_cons (NULL_TREE, fn, candidates);
1552               continue;
1553             }
1554
1555           /* See whether this function might be a specialization of this
1556              template.  */
1557           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1558
1559           if (!targs)
1560             /* We cannot deduce template arguments that when used to
1561                specialize TMPL will produce DECL.  */
1562             continue;
1563
1564           /* Save this template, and the arguments deduced.  */
1565           templates = tree_cons (targs, fn, templates);
1566         }
1567       else if (need_member_template)
1568         /* FN is an ordinary member function, and we need a
1569            specialization of a member template.  */
1570         ;
1571       else if (TREE_CODE (fn) != FUNCTION_DECL)
1572         /* We can get IDENTIFIER_NODEs here in certain erroneous
1573            cases.  */
1574         ;
1575       else if (!DECL_FUNCTION_MEMBER_P (fn))
1576         /* This is just an ordinary non-member function.  Nothing can
1577            be a specialization of that.  */
1578         ;
1579       else if (DECL_ARTIFICIAL (fn))
1580         /* Cannot specialize functions that are created implicitly.  */
1581         ;
1582       else
1583         {
1584           tree decl_arg_types;
1585
1586           /* This is an ordinary member function.  However, since
1587              we're here, we can assume it's enclosing class is a
1588              template class.  For example,
1589
1590                template <typename T> struct S { void f(); };
1591                template <> void S<int>::f() {}
1592
1593              Here, S<int>::f is a non-template, but S<int> is a
1594              template class.  If FN has the same type as DECL, we
1595              might be in business.  */
1596
1597           if (!DECL_TEMPLATE_INFO (fn))
1598             /* Its enclosing class is an explicit specialization
1599                of a template class.  This is not a candidate.  */
1600             continue;
1601
1602           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1603                             TREE_TYPE (TREE_TYPE (fn))))
1604             /* The return types differ.  */
1605             continue;
1606
1607           /* Adjust the type of DECL in case FN is a static member.  */
1608           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1609           if (DECL_STATIC_FUNCTION_P (fn)
1610               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1611             decl_arg_types = TREE_CHAIN (decl_arg_types);
1612
1613           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1614                          decl_arg_types))
1615             /* They match!  */
1616             candidates = tree_cons (NULL_TREE, fn, candidates);
1617         }
1618     }
1619
1620   if (templates && TREE_CHAIN (templates))
1621     {
1622       /* We have:
1623
1624            [temp.expl.spec]
1625
1626            It is possible for a specialization with a given function
1627            signature to be instantiated from more than one function
1628            template.  In such cases, explicit specification of the
1629            template arguments must be used to uniquely identify the
1630            function template specialization being specialized.
1631
1632          Note that here, there's no suggestion that we're supposed to
1633          determine which of the candidate templates is most
1634          specialized.  However, we, also have:
1635
1636            [temp.func.order]
1637
1638            Partial ordering of overloaded function template
1639            declarations is used in the following contexts to select
1640            the function template to which a function template
1641            specialization refers:
1642
1643            -- when an explicit specialization refers to a function
1644               template.
1645
1646          So, we do use the partial ordering rules, at least for now.
1647          This extension can only serve to make invalid programs valid,
1648          so it's safe.  And, there is strong anecdotal evidence that
1649          the committee intended the partial ordering rules to apply;
1650          the EDG front end has that behavior, and John Spicer claims
1651          that the committee simply forgot to delete the wording in
1652          [temp.expl.spec].  */
1653       tree tmpl = most_specialized_instantiation (templates);
1654       if (tmpl != error_mark_node)
1655         {
1656           templates = tmpl;
1657           TREE_CHAIN (templates) = NULL_TREE;
1658         }
1659     }
1660
1661   if (templates == NULL_TREE && candidates == NULL_TREE)
1662     {
1663       error ("template-id %qD for %q+D does not match any template "
1664              "declaration", template_id, decl);
1665       return error_mark_node;
1666     }
1667   else if ((templates && TREE_CHAIN (templates))
1668            || (candidates && TREE_CHAIN (candidates))
1669            || (templates && candidates))
1670     {
1671       error ("ambiguous template specialization %qD for %q+D",
1672              template_id, decl);
1673       chainon (candidates, templates);
1674       print_candidates (candidates);
1675       return error_mark_node;
1676     }
1677
1678   /* We have one, and exactly one, match.  */
1679   if (candidates)
1680     {
1681       tree fn = TREE_VALUE (candidates);
1682       /* DECL is a re-declaration of a template function.  */
1683       if (TREE_CODE (fn) == TEMPLATE_DECL)
1684         return fn;
1685       /* It was a specialization of an ordinary member function in a
1686          template class.  */
1687       *targs_out = copy_node (DECL_TI_ARGS (fn));
1688       return DECL_TI_TEMPLATE (fn);
1689     }
1690
1691   /* It was a specialization of a template.  */
1692   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1693   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1694     {
1695       *targs_out = copy_node (targs);
1696       SET_TMPL_ARGS_LEVEL (*targs_out,
1697                            TMPL_ARGS_DEPTH (*targs_out),
1698                            TREE_PURPOSE (templates));
1699     }
1700   else
1701     *targs_out = TREE_PURPOSE (templates);
1702   return TREE_VALUE (templates);
1703 }
1704
1705 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1706    but with the default argument values filled in from those in the
1707    TMPL_TYPES.  */
1708
1709 static tree
1710 copy_default_args_to_explicit_spec_1 (tree spec_types,
1711                                       tree tmpl_types)
1712 {
1713   tree new_spec_types;
1714
1715   if (!spec_types)
1716     return NULL_TREE;
1717
1718   if (spec_types == void_list_node)
1719     return void_list_node;
1720
1721   /* Substitute into the rest of the list.  */
1722   new_spec_types =
1723     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1724                                           TREE_CHAIN (tmpl_types));
1725
1726   /* Add the default argument for this parameter.  */
1727   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1728                          TREE_VALUE (spec_types),
1729                          new_spec_types);
1730 }
1731
1732 /* DECL is an explicit specialization.  Replicate default arguments
1733    from the template it specializes.  (That way, code like:
1734
1735      template <class T> void f(T = 3);
1736      template <> void f(double);
1737      void g () { f (); }
1738
1739    works, as required.)  An alternative approach would be to look up
1740    the correct default arguments at the call-site, but this approach
1741    is consistent with how implicit instantiations are handled.  */
1742
1743 static void
1744 copy_default_args_to_explicit_spec (tree decl)
1745 {
1746   tree tmpl;
1747   tree spec_types;
1748   tree tmpl_types;
1749   tree new_spec_types;
1750   tree old_type;
1751   tree new_type;
1752   tree t;
1753   tree object_type = NULL_TREE;
1754   tree in_charge = NULL_TREE;
1755   tree vtt = NULL_TREE;
1756
1757   /* See if there's anything we need to do.  */
1758   tmpl = DECL_TI_TEMPLATE (decl);
1759   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1760   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1761     if (TREE_PURPOSE (t))
1762       break;
1763   if (!t)
1764     return;
1765
1766   old_type = TREE_TYPE (decl);
1767   spec_types = TYPE_ARG_TYPES (old_type);
1768
1769   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1770     {
1771       /* Remove the this pointer, but remember the object's type for
1772          CV quals.  */
1773       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1774       spec_types = TREE_CHAIN (spec_types);
1775       tmpl_types = TREE_CHAIN (tmpl_types);
1776
1777       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1778         {
1779           /* DECL may contain more parameters than TMPL due to the extra
1780              in-charge parameter in constructors and destructors.  */
1781           in_charge = spec_types;
1782           spec_types = TREE_CHAIN (spec_types);
1783         }
1784       if (DECL_HAS_VTT_PARM_P (decl))
1785         {
1786           vtt = spec_types;
1787           spec_types = TREE_CHAIN (spec_types);
1788         }
1789     }
1790
1791   /* Compute the merged default arguments.  */
1792   new_spec_types =
1793     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1794
1795   /* Compute the new FUNCTION_TYPE.  */
1796   if (object_type)
1797     {
1798       if (vtt)
1799         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1800                                          TREE_VALUE (vtt),
1801                                          new_spec_types);
1802
1803       if (in_charge)
1804         /* Put the in-charge parameter back.  */
1805         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1806                                          TREE_VALUE (in_charge),
1807                                          new_spec_types);
1808
1809       new_type = build_method_type_directly (object_type,
1810                                              TREE_TYPE (old_type),
1811                                              new_spec_types);
1812     }
1813   else
1814     new_type = build_function_type (TREE_TYPE (old_type),
1815                                     new_spec_types);
1816   new_type = cp_build_type_attribute_variant (new_type,
1817                                               TYPE_ATTRIBUTES (old_type));
1818   new_type = build_exception_variant (new_type,
1819                                       TYPE_RAISES_EXCEPTIONS (old_type));
1820   TREE_TYPE (decl) = new_type;
1821 }
1822
1823 /* Check to see if the function just declared, as indicated in
1824    DECLARATOR, and in DECL, is a specialization of a function
1825    template.  We may also discover that the declaration is an explicit
1826    instantiation at this point.
1827
1828    Returns DECL, or an equivalent declaration that should be used
1829    instead if all goes well.  Issues an error message if something is
1830    amiss.  Returns error_mark_node if the error is not easily
1831    recoverable.
1832
1833    FLAGS is a bitmask consisting of the following flags:
1834
1835    2: The function has a definition.
1836    4: The function is a friend.
1837
1838    The TEMPLATE_COUNT is the number of references to qualifying
1839    template classes that appeared in the name of the function.  For
1840    example, in
1841
1842      template <class T> struct S { void f(); };
1843      void S<int>::f();
1844
1845    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1846    classes are not counted in the TEMPLATE_COUNT, so that in
1847
1848      template <class T> struct S {};
1849      template <> struct S<int> { void f(); }
1850      template <> void S<int>::f();
1851
1852    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1853    invalid; there should be no template <>.)
1854
1855    If the function is a specialization, it is marked as such via
1856    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1857    is set up correctly, and it is added to the list of specializations
1858    for that template.  */
1859
1860 tree
1861 check_explicit_specialization (tree declarator,
1862                                tree decl,
1863                                int template_count,
1864                                int flags)
1865 {
1866   int have_def = flags & 2;
1867   int is_friend = flags & 4;
1868   int specialization = 0;
1869   int explicit_instantiation = 0;
1870   int member_specialization = 0;
1871   tree ctype = DECL_CLASS_CONTEXT (decl);
1872   tree dname = DECL_NAME (decl);
1873   tmpl_spec_kind tsk;
1874
1875   if (is_friend)
1876     {
1877       if (!processing_specialization)
1878         tsk = tsk_none;
1879       else
1880         tsk = tsk_excessive_parms;
1881     }
1882   else
1883     tsk = current_tmpl_spec_kind (template_count);
1884
1885   switch (tsk)
1886     {
1887     case tsk_none:
1888       if (processing_specialization)
1889         {
1890           specialization = 1;
1891           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1892         }
1893       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1894         {
1895           if (is_friend)
1896             /* This could be something like:
1897
1898                template <class T> void f(T);
1899                class S { friend void f<>(int); }  */
1900             specialization = 1;
1901           else
1902             {
1903               /* This case handles bogus declarations like template <>
1904                  template <class T> void f<int>(); */
1905
1906               error ("template-id %qD in declaration of primary template",
1907                      declarator);
1908               return decl;
1909             }
1910         }
1911       break;
1912
1913     case tsk_invalid_member_spec:
1914       /* The error has already been reported in
1915          check_specialization_scope.  */
1916       return error_mark_node;
1917
1918     case tsk_invalid_expl_inst:
1919       error ("template parameter list used in explicit instantiation");
1920
1921       /* Fall through.  */
1922
1923     case tsk_expl_inst:
1924       if (have_def)
1925         error ("definition provided for explicit instantiation");
1926
1927       explicit_instantiation = 1;
1928       break;
1929
1930     case tsk_excessive_parms:
1931     case tsk_insufficient_parms:
1932       if (tsk == tsk_excessive_parms)
1933         error ("too many template parameter lists in declaration of %qD",
1934                decl);
1935       else if (template_header_count)
1936         error("too few template parameter lists in declaration of %qD", decl);
1937       else
1938         error("explicit specialization of %qD must be introduced by "
1939               "%<template <>%>", decl);
1940
1941       /* Fall through.  */
1942     case tsk_expl_spec:
1943       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1944       if (ctype)
1945         member_specialization = 1;
1946       else
1947         specialization = 1;
1948       break;
1949
1950     case tsk_template:
1951       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1952         {
1953           /* This case handles bogus declarations like template <>
1954              template <class T> void f<int>(); */
1955
1956           if (uses_template_parms (declarator))
1957             error ("function template partial specialization %qD "
1958                    "is not allowed", declarator);
1959           else
1960             error ("template-id %qD in declaration of primary template",
1961                    declarator);
1962           return decl;
1963         }
1964
1965       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1966         /* This is a specialization of a member template, without
1967            specialization the containing class.  Something like:
1968
1969              template <class T> struct S {
1970                template <class U> void f (U);
1971              };
1972              template <> template <class U> void S<int>::f(U) {}
1973
1974            That's a specialization -- but of the entire template.  */
1975         specialization = 1;
1976       break;
1977
1978     default:
1979       gcc_unreachable ();
1980     }
1981
1982   if (specialization || member_specialization)
1983     {
1984       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1985       for (; t; t = TREE_CHAIN (t))
1986         if (TREE_PURPOSE (t))
1987           {
1988             pedwarn
1989               ("default argument specified in explicit specialization");
1990             break;
1991           }
1992     }
1993
1994   if (specialization || member_specialization || explicit_instantiation)
1995     {
1996       tree tmpl = NULL_TREE;
1997       tree targs = NULL_TREE;
1998
1999       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2000       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2001         {
2002           tree fns;
2003
2004           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2005           if (ctype)
2006             fns = dname;
2007           else
2008             {
2009               /* If there is no class context, the explicit instantiation
2010                  must be at namespace scope.  */
2011               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2012
2013               /* Find the namespace binding, using the declaration
2014                  context.  */
2015               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2016                                            false, true);
2017               if (fns == error_mark_node || !is_overloaded_fn (fns))
2018                 {
2019                   error ("%qD is not a template function", dname);
2020                   fns = error_mark_node;
2021                 }
2022               else
2023                 {
2024                   tree fn = OVL_CURRENT (fns);
2025                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2026                                                 CP_DECL_CONTEXT (fn)))
2027                     error ("%qD is not declared in %qD",
2028                            decl, current_namespace);
2029                 }
2030             }
2031
2032           declarator = lookup_template_function (fns, NULL_TREE);
2033         }
2034
2035       if (declarator == error_mark_node)
2036         return error_mark_node;
2037
2038       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2039         {
2040           if (!explicit_instantiation)
2041             /* A specialization in class scope.  This is invalid,
2042                but the error will already have been flagged by
2043                check_specialization_scope.  */
2044             return error_mark_node;
2045           else
2046             {
2047               /* It's not valid to write an explicit instantiation in
2048                  class scope, e.g.:
2049
2050                    class C { template void f(); }
2051
2052                    This case is caught by the parser.  However, on
2053                    something like:
2054
2055                    template class C { void f(); };
2056
2057                    (which is invalid) we can get here.  The error will be
2058                    issued later.  */
2059               ;
2060             }
2061
2062           return decl;
2063         }
2064       else if (ctype != NULL_TREE
2065                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2066                    IDENTIFIER_NODE))
2067         {
2068           /* Find the list of functions in ctype that have the same
2069              name as the declared function.  */
2070           tree name = TREE_OPERAND (declarator, 0);
2071           tree fns = NULL_TREE;
2072           int idx;
2073
2074           if (constructor_name_p (name, ctype))
2075             {
2076               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2077
2078               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2079                   : !CLASSTYPE_DESTRUCTORS (ctype))
2080                 {
2081                   /* From [temp.expl.spec]:
2082
2083                      If such an explicit specialization for the member
2084                      of a class template names an implicitly-declared
2085                      special member function (clause _special_), the
2086                      program is ill-formed.
2087
2088                      Similar language is found in [temp.explicit].  */
2089                   error ("specialization of implicitly-declared special member function");
2090                   return error_mark_node;
2091                 }
2092
2093               name = is_constructor ? ctor_identifier : dtor_identifier;
2094             }
2095
2096           if (!DECL_CONV_FN_P (decl))
2097             {
2098               idx = lookup_fnfields_1 (ctype, name);
2099               if (idx >= 0)
2100                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2101             }
2102           else
2103             {
2104               VEC(tree,gc) *methods;
2105               tree ovl;
2106
2107               /* For a type-conversion operator, we cannot do a
2108                  name-based lookup.  We might be looking for `operator
2109                  int' which will be a specialization of `operator T'.
2110                  So, we find *all* the conversion operators, and then
2111                  select from them.  */
2112               fns = NULL_TREE;
2113
2114               methods = CLASSTYPE_METHOD_VEC (ctype);
2115               if (methods)
2116                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2117                      VEC_iterate (tree, methods, idx, ovl);
2118                      ++idx)
2119                   {
2120                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2121                       /* There are no more conversion functions.  */
2122                       break;
2123
2124                     /* Glue all these conversion functions together
2125                        with those we already have.  */
2126                     for (; ovl; ovl = OVL_NEXT (ovl))
2127                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2128                   }
2129             }
2130
2131           if (fns == NULL_TREE)
2132             {
2133               error ("no member function %qD declared in %qT", name, ctype);
2134               return error_mark_node;
2135             }
2136           else
2137             TREE_OPERAND (declarator, 0) = fns;
2138         }
2139
2140       /* Figure out what exactly is being specialized at this point.
2141          Note that for an explicit instantiation, even one for a
2142          member function, we cannot tell apriori whether the
2143          instantiation is for a member template, or just a member
2144          function of a template class.  Even if a member template is
2145          being instantiated, the member template arguments may be
2146          elided if they can be deduced from the rest of the
2147          declaration.  */
2148       tmpl = determine_specialization (declarator, decl,
2149                                        &targs,
2150                                        member_specialization,
2151                                        template_count,
2152                                        tsk);
2153
2154       if (!tmpl || tmpl == error_mark_node)
2155         /* We couldn't figure out what this declaration was
2156            specializing.  */
2157         return error_mark_node;
2158       else
2159         {
2160           tree gen_tmpl = most_general_template (tmpl);
2161
2162           if (explicit_instantiation)
2163             {
2164               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2165                  is done by do_decl_instantiation later.  */
2166
2167               int arg_depth = TMPL_ARGS_DEPTH (targs);
2168               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2169
2170               if (arg_depth > parm_depth)
2171                 {
2172                   /* If TMPL is not the most general template (for
2173                      example, if TMPL is a friend template that is
2174                      injected into namespace scope), then there will
2175                      be too many levels of TARGS.  Remove some of them
2176                      here.  */
2177                   int i;
2178                   tree new_targs;
2179
2180                   new_targs = make_tree_vec (parm_depth);
2181                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2182                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2183                       = TREE_VEC_ELT (targs, i);
2184                   targs = new_targs;
2185                 }
2186
2187               return instantiate_template (tmpl, targs, tf_error);
2188             }
2189
2190           /* If we thought that the DECL was a member function, but it
2191              turns out to be specializing a static member function,
2192              make DECL a static member function as well.  */
2193           if (DECL_STATIC_FUNCTION_P (tmpl)
2194               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2195             revert_static_member_fn (decl);
2196
2197           /* If this is a specialization of a member template of a
2198              template class, we want to return the TEMPLATE_DECL, not
2199              the specialization of it.  */
2200           if (tsk == tsk_template)
2201             {
2202               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2203               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2204               if (have_def)
2205                 {
2206                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2207                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2208                     = DECL_SOURCE_LOCATION (decl);
2209                   /* We want to use the argument list specified in the
2210                      definition, not in the original declaration.  */
2211                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2212                     = DECL_ARGUMENTS (decl);
2213                 }
2214               return tmpl;
2215             }
2216
2217           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2218           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2219
2220           /* Inherit default function arguments from the template
2221              DECL is specializing.  */
2222           copy_default_args_to_explicit_spec (decl);
2223
2224           /* This specialization has the same protection as the
2225              template it specializes.  */
2226           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2227           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2228
2229           /* 7.1.1-1 [dcl.stc]
2230
2231              A storage-class-specifier shall not be specified in an
2232              explicit specialization...
2233
2234              The parser rejects these, so unless action is taken here,
2235              explicit function specializations will always appear with
2236              global linkage.
2237
2238              The action recommended by the C++ CWG in response to C++
2239              defect report 605 is to make the storage class and linkage
2240              of the explicit specialization match the templated function:
2241
2242              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2243            */
2244           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2245             {
2246               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2247               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2248
2249               /* This specialization has the same linkage and visibility as
2250                  the function template it specializes.  */
2251               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2252               if (! TREE_PUBLIC (decl))
2253                 {
2254                   DECL_INTERFACE_KNOWN (decl) = 1;
2255                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2256                 }
2257               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2258               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2259                 {
2260                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2261                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2262                 }
2263             }
2264
2265           /* If DECL is a friend declaration, declared using an
2266              unqualified name, the namespace associated with DECL may
2267              have been set incorrectly.  For example, in:
2268
2269                template <typename T> void f(T);
2270                namespace N {
2271                  struct S { friend void f<int>(int); }
2272                }
2273
2274              we will have set the DECL_CONTEXT for the friend
2275              declaration to N, rather than to the global namespace.  */
2276           if (DECL_NAMESPACE_SCOPE_P (decl))
2277             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2278
2279           if (is_friend && !have_def)
2280             /* This is not really a declaration of a specialization.
2281                It's just the name of an instantiation.  But, it's not
2282                a request for an instantiation, either.  */
2283             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2284           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2285             /* This is indeed a specialization.  In case of constructors
2286                and destructors, we need in-charge and not-in-charge
2287                versions in V3 ABI.  */
2288             clone_function_decl (decl, /*update_method_vec_p=*/0);
2289
2290           /* Register this specialization so that we can find it
2291              again.  */
2292           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2293         }
2294     }
2295
2296   return decl;
2297 }
2298
2299 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2300    parameters.  These are represented in the same format used for
2301    DECL_TEMPLATE_PARMS.  */
2302
2303 int
2304 comp_template_parms (const_tree parms1, const_tree parms2)
2305 {
2306   const_tree p1;
2307   const_tree p2;
2308
2309   if (parms1 == parms2)
2310     return 1;
2311
2312   for (p1 = parms1, p2 = parms2;
2313        p1 != NULL_TREE && p2 != NULL_TREE;
2314        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2315     {
2316       tree t1 = TREE_VALUE (p1);
2317       tree t2 = TREE_VALUE (p2);
2318       int i;
2319
2320       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2321       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2322
2323       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2324         return 0;
2325
2326       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2327         {
2328           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2329           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2330
2331           /* If either of the template parameters are invalid, assume
2332              they match for the sake of error recovery. */
2333           if (parm1 == error_mark_node || parm2 == error_mark_node)
2334             return 1;
2335
2336           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2337             return 0;
2338
2339           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2340               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2341                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2342             continue;
2343           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2344             return 0;
2345         }
2346     }
2347
2348   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2349     /* One set of parameters has more parameters lists than the
2350        other.  */
2351     return 0;
2352
2353   return 1;
2354 }
2355
2356 /* Determine whether PARM is a parameter pack.  */
2357 bool 
2358 template_parameter_pack_p (const_tree parm)
2359 {
2360   /* Determine if we have a non-type template parameter pack.  */
2361   if (TREE_CODE (parm) == PARM_DECL)
2362     return (DECL_TEMPLATE_PARM_P (parm) 
2363             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2364
2365   /* If this is a list of template parameters, we could get a
2366      TYPE_DECL or a TEMPLATE_DECL.  */ 
2367   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2368     parm = TREE_TYPE (parm);
2369
2370   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2371            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2372           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2373 }
2374
2375 /* Determine whether ARGS describes a variadic template args list,
2376    i.e., one that is terminated by a template argument pack.  */
2377 static bool 
2378 template_args_variadic_p (tree args)
2379 {
2380   int nargs;
2381   tree last_parm;
2382
2383   if (args == NULL_TREE)
2384     return false;
2385
2386   args = INNERMOST_TEMPLATE_ARGS (args);
2387   nargs = TREE_VEC_LENGTH (args);
2388
2389   if (nargs == 0)
2390     return false;
2391
2392   last_parm = TREE_VEC_ELT (args, nargs - 1);
2393
2394   return ARGUMENT_PACK_P (last_parm);
2395 }
2396
2397 /* Generate a new name for the parameter pack name NAME (an
2398    IDENTIFIER_NODE) that incorporates its */
2399 static tree
2400 make_ith_pack_parameter_name (tree name, int i)
2401 {
2402   /* Munge the name to include the parameter index.  */
2403   char numbuf[128];
2404   char* newname;
2405   
2406   sprintf(numbuf, "%i", i);
2407   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2408   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2409   return get_identifier (newname);
2410 }
2411
2412 /* Structure used to track the progress of find_parameter_pack_r.  */
2413 struct find_parameter_pack_data 
2414 {
2415   tree* parameter_packs;
2416   struct pointer_set_t *visited;
2417 };
2418
2419 /* Identifiers all of the argument packs that occur in a template
2420    argument and appends them to the TREE_LIST inside DATA, which is a
2421    find_parameter_pack_Data structure. This is a subroutine of
2422    make_pack_expansion and uses_parameter_packs.  */
2423 static tree
2424 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2425 {
2426   tree t = *tp;
2427   struct find_parameter_pack_data* ppd = 
2428     (struct find_parameter_pack_data*)data;
2429
2430   if (TYPE_P (t))
2431     {
2432       tree context = TYPE_CONTEXT (t);
2433       cp_walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
2434     }
2435
2436   /* This switch statement will return immediately if we don't find a
2437      parameter pack.  */
2438   switch (TREE_CODE (t)) 
2439     {
2440     case TEMPLATE_PARM_INDEX:
2441       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2442         break;
2443       return NULL_TREE;
2444
2445     case BOUND_TEMPLATE_TEMPLATE_PARM:
2446       /* Check the template arguments.  */
2447       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2448                     ppd->visited);
2449
2450       /* Dig out the underlying TEMPLATE_TEMPLATE_PARM.  */
2451       t = TYPE_TI_TEMPLATE (t);
2452       if (DECL_P (t) && TREE_TYPE (t))
2453         t = TREE_TYPE (t);
2454       *walk_subtrees = 0;
2455       
2456       /* Fall through.  */
2457
2458     case TEMPLATE_TYPE_PARM:
2459     case TEMPLATE_TEMPLATE_PARM:
2460       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2461         break;
2462       return NULL_TREE;
2463
2464     case PARM_DECL:
2465       if (FUNCTION_PARAMETER_PACK_P (t))
2466         {
2467           /* We don't want to walk into the type of a PARM_DECL,
2468              because we don't want to see the type parameter pack.*/
2469           *walk_subtrees = 0;
2470           break;
2471         }
2472       return NULL_TREE;
2473
2474     case RECORD_TYPE:
2475       if (TYPE_PTRMEMFUNC_P (t))
2476         return NULL_TREE;
2477       /* Fall through.  */
2478
2479     case UNION_TYPE:
2480     case ENUMERAL_TYPE:
2481       if (TYPE_TEMPLATE_INFO (t))
2482         {
2483           tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
2484           cp_walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
2485         }
2486
2487       *walk_subtrees = 0;
2488       return NULL_TREE;
2489
2490     case TEMPLATE_DECL:
2491       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
2492           && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
2493         break;
2494       
2495       *walk_subtrees = 0;
2496       return NULL_TREE;
2497        
2498     case TYPE_PACK_EXPANSION:
2499     case EXPR_PACK_EXPANSION:
2500       *walk_subtrees = 0;
2501       return NULL_TREE;
2502
2503     case INTEGER_TYPE:
2504       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2505                     ppd, ppd->visited);
2506       *walk_subtrees = 0;
2507       return NULL_TREE;
2508
2509     default:
2510       return NULL_TREE;
2511     }
2512   
2513   /* Add this parameter pack to the list.  */
2514   *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2515
2516   return NULL_TREE;
2517 }
2518
2519 /* Determines if the expression or type T uses any parameter packs.  */
2520 bool
2521 uses_parameter_packs (tree t)
2522 {
2523   tree parameter_packs = NULL_TREE;
2524   struct find_parameter_pack_data ppd;
2525   ppd.parameter_packs = &parameter_packs;
2526   ppd.visited = pointer_set_create ();
2527   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2528   pointer_set_destroy (ppd.visited);
2529   return parameter_packs != NULL_TREE;
2530 }
2531
2532 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2533    representation a base-class initializer into a parameter pack
2534    expansion. If all goes well, the resulting node will be an
2535    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2536    respectively.  */
2537 tree 
2538 make_pack_expansion (tree arg)
2539 {
2540   tree result;
2541   tree parameter_packs = NULL_TREE;
2542   bool for_types = false;
2543   struct find_parameter_pack_data ppd;
2544
2545   if (!arg || arg == error_mark_node)
2546     return arg;
2547
2548   if (TREE_CODE (arg) == TREE_LIST)
2549     {
2550       /* The only time we will see a TREE_LIST here is for a base
2551          class initializer.  In this case, the TREE_PURPOSE will be a
2552          _TYPE node (representing the base class expansion we're
2553          initializing) and the TREE_VALUE will be a TREE_LIST
2554          containing the initialization arguments. 
2555
2556          The resulting expansion looks somewhat different from most
2557          expansions. Rather than returning just one _EXPANSION, we
2558          return a TREE_LIST whose TREE_PURPOSE is a
2559          TYPE_PACK_EXPANSION containing the bases that will be
2560          initialized.  The TREE_VALUE will be identical to the
2561          original TREE_VALUE, which is a list of arguments that will
2562          be passed to each base.  We do not introduce any new pack
2563          expansion nodes into the TREE_VALUE (although it is possible
2564          that some already exist), because the TREE_PURPOSE and
2565          TREE_VALUE all need to be expanded together with the same
2566          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2567          resulting TREE_PURPOSE will mention the parameter packs in
2568          both the bases and the arguments to the bases.  */
2569       tree purpose;
2570       tree value;
2571       tree parameter_packs = NULL_TREE;
2572
2573       /* Determine which parameter packs will be used by the base
2574          class expansion.  */
2575       ppd.visited = pointer_set_create ();
2576       ppd.parameter_packs = &parameter_packs;
2577       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2578                     &ppd, ppd.visited);
2579
2580       if (parameter_packs == NULL_TREE)
2581         {
2582           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2583           pointer_set_destroy (ppd.visited);
2584           return error_mark_node;
2585         }
2586
2587       if (TREE_VALUE (arg) != void_type_node)
2588         {
2589           /* Collect the sets of parameter packs used in each of the
2590              initialization arguments.  */
2591           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2592             {
2593               /* Determine which parameter packs will be expanded in this
2594                  argument.  */
2595               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2596                             &ppd, ppd.visited);
2597             }
2598         }
2599
2600       pointer_set_destroy (ppd.visited);
2601
2602       /* Create the pack expansion type for the base type.  */
2603       purpose = make_node (TYPE_PACK_EXPANSION);
2604       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2605       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2606
2607       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2608          they will rarely be compared to anything.  */
2609       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2610
2611       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2612     }
2613
2614   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2615     for_types = true;
2616
2617   /* Build the PACK_EXPANSION_* node.  */
2618   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2619   SET_PACK_EXPANSION_PATTERN (result, arg);
2620   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2621     {
2622       /* Propagate type and const-expression information.  */
2623       TREE_TYPE (result) = TREE_TYPE (arg);
2624       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2625     }
2626   else
2627     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2628        they will rarely be compared to anything.  */
2629     SET_TYPE_STRUCTURAL_EQUALITY (result);
2630
2631   /* Determine which parameter packs will be expanded.  */
2632   ppd.parameter_packs = &parameter_packs;
2633   ppd.visited = pointer_set_create ();
2634   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2635   pointer_set_destroy (ppd.visited);
2636
2637   /* Make sure we found some parameter packs.  */
2638   if (parameter_packs == NULL_TREE)
2639     {
2640       if (TYPE_P (arg))
2641         error ("expansion pattern %<%T%> contains no argument packs", arg);
2642       else
2643         error ("expansion pattern %<%E%> contains no argument packs", arg);
2644       return error_mark_node;
2645     }
2646   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2647
2648   return result;
2649 }
2650
2651 /* Checks T for any "bare" parameter packs, which have not yet been
2652    expanded, and issues an error if any are found. This operation can
2653    only be done on full expressions or types (e.g., an expression
2654    statement, "if" condition, etc.), because we could have expressions like:
2655
2656      foo(f(g(h(args)))...)
2657
2658    where "args" is a parameter pack. check_for_bare_parameter_packs
2659    should not be called for the subexpressions args, h(args),
2660    g(h(args)), or f(g(h(args))), because we would produce erroneous
2661    error messages. 
2662
2663    Returns TRUE if there were no bare parameter packs, returns FALSE
2664    (and emits an error) if there were bare parameter packs.*/
2665 bool 
2666 check_for_bare_parameter_packs (tree t)
2667 {
2668   tree parameter_packs = NULL_TREE;
2669   struct find_parameter_pack_data ppd;
2670
2671   if (!processing_template_decl || !t || t == error_mark_node)
2672     return true;
2673
2674   if (TREE_CODE (t) == TYPE_DECL)
2675     t = TREE_TYPE (t);
2676
2677   ppd.parameter_packs = &parameter_packs;
2678   ppd.visited = pointer_set_create ();
2679   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2680   pointer_set_destroy (ppd.visited);
2681
2682   if (parameter_packs) 
2683     {
2684       error ("parameter packs not expanded with `...':");
2685       while (parameter_packs)
2686         {
2687           tree pack = TREE_VALUE (parameter_packs);
2688           tree name = NULL_TREE;
2689
2690           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2691               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2692             name = TYPE_NAME (pack);
2693           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2694             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2695           else
2696             name = DECL_NAME (pack);
2697           inform ("        %qD", name);
2698
2699           parameter_packs = TREE_CHAIN (parameter_packs);
2700         }
2701
2702       return false;
2703     }
2704
2705   return true;
2706 }
2707
2708 /* Expand any parameter packs that occur in the template arguments in
2709    ARGS.  */
2710 tree
2711 expand_template_argument_pack (tree args)
2712 {
2713   tree result_args = NULL_TREE;
2714   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2715   int num_result_args = -1;
2716
2717   /* First, determine if we need to expand anything, and the number of
2718      slots we'll need.  */
2719   for (in_arg = 0; in_arg < nargs; ++in_arg)
2720     {
2721       tree arg = TREE_VEC_ELT (args, in_arg);
2722       if (ARGUMENT_PACK_P (arg))
2723         {
2724           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2725           if (num_result_args < 0)
2726             num_result_args = in_arg + num_packed;
2727           else
2728             num_result_args += num_packed;
2729         }
2730       else
2731         {
2732           if (num_result_args >= 0)
2733             num_result_args++;
2734         }
2735     }
2736
2737   /* If no expansion is necessary, we're done.  */
2738   if (num_result_args < 0)
2739     return args;
2740
2741   /* Expand arguments.  */
2742   result_args = make_tree_vec (num_result_args);
2743   for (in_arg = 0; in_arg < nargs; ++in_arg)
2744     {
2745       tree arg = TREE_VEC_ELT (args, in_arg);
2746       if (ARGUMENT_PACK_P (arg))
2747         {
2748           tree packed = ARGUMENT_PACK_ARGS (arg);
2749           int i, num_packed = TREE_VEC_LENGTH (packed);
2750           for (i = 0; i < num_packed; ++i, ++out_arg)
2751             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2752         }
2753       else
2754         {
2755           TREE_VEC_ELT (result_args, out_arg) = arg;
2756           ++out_arg;
2757         }
2758     }
2759
2760   return result_args;
2761 }
2762
2763 /* Complain if DECL shadows a template parameter.
2764
2765    [temp.local]: A template-parameter shall not be redeclared within its
2766    scope (including nested scopes).  */
2767
2768 void
2769 check_template_shadow (tree decl)
2770 {
2771   tree olddecl;
2772
2773   /* If we're not in a template, we can't possibly shadow a template
2774      parameter.  */
2775   if (!current_template_parms)
2776     return;
2777
2778   /* Figure out what we're shadowing.  */
2779   if (TREE_CODE (decl) == OVERLOAD)
2780     decl = OVL_CURRENT (decl);
2781   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2782
2783   /* If there's no previous binding for this name, we're not shadowing
2784      anything, let alone a template parameter.  */
2785   if (!olddecl)
2786     return;
2787
2788   /* If we're not shadowing a template parameter, we're done.  Note
2789      that OLDDECL might be an OVERLOAD (or perhaps even an
2790      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2791      node.  */
2792   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2793     return;
2794
2795   /* We check for decl != olddecl to avoid bogus errors for using a
2796      name inside a class.  We check TPFI to avoid duplicate errors for
2797      inline member templates.  */
2798   if (decl == olddecl
2799       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2800     return;
2801
2802   error ("declaration of %q+#D", decl);
2803   error (" shadows template parm %q+#D", olddecl);
2804 }
2805
2806 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2807    ORIG_LEVEL, DECL, and TYPE.  */
2808
2809 static tree
2810 build_template_parm_index (int index,
2811                            int level,
2812                            int orig_level,
2813                            tree decl,
2814                            tree type)
2815 {
2816   tree t = make_node (TEMPLATE_PARM_INDEX);
2817   TEMPLATE_PARM_IDX (t) = index;
2818   TEMPLATE_PARM_LEVEL (t) = level;
2819   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2820   TEMPLATE_PARM_DECL (t) = decl;
2821   TREE_TYPE (t) = type;
2822   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2823   TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2824   TREE_READONLY (t) = TREE_READONLY (decl);
2825
2826   return t;
2827 }
2828
2829 /* Find the canonical type parameter for the given template type
2830    parameter.  Returns the canonical type parameter, which may be TYPE
2831    if no such parameter existed.  */
2832 static tree
2833 canonical_type_parameter (tree type)
2834 {
2835   tree list;
2836   int idx = TEMPLATE_TYPE_IDX (type);
2837   if (!canonical_template_parms)
2838     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2839
2840   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2841     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2842
2843   list = VEC_index (tree, canonical_template_parms, idx);
2844   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2845     list = TREE_CHAIN (list);
2846
2847   if (list)
2848     return TREE_VALUE (list);
2849   else
2850     {
2851       VEC_replace(tree, canonical_template_parms, idx,
2852                   tree_cons (NULL_TREE, type, 
2853                              VEC_index (tree, canonical_template_parms, idx)));
2854       return type;
2855     }
2856 }
2857
2858 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2859    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2860    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2861    new one is created.  */
2862
2863 static tree
2864 reduce_template_parm_level (tree index, tree type, int levels)
2865 {
2866   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2867       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2868           != TEMPLATE_PARM_LEVEL (index) - levels))
2869     {
2870       tree orig_decl = TEMPLATE_PARM_DECL (index);
2871       tree decl, t;
2872
2873       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2874       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2875       TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2876       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2877       DECL_ARTIFICIAL (decl) = 1;
2878       SET_DECL_TEMPLATE_PARM_P (decl);
2879
2880       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2881                                      TEMPLATE_PARM_LEVEL (index) - levels,
2882                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2883                                      decl, type);
2884       TEMPLATE_PARM_DESCENDANTS (index) = t;
2885       TEMPLATE_PARM_PARAMETER_PACK (t) 
2886         = TEMPLATE_PARM_PARAMETER_PACK (index);
2887
2888         /* Template template parameters need this.  */
2889       if (TREE_CODE (decl) != CONST_DECL)
2890         DECL_TEMPLATE_PARMS (decl)
2891           = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2892     }
2893
2894   return TEMPLATE_PARM_DESCENDANTS (index);
2895 }
2896
2897 /* Process information from new template parameter PARM and append it to the
2898    LIST being built.  This new parameter is a non-type parameter iff
2899    IS_NON_TYPE is true. This new parameter is a parameter
2900    pack iff IS_PARAMETER_PACK is true.  */
2901
2902 tree
2903 process_template_parm (tree list, tree parm, bool is_non_type, 
2904                        bool is_parameter_pack)
2905 {
2906   tree decl = 0;
2907   tree defval;
2908   tree err_parm_list;
2909   int idx = 0;
2910
2911   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2912   defval = TREE_PURPOSE (parm);
2913
2914   if (list)
2915     {
2916       tree p = tree_last (list);
2917
2918       if (p && TREE_VALUE (p) != error_mark_node)
2919         {
2920           p = TREE_VALUE (p);
2921           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2922             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2923           else
2924             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2925         }
2926
2927       ++idx;
2928     }
2929   else
2930     idx = 0;
2931
2932   if (is_non_type)
2933     {
2934       parm = TREE_VALUE (parm);
2935
2936       SET_DECL_TEMPLATE_PARM_P (parm);
2937
2938       if (TREE_TYPE (parm) == error_mark_node)
2939         {
2940           err_parm_list = build_tree_list (defval, parm);
2941           TREE_VALUE (err_parm_list) = error_mark_node;
2942            return chainon (list, err_parm_list);
2943         }
2944       else
2945       {
2946         /* [temp.param]
2947
2948            The top-level cv-qualifiers on the template-parameter are
2949            ignored when determining its type.  */
2950         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2951         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2952           {
2953             err_parm_list = build_tree_list (defval, parm);
2954             TREE_VALUE (err_parm_list) = error_mark_node;
2955              return chainon (list, err_parm_list);
2956           }
2957
2958         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
2959           {
2960             /* This template parameter is not a parameter pack, but it
2961                should be. Complain about "bare" parameter packs.  */
2962             check_for_bare_parameter_packs (TREE_TYPE (parm));
2963             
2964             /* Recover by calling this a parameter pack.  */
2965             is_parameter_pack = true;
2966           }
2967       }
2968
2969       /* A template parameter is not modifiable.  */
2970       TREE_CONSTANT (parm) = 1;
2971       TREE_INVARIANT (parm) = 1;
2972       TREE_READONLY (parm) = 1;
2973       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2974       TREE_CONSTANT (decl) = 1;
2975       TREE_INVARIANT (decl) = 1;
2976       TREE_READONLY (decl) = 1;
2977       DECL_INITIAL (parm) = DECL_INITIAL (decl)
2978         = build_template_parm_index (idx, processing_template_decl,
2979                                      processing_template_decl,
2980                                      decl, TREE_TYPE (parm));
2981
2982       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
2983         = is_parameter_pack;
2984     }
2985   else
2986     {
2987       tree t;
2988       parm = TREE_VALUE (TREE_VALUE (parm));
2989
2990       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2991         {
2992           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2993           /* This is for distinguishing between real templates and template
2994              template parameters */
2995           TREE_TYPE (parm) = t;
2996           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2997           decl = parm;
2998         }
2999       else
3000         {
3001           t = make_aggr_type (TEMPLATE_TYPE_PARM);
3002           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3003           decl = build_decl (TYPE_DECL, parm, t);
3004         }
3005
3006       TYPE_NAME (t) = decl;
3007       TYPE_STUB_DECL (t) = decl;
3008       parm = decl;
3009       TEMPLATE_TYPE_PARM_INDEX (t)
3010         = build_template_parm_index (idx, processing_template_decl,
3011                                      processing_template_decl,
3012                                      decl, TREE_TYPE (parm));
3013       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3014       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3015     }
3016   DECL_ARTIFICIAL (decl) = 1;
3017   SET_DECL_TEMPLATE_PARM_P (decl);
3018   pushdecl (decl);
3019   parm = build_tree_list (defval, parm);
3020   return chainon (list, parm);
3021 }
3022
3023 /* The end of a template parameter list has been reached.  Process the
3024    tree list into a parameter vector, converting each parameter into a more
3025    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3026    as PARM_DECLs.  */
3027
3028 tree
3029 end_template_parm_list (tree parms)
3030 {
3031   int nparms;
3032   tree parm, next;
3033   tree saved_parmlist = make_tree_vec (list_length (parms));
3034
3035   current_template_parms
3036     = tree_cons (size_int (processing_template_decl),
3037                  saved_parmlist, current_template_parms);
3038
3039   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3040     {
3041       next = TREE_CHAIN (parm);
3042       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3043       TREE_CHAIN (parm) = NULL_TREE;
3044     }
3045
3046   --processing_template_parmlist;
3047
3048   return saved_parmlist;
3049 }
3050
3051 /* end_template_decl is called after a template declaration is seen.  */
3052
3053 void
3054 end_template_decl (void)
3055 {
3056   reset_specialization ();
3057
3058   if (! processing_template_decl)
3059     return;
3060
3061   /* This matches the pushlevel in begin_template_parm_list.  */
3062   finish_scope ();
3063
3064   --processing_template_decl;
3065   current_template_parms = TREE_CHAIN (current_template_parms);
3066 }
3067
3068 /* Within the declaration of a template, return all levels of template
3069    parameters that apply.  The template parameters are represented as
3070    a TREE_VEC, in the form documented in cp-tree.h for template
3071    arguments.  */
3072
3073 static tree
3074 current_template_args (void)
3075 {
3076   tree header;
3077   tree args = NULL_TREE;
3078   int length = TMPL_PARMS_DEPTH (current_template_parms);
3079   int l = length;
3080
3081   /* If there is only one level of template parameters, we do not
3082      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3083      TREE_VEC containing the arguments.  */
3084   if (length > 1)
3085     args = make_tree_vec (length);
3086
3087   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3088     {
3089       tree a = copy_node (TREE_VALUE (header));
3090       int i;
3091
3092       TREE_TYPE (a) = NULL_TREE;
3093       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3094         {
3095           tree t = TREE_VEC_ELT (a, i);
3096
3097           /* T will be a list if we are called from within a
3098              begin/end_template_parm_list pair, but a vector directly
3099              if within a begin/end_member_template_processing pair.  */
3100           if (TREE_CODE (t) == TREE_LIST)
3101             {
3102               t = TREE_VALUE (t);
3103
3104               if (t != error_mark_node)
3105                 {
3106                   if (TREE_CODE (t) == TYPE_DECL
3107                       || TREE_CODE (t) == TEMPLATE_DECL)
3108                     {
3109                       t = TREE_TYPE (t);
3110                       
3111                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3112                         {
3113                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3114                              with a single element, which expands T.  */
3115                           tree vec = make_tree_vec (1);
3116                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3117                           
3118                           t = make_node (TYPE_ARGUMENT_PACK);
3119                           SET_ARGUMENT_PACK_ARGS (t, vec);
3120                         }
3121                     }
3122                   else
3123                     {
3124                       t = DECL_INITIAL (t);
3125                       
3126                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3127                         {
3128                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3129                              with a single element, which expands T.  */
3130                           tree vec = make_tree_vec (1);
3131                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3132                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3133                           
3134                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3135                           SET_ARGUMENT_PACK_ARGS (t, vec);
3136                           TREE_TYPE (t) = type;
3137                         }
3138                     }
3139                 }
3140               TREE_VEC_ELT (a, i) = t;
3141             }
3142         }
3143
3144       if (length > 1)
3145         TREE_VEC_ELT (args, --l) = a;
3146       else
3147         args = a;
3148     }
3149
3150   return args;
3151 }
3152
3153 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3154    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3155    a member template.  Used by push_template_decl below.  */
3156
3157 static tree
3158 build_template_decl (tree decl, tree parms, bool member_template_p)
3159 {
3160   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3161   DECL_TEMPLATE_PARMS (tmpl) = parms;
3162   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3163   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3164   if (DECL_LANG_SPECIFIC (decl))
3165     {
3166       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3167       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3168       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3169       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3170       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3171       if (DECL_OVERLOADED_OPERATOR_P (decl))
3172         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3173                                       DECL_OVERLOADED_OPERATOR_P (decl));
3174     }
3175
3176   return tmpl;
3177 }
3178
3179 struct template_parm_data
3180 {
3181   /* The level of the template parameters we are currently
3182      processing.  */
3183   int level;
3184
3185   /* The index of the specialization argument we are currently
3186      processing.  */
3187   int current_arg;
3188
3189   /* An array whose size is the number of template parameters.  The
3190      elements are nonzero if the parameter has been used in any one
3191      of the arguments processed so far.  */
3192   int* parms;
3193
3194   /* An array whose size is the number of template arguments.  The
3195      elements are nonzero if the argument makes use of template
3196      parameters of this level.  */
3197   int* arg_uses_template_parms;
3198 };
3199
3200 /* Subroutine of push_template_decl used to see if each template
3201    parameter in a partial specialization is used in the explicit
3202    argument list.  If T is of the LEVEL given in DATA (which is
3203    treated as a template_parm_data*), then DATA->PARMS is marked
3204    appropriately.  */
3205
3206 static int
3207 mark_template_parm (tree t, void* data)
3208 {
3209   int level;
3210   int idx;
3211   struct template_parm_data* tpd = (struct template_parm_data*) data;
3212
3213   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3214     {
3215       level = TEMPLATE_PARM_LEVEL (t);
3216       idx = TEMPLATE_PARM_IDX (t);
3217     }
3218   else
3219     {
3220       level = TEMPLATE_TYPE_LEVEL (t);
3221       idx = TEMPLATE_TYPE_IDX (t);
3222     }
3223
3224   if (level == tpd->level)
3225     {
3226       tpd->parms[idx] = 1;
3227       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3228     }
3229
3230   /* Return zero so that for_each_template_parm will continue the
3231      traversal of the tree; we want to mark *every* template parm.  */
3232   return 0;
3233 }
3234
3235 /* Process the partial specialization DECL.  */
3236
3237 static tree
3238 process_partial_specialization (tree decl)
3239 {
3240   tree type = TREE_TYPE (decl);
3241   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3242   tree specargs = CLASSTYPE_TI_ARGS (type);
3243   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3244   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3245   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3246   int nargs = TREE_VEC_LENGTH (inner_args);
3247   int ntparms = TREE_VEC_LENGTH (inner_parms);
3248   int  i;
3249   int did_error_intro = 0;
3250   struct template_parm_data tpd;
3251   struct template_parm_data tpd2;
3252
3253   /* We check that each of the template parameters given in the
3254      partial specialization is used in the argument list to the
3255      specialization.  For example:
3256
3257        template <class T> struct S;
3258        template <class T> struct S<T*>;
3259
3260      The second declaration is OK because `T*' uses the template
3261      parameter T, whereas
3262
3263        template <class T> struct S<int>;
3264
3265      is no good.  Even trickier is:
3266
3267        template <class T>
3268        struct S1
3269        {
3270           template <class U>
3271           struct S2;
3272           template <class U>
3273           struct S2<T>;
3274        };
3275
3276      The S2<T> declaration is actually invalid; it is a
3277      full-specialization.  Of course,
3278
3279           template <class U>
3280           struct S2<T (*)(U)>;
3281
3282      or some such would have been OK.  */
3283   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3284   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3285   memset (tpd.parms, 0, sizeof (int) * ntparms);
3286
3287   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3288   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3289   for (i = 0; i < nargs; ++i)
3290     {
3291       tpd.current_arg = i;
3292       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3293                               &mark_template_parm,
3294                               &tpd,
3295                               NULL);
3296     }
3297   for (i = 0; i < ntparms; ++i)
3298     if (tpd.parms[i] == 0)
3299       {
3300         /* One of the template parms was not used in the
3301            specialization.  */
3302         if (!did_error_intro)
3303           {
3304             error ("template parameters not used in partial specialization:");
3305             did_error_intro = 1;
3306           }
3307
3308         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3309       }
3310
3311   /* [temp.class.spec]
3312
3313      The argument list of the specialization shall not be identical to
3314      the implicit argument list of the primary template.  */
3315   if (comp_template_args
3316       (inner_args,
3317        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3318                                                    (maintmpl)))))
3319     error ("partial specialization %qT does not specialize any template arguments", type);
3320
3321   /* [temp.class.spec]
3322
3323      A partially specialized non-type argument expression shall not
3324      involve template parameters of the partial specialization except
3325      when the argument expression is a simple identifier.
3326
3327      The type of a template parameter corresponding to a specialized
3328      non-type argument shall not be dependent on a parameter of the
3329      specialization. 
3330
3331      Also, we verify that pack expansions only occur at the
3332      end of the argument list.  */
3333   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3334   tpd2.parms = 0;
3335   for (i = 0; i < nargs; ++i)
3336     {
3337       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3338       tree arg = TREE_VEC_ELT (inner_args, i);
3339       tree packed_args = NULL_TREE;
3340       int j, len = 1;
3341
3342       if (ARGUMENT_PACK_P (arg))
3343         {
3344           /* Extract the arguments from the argument pack. We'll be
3345              iterating over these in the following loop.  */
3346           packed_args = ARGUMENT_PACK_ARGS (arg);
3347           len = TREE_VEC_LENGTH (packed_args);
3348         }
3349
3350       for (j = 0; j < len; j++)
3351         {
3352           if (packed_args)
3353             /* Get the Jth argument in the parameter pack.  */
3354             arg = TREE_VEC_ELT (packed_args, j);
3355
3356           if (PACK_EXPANSION_P (arg))
3357             {
3358               /* Pack expansions must come at the end of the
3359                  argument list.  */
3360               if ((packed_args && j < len - 1)
3361                   || (!packed_args && i < nargs - 1))
3362                 {
3363                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3364                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3365                   else
3366                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);                   
3367                 }
3368             }
3369
3370           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3371             /* We only care about the pattern.  */
3372             arg = PACK_EXPANSION_PATTERN (arg);
3373
3374           if (/* These first two lines are the `non-type' bit.  */
3375               !TYPE_P (arg)
3376               && TREE_CODE (arg) != TEMPLATE_DECL
3377               /* This next line is the `argument expression is not just a
3378                  simple identifier' condition and also the `specialized
3379                  non-type argument' bit.  */
3380               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3381             {
3382               if ((!packed_args && tpd.arg_uses_template_parms[i])
3383                   || (packed_args && uses_template_parms (arg)))
3384                 error ("template argument %qE involves template parameter(s)",
3385                        arg);
3386               else 
3387                 {
3388                   /* Look at the corresponding template parameter,
3389                      marking which template parameters its type depends
3390                      upon.  */
3391                   tree type = TREE_TYPE (parm);
3392
3393                   if (!tpd2.parms)
3394                     {
3395                       /* We haven't yet initialized TPD2.  Do so now.  */
3396                       tpd2.arg_uses_template_parms 
3397                         = (int *) alloca (sizeof (int) * nargs);
3398                       /* The number of parameters here is the number in the
3399                          main template, which, as checked in the assertion
3400                          above, is NARGS.  */
3401                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3402                       tpd2.level = 
3403                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3404                     }
3405
3406                   /* Mark the template parameters.  But this time, we're
3407                      looking for the template parameters of the main
3408                      template, not in the specialization.  */
3409                   tpd2.current_arg = i;
3410                   tpd2.arg_uses_template_parms[i] = 0;
3411                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3412                   for_each_template_parm (type,
3413                                           &mark_template_parm,
3414                                           &tpd2,
3415                                           NULL);
3416
3417                   if (tpd2.arg_uses_template_parms [i])
3418                     {
3419                       /* The type depended on some template parameters.
3420                          If they are fully specialized in the
3421                          specialization, that's OK.  */
3422                       int j;
3423                       for (j = 0; j < nargs; ++j)
3424                         if (tpd2.parms[j] != 0
3425                             && tpd.arg_uses_template_parms [j])
3426                           {
3427                             error ("type %qT of template argument %qE depends "
3428                                    "on template parameter(s)", 
3429                                    type,
3430                                    arg);
3431                             break;
3432                           }
3433                     }
3434                 }
3435             }
3436         }
3437     }
3438
3439   if (retrieve_specialization (maintmpl, specargs,
3440                                /*class_specializations_p=*/true))
3441     /* We've already got this specialization.  */
3442     return decl;
3443
3444   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3445     = tree_cons (specargs, inner_parms,
3446                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3447   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3448   return decl;
3449 }
3450
3451 /* Check that a template declaration's use of default arguments is not
3452    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
3453    nonzero if DECL is the thing declared by a primary template.
3454    IS_PARTIAL is nonzero if DECL is a partial specialization.
3455    
3456
3457    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3458    declaration (but not a definition); 1 indicates a declaration, 2
3459    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3460    emitted for extraneous default arguments.
3461
3462    Returns TRUE if there were no errors found, FALSE otherwise. */
3463
3464 bool
3465 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3466                          int is_partial, int is_friend_decl)
3467 {
3468   const char *msg;
3469   int last_level_to_check;
3470   tree parm_level;
3471   bool no_errors = true;
3472
3473   /* [temp.param]
3474
3475      A default template-argument shall not be specified in a
3476      function template declaration or a function template definition, nor
3477      in the template-parameter-list of the definition of a member of a
3478      class template.  */
3479
3480   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3481     /* You can't have a function template declaration in a local
3482        scope, nor you can you define a member of a class template in a
3483        local scope.  */
3484     return true;
3485
3486   if (current_class_type
3487       && !TYPE_BEING_DEFINED (current_class_type)
3488       && DECL_LANG_SPECIFIC (decl)
3489       /* If this is either a friend defined in the scope of the class
3490          or a member function.  */
3491       && (DECL_FUNCTION_MEMBER_P (decl)
3492           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3493           : DECL_FRIEND_CONTEXT (decl)
3494           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3495           : false)
3496       /* And, if it was a member function, it really was defined in
3497          the scope of the class.  */
3498       && (!DECL_FUNCTION_MEMBER_P (decl)
3499           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3500     /* We already checked these parameters when the template was
3501        declared, so there's no need to do it again now.  This function
3502        was defined in class scope, but we're processing it's body now
3503        that the class is complete.  */
3504     return true;
3505
3506   /* Core issue 226 (C++0x only): the following only applies to class
3507      templates.  */
3508   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3509     {
3510       /* [temp.param]
3511
3512          If a template-parameter has a default template-argument, all
3513          subsequent template-parameters shall have a default
3514          template-argument supplied.  */
3515       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3516         {
3517           tree inner_parms = TREE_VALUE (parm_level);
3518           int ntparms = TREE_VEC_LENGTH (inner_parms);
3519           int seen_def_arg_p = 0;
3520           int i;
3521
3522           for (i = 0; i < ntparms; ++i)
3523             {
3524               tree parm = TREE_VEC_ELT (inner_parms, i);
3525
3526               if (parm == error_mark_node)
3527                 continue;
3528
3529               if (TREE_PURPOSE (parm))
3530                 seen_def_arg_p = 1;
3531               else if (seen_def_arg_p)
3532                 {
3533                   error ("no default argument for %qD", TREE_VALUE (parm));
3534                   /* For better subsequent error-recovery, we indicate that
3535                      there should have been a default argument.  */
3536                   TREE_PURPOSE (parm) = error_mark_node;
3537                   no_errors = false;
3538                 }
3539             }
3540         }
3541     }
3542
3543   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3544       || is_partial 
3545       || !is_primary
3546       || is_friend_decl)
3547     /* For an ordinary class template, default template arguments are
3548        allowed at the innermost level, e.g.:
3549          template <class T = int>
3550          struct S {};
3551        but, in a partial specialization, they're not allowed even
3552        there, as we have in [temp.class.spec]:
3553
3554          The template parameter list of a specialization shall not
3555          contain default template argument values.
3556
3557        So, for a partial specialization, or for a function template
3558        (in C++98/C++03), we look at all of them.  */
3559     ;
3560   else
3561     /* But, for a primary class template that is not a partial
3562        specialization we look at all template parameters except the
3563        innermost ones.  */
3564     parms = TREE_CHAIN (parms);
3565
3566   /* Figure out what error message to issue.  */
3567   if (is_friend_decl == 2)
3568     msg = "default template arguments may not be used in function template friend re-declaration";
3569   else if (is_friend_decl)
3570     msg = "default template arguments may not be used in function template friend declarations";
3571   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3572     msg = "default template arguments may not be used in function templates";
3573   else if (is_partial)
3574     msg = "default template arguments may not be used in partial specializations";
3575   else
3576     msg = "default argument for template parameter for class enclosing %qD";
3577
3578   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3579     /* If we're inside a class definition, there's no need to
3580        examine the parameters to the class itself.  On the one
3581        hand, they will be checked when the class is defined, and,
3582        on the other, default arguments are valid in things like:
3583          template <class T = double>
3584          struct S { template <class U> void f(U); };
3585        Here the default argument for `S' has no bearing on the
3586        declaration of `f'.  */
3587     last_level_to_check = template_class_depth (current_class_type) + 1;
3588   else
3589     /* Check everything.  */
3590     last_level_to_check = 0;
3591
3592   for (parm_level = parms;
3593        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3594        parm_level = TREE_CHAIN (parm_level))
3595     {
3596       tree inner_parms = TREE_VALUE (parm_level);
3597       int i;
3598       int ntparms;
3599
3600       ntparms = TREE_VEC_LENGTH (inner_parms);
3601       for (i = 0; i < ntparms; ++i)
3602         {
3603           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3604             continue;
3605
3606           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3607             {
3608               if (msg)
3609                 {
3610                   no_errors = false;
3611                   if (is_friend_decl == 2)
3612                     return no_errors;
3613
3614                   error (msg, decl);
3615                   msg = 0;
3616                 }
3617
3618               /* Clear out the default argument so that we are not
3619                  confused later.  */
3620               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3621             }
3622         }
3623
3624       /* At this point, if we're still interested in issuing messages,
3625          they must apply to classes surrounding the object declared.  */
3626       if (msg)
3627         msg = "default argument for template parameter for class enclosing %qD";
3628     }
3629
3630   return no_errors;
3631 }
3632
3633 /* Worker for push_template_decl_real, called via
3634    for_each_template_parm.  DATA is really an int, indicating the
3635    level of the parameters we are interested in.  If T is a template
3636    parameter of that level, return nonzero.  */
3637
3638 static int
3639 template_parm_this_level_p (tree t, void* data)
3640 {
3641   int this_level = *(int *)data;
3642   int level;
3643
3644   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3645     level = TEMPLATE_PARM_LEVEL (t);
3646   else
3647     level = TEMPLATE_TYPE_LEVEL (t);
3648   return level == this_level;
3649 }
3650
3651 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3652    parameters given by current_template_args, or reuses a
3653    previously existing one, if appropriate.  Returns the DECL, or an
3654    equivalent one, if it is replaced via a call to duplicate_decls.
3655
3656    If IS_FRIEND is true, DECL is a friend declaration.  */
3657
3658 tree
3659 push_template_decl_real (tree decl, bool is_friend)
3660 {
3661   tree tmpl;
3662   tree args;
3663   tree info;
3664   tree ctx;
3665   int primary;
3666   int is_partial;
3667   int new_template_p = 0;
3668   /* True if the template is a member template, in the sense of
3669      [temp.mem].  */
3670   bool member_template_p = false;
3671
3672   if (decl == error_mark_node)
3673     return decl;
3674
3675   /* See if this is a partial specialization.  */
3676   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3677                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3678                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3679
3680   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3681     is_friend = true;
3682
3683   if (is_friend)
3684     /* For a friend, we want the context of the friend function, not
3685        the type of which it is a friend.  */
3686     ctx = DECL_CONTEXT (decl);
3687   else if (CP_DECL_CONTEXT (decl)
3688            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3689     /* In the case of a virtual function, we want the class in which
3690        it is defined.  */
3691     ctx = CP_DECL_CONTEXT (decl);
3692   else
3693     /* Otherwise, if we're currently defining some class, the DECL
3694        is assumed to be a member of the class.  */
3695     ctx = current_scope ();
3696
3697   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3698     ctx = NULL_TREE;
3699
3700   if (!DECL_CONTEXT (decl))
3701     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3702
3703   /* See if this is a primary template.  */
3704   if (is_friend && ctx)
3705     /* A friend template that specifies a class context, i.e.
3706          template <typename T> friend void A<T>::f();
3707        is not primary.  */
3708     primary = 0;
3709   else
3710     primary = template_parm_scope_p ();
3711
3712   if (primary)
3713     {
3714       if (DECL_CLASS_SCOPE_P (decl))
3715         member_template_p = true;
3716       if (TREE_CODE (decl) == TYPE_DECL
3717           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3718         error ("template class without a name");
3719       else if (TREE_CODE (decl) == FUNCTION_DECL)
3720         {
3721           if (DECL_DESTRUCTOR_P (decl))
3722             {
3723               /* [temp.mem]
3724
3725                  A destructor shall not be a member template.  */
3726               error ("destructor %qD declared as member template", decl);
3727               return error_mark_node;
3728             }
3729           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3730               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3731                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3732                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3733                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3734                       == void_list_node)))
3735             {
3736               /* [basic.stc.dynamic.allocation]
3737
3738                  An allocation function can be a function
3739                  template. ... Template allocation functions shall
3740                  have two or more parameters.  */
3741               error ("invalid template declaration of %qD", decl);
3742               return error_mark_node;
3743             }
3744         }
3745       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3746                && CLASS_TYPE_P (TREE_TYPE (decl)))
3747         /* OK */;
3748       else
3749         {
3750           error ("template declaration of %q#D", decl);
3751           return error_mark_node;
3752         }
3753     }
3754
3755   /* Check to see that the rules regarding the use of default
3756      arguments are not being violated.  */
3757   check_default_tmpl_args (decl, current_template_parms,
3758                            primary, is_partial, /*is_friend_decl=*/0);
3759
3760   /* Ensure that there are no parameter packs in the type of this
3761      declaration that have not been expanded.  */
3762   if (TREE_CODE (decl) == FUNCTION_DECL)
3763     {
3764       /* Check each of the arguments individually to see if there are
3765          any bare parameter packs.  */
3766       tree type = TREE_TYPE (decl);
3767       tree arg = DECL_ARGUMENTS (decl);
3768       tree argtype = TYPE_ARG_TYPES (type);
3769
3770       while (arg && argtype)
3771         {
3772           if (!FUNCTION_PARAMETER_PACK_P (arg)
3773               && !check_for_bare_parameter_packs (TREE_TYPE (arg)))
3774             {
3775             /* This is a PARM_DECL that contains unexpanded parameter
3776                packs. We have already complained about this in the
3777                check_for_bare_parameter_packs call, so just replace
3778                these types with ERROR_MARK_NODE.  */
3779               TREE_TYPE (arg) = error_mark_node;
3780               TREE_VALUE (argtype) = error_mark_node;
3781             }
3782
3783           arg = TREE_CHAIN (arg);
3784           argtype = TREE_CHAIN (argtype);
3785         }
3786
3787       /* Check for bare parameter packs in the return type and the
3788          exception specifiers.  */
3789       check_for_bare_parameter_packs (TREE_TYPE (type));
3790       check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type));
3791     }
3792   else
3793     check_for_bare_parameter_packs (TREE_TYPE (decl));
3794
3795   if (is_partial)
3796     return process_partial_specialization (decl);
3797
3798   /* A primary class template can only have one parameter pack, at the
3799      end of the template parameter list.  */
3800   if (primary && TREE_CODE (decl) == TYPE_DECL)
3801     {
3802       tree inner_parms 
3803         = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3804       int i, len = TREE_VEC_LENGTH (inner_parms);
3805       for (i = 0; i < len - 1; i++)
3806         {
3807           tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3808
3809           if (template_parameter_pack_p (parm))
3810             {
3811               if (TREE_CODE (parm) == PARM_DECL)
3812                 error ("parameter pack %qE must be at the end of the"
3813                        " template parameter list", parm);
3814               else
3815                 error ("parameter pack %qT must be at the end of the"
3816                        " template parameter list", TREE_TYPE (parm));
3817             }
3818         }
3819     }
3820
3821   args = current_template_args ();
3822
3823   if (!ctx
3824       || TREE_CODE (ctx) == FUNCTION_DECL
3825       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3826       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3827     {
3828       if (DECL_LANG_SPECIFIC (decl)
3829           && DECL_TEMPLATE_INFO (decl)
3830           && DECL_TI_TEMPLATE (decl))
3831         tmpl = DECL_TI_TEMPLATE (decl);
3832       /* If DECL is a TYPE_DECL for a class-template, then there won't
3833          be DECL_LANG_SPECIFIC.  The information equivalent to
3834          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3835       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3836                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3837                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3838         {
3839           /* Since a template declaration already existed for this
3840              class-type, we must be redeclaring it here.  Make sure
3841              that the redeclaration is valid.  */
3842           redeclare_class_template (TREE_TYPE (decl),
3843                                     current_template_parms);
3844           /* We don't need to create a new TEMPLATE_DECL; just use the
3845              one we already had.  */
3846           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3847         }
3848       else
3849         {
3850           tmpl = build_template_decl (decl, current_template_parms,
3851                                       member_template_p);
3852           new_template_p = 1;
3853
3854           if (DECL_LANG_SPECIFIC (decl)
3855               && DECL_TEMPLATE_SPECIALIZATION (decl))
3856             {
3857               /* A specialization of a member template of a template
3858                  class.  */
3859               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3860               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3861               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3862             }
3863         }
3864     }
3865   else
3866     {
3867       tree a, t, current, parms;
3868       int i;
3869
3870       if (TREE_CODE (decl) == TYPE_DECL)
3871         {
3872           if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3873                || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3874               && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3875               && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3876             tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3877           else
3878             {
3879               error ("%qD does not declare a template type", decl);
3880               return decl;
3881             }
3882         }
3883       else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3884         {
3885           error ("template definition of non-template %q#D", decl);
3886           return decl;
3887         }
3888       else
3889         tmpl = DECL_TI_TEMPLATE (decl);
3890
3891       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3892           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3893           && DECL_TEMPLATE_SPECIALIZATION (decl)
3894           && DECL_MEMBER_TEMPLATE_P (tmpl))
3895         {
3896           tree new_tmpl;
3897
3898           /* The declaration is a specialization of a member
3899              template, declared outside the class.  Therefore, the
3900              innermost template arguments will be NULL, so we
3901              replace them with the arguments determined by the
3902              earlier call to check_explicit_specialization.  */
3903           args = DECL_TI_ARGS (decl);
3904
3905           new_tmpl
3906             = build_template_decl (decl, current_template_parms,
3907                                    member_template_p);
3908           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3909           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3910           DECL_TI_TEMPLATE (decl) = new_tmpl;
3911           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3912           DECL_TEMPLATE_INFO (new_tmpl)
3913             = tree_cons (tmpl, args, NULL_TREE);
3914
3915           register_specialization (new_tmpl,
3916                                    most_general_template (tmpl),
3917                                    args,
3918                                    is_friend);
3919           return decl;
3920         }
3921
3922       /* Make sure the template headers we got make sense.  */
3923
3924       parms = DECL_TEMPLATE_PARMS (tmpl);
3925       i = TMPL_PARMS_DEPTH (parms);
3926       if (TMPL_ARGS_DEPTH (args) != i)
3927         {
3928           error ("expected %d levels of template parms for %q#D, got %d",
3929                  i, decl, TMPL_ARGS_DEPTH (args));
3930         }
3931       else
3932         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3933           {
3934             a = TMPL_ARGS_LEVEL (args, i);
3935             t = INNERMOST_TEMPLATE_PARMS (parms);
3936
3937             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3938               {
3939                 if (current == decl)
3940                   error ("got %d template parameters for %q#D",
3941                          TREE_VEC_LENGTH (a), decl);
3942                 else
3943                   error ("got %d template parameters for %q#T",
3944                          TREE_VEC_LENGTH (a), current);
3945                 error ("  but %d required", TREE_VEC_LENGTH (t));
3946                 return error_mark_node;
3947               }
3948
3949             /* Perhaps we should also check that the parms are used in the
3950                appropriate qualifying scopes in the declarator?  */
3951
3952             if (current == decl)
3953               current = ctx;
3954             else
3955               current = (TYPE_P (current)
3956                          ? TYPE_CONTEXT (current)
3957                          : DECL_CONTEXT (current));
3958           }
3959     }
3960
3961   DECL_TEMPLATE_RESULT (tmpl) = decl;
3962   TREE_TYPE (tmpl) = TREE_TYPE (decl);
3963
3964   /* Push template declarations for global functions and types.  Note
3965      that we do not try to push a global template friend declared in a
3966      template class; such a thing may well depend on the template
3967      parameters of the class.  */
3968   if (new_template_p && !ctx
3969       && !(is_friend && template_class_depth (current_class_type) > 0))
3970     {
3971       tmpl = pushdecl_namespace_level (tmpl, is_friend);
3972       if (tmpl == error_mark_node)
3973         return error_mark_node;
3974
3975       /* Hide template friend classes that haven't been declared yet.  */
3976       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3977         {
3978           DECL_ANTICIPATED (tmpl) = 1;
3979           DECL_FRIEND_P (tmpl) = 1;
3980         }
3981     }
3982
3983   if (primary)
3984     {
3985       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3986       if (DECL_CONV_FN_P (tmpl))
3987         {
3988           int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3989
3990           /* It is a conversion operator. See if the type converted to
3991              depends on innermost template operands.  */
3992
3993           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3994                                          depth))
3995             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3996         }
3997     }
3998
3999   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4000      back to its most general template.  If TMPL is a specialization,
4001      ARGS may only have the innermost set of arguments.  Add the missing
4002      argument levels if necessary.  */
4003   if (DECL_TEMPLATE_INFO (tmpl))
4004     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4005
4006   info = tree_cons (tmpl, args, NULL_TREE);
4007
4008   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4009     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4010   else if (DECL_LANG_SPECIFIC (decl))
4011     DECL_TEMPLATE_INFO (decl) = info;
4012
4013   return DECL_TEMPLATE_RESULT (tmpl);
4014 }
4015
4016 tree
4017 push_template_decl (tree decl)
4018 {
4019   return push_template_decl_real (decl, false);
4020 }
4021
4022 /* Called when a class template TYPE is redeclared with the indicated
4023    template PARMS, e.g.:
4024
4025      template <class T> struct S;
4026      template <class T> struct S {};  */
4027
4028 bool
4029 redeclare_class_template (tree type, tree parms)
4030 {
4031   tree tmpl;
4032   tree tmpl_parms;
4033   int i;
4034
4035   if (!TYPE_TEMPLATE_INFO (type))
4036     {
4037       error ("%qT is not a template type", type);
4038       return false;
4039     }
4040
4041   tmpl = TYPE_TI_TEMPLATE (type);
4042   if (!PRIMARY_TEMPLATE_P (tmpl))
4043     /* The type is nested in some template class.  Nothing to worry
4044        about here; there are no new template parameters for the nested
4045        type.  */
4046     return true;
4047
4048   if (!parms)
4049     {
4050       error ("template specifiers not specified in declaration of %qD",
4051              tmpl);
4052       return false;
4053     }
4054
4055   parms = INNERMOST_TEMPLATE_PARMS (parms);
4056   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4057
4058   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4059     {
4060       error ("previous declaration %q+D", tmpl);
4061       error ("used %d template parameter(s) instead of %d",
4062              TREE_VEC_LENGTH (tmpl_parms),
4063              TREE_VEC_LENGTH (parms));
4064       return false;
4065     }
4066
4067   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4068     {
4069       tree tmpl_parm;
4070       tree parm;
4071       tree tmpl_default;
4072       tree parm_default;
4073
4074       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4075           || TREE_VEC_ELT (parms, i) == error_mark_node)
4076         continue;
4077
4078       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4079       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4080       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4081       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4082
4083       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4084          TEMPLATE_DECL.  */
4085       if (tmpl_parm != error_mark_node
4086            && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4087            || (TREE_CODE (tmpl_parm) != TYPE_DECL
4088                && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4089         {
4090           error ("template parameter %q+#D", tmpl_parm);
4091           error ("redeclared here as %q#D", parm);
4092           return false;
4093         }
4094
4095       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4096         {
4097           /* We have in [temp.param]:
4098
4099              A template-parameter may not be given default arguments
4100              by two different declarations in the same scope.  */
4101           error ("redefinition of default argument for %q#D", parm);
4102           error ("%J  original definition appeared here", tmpl_parm);
4103           return false;
4104         }
4105
4106       if (parm_default != NULL_TREE)
4107         /* Update the previous template parameters (which are the ones
4108            that will really count) with the new default value.  */
4109         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4110       else if (tmpl_default != NULL_TREE)
4111         /* Update the new parameters, too; they'll be used as the
4112            parameters for any members.  */
4113         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4114     }
4115
4116     return true;
4117 }
4118
4119 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4120    (possibly simplified) expression.  */
4121
4122 tree
4123 fold_non_dependent_expr (tree expr)
4124 {
4125   if (expr == NULL_TREE)
4126     return NULL_TREE;
4127
4128   /* If we're in a template, but EXPR isn't value dependent, simplify
4129      it.  We're supposed to treat:
4130
4131        template <typename T> void f(T[1 + 1]);
4132        template <typename T> void f(T[2]);
4133
4134      as two declarations of the same function, for example.  */
4135   if (processing_template_decl
4136       && !type_dependent_expression_p (expr)
4137       && !value_dependent_expression_p (expr))
4138     {
4139       HOST_WIDE_INT saved_processing_template_decl;
4140
4141       saved_processing_template_decl = processing_template_decl;
4142       processing_template_decl = 0;
4143       expr = tsubst_copy_and_build (expr,
4144                                     /*args=*/NULL_TREE,
4145                                     tf_error,
4146                                     /*in_decl=*/NULL_TREE,
4147                                     /*function_p=*/false,
4148                                     /*integral_constant_expression_p=*/true);
4149       processing_template_decl = saved_processing_template_decl;
4150     }
4151   return expr;
4152 }
4153
4154 /* EXPR is an expression which is used in a constant-expression context.
4155    For instance, it could be a VAR_DECL with a constant initializer.
4156    Extract the innest constant expression.
4157
4158    This is basically a more powerful version of
4159    integral_constant_value, which can be used also in templates where
4160    initializers can maintain a syntactic rather than semantic form
4161    (even if they are non-dependent, for access-checking purposes).  */
4162
4163 static tree
4164 fold_decl_constant_value (tree expr)
4165 {
4166   tree const_expr = expr;
4167   do
4168     {
4169       expr = fold_non_dependent_expr (const_expr);
4170       const_expr = integral_constant_value (expr);
4171     }
4172   while (expr != const_expr);
4173
4174   return expr;
4175 }
4176
4177 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4178    must be a function or a pointer-to-function type, as specified
4179    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4180    and check that the resulting function has external linkage.  */
4181
4182 static tree
4183 convert_nontype_argument_function (tree type, tree expr)
4184 {
4185   tree fns = expr;
4186   tree fn, fn_no_ptr;
4187
4188   fn = instantiate_type (type, fns, tf_none);
4189   if (fn == error_mark_node)
4190     return error_mark_node;
4191
4192   fn_no_ptr = fn;
4193   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4194     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4195   if (TREE_CODE (fn_no_ptr) == BASELINK)
4196     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4197  
4198   /* [temp.arg.nontype]/1
4199
4200      A template-argument for a non-type, non-template template-parameter
4201      shall be one of:
4202      [...]
4203      -- the address of an object or function with external linkage.  */
4204   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4205     {
4206       error ("%qE is not a valid template argument for type %qT "
4207              "because function %qD has not external linkage",
4208              expr, type, fn_no_ptr);
4209       return NULL_TREE;
4210     }
4211
4212   return fn;
4213 }
4214
4215 /* Attempt to convert the non-type template parameter EXPR to the
4216    indicated TYPE.  If the conversion is successful, return the
4217    converted value.  If the conversion is unsuccessful, return
4218    NULL_TREE if we issued an error message, or error_mark_node if we
4219    did not.  We issue error messages for out-and-out bad template
4220    parameters, but not simply because the conversion failed, since we
4221    might be just trying to do argument deduction.  Both TYPE and EXPR
4222    must be non-dependent.
4223
4224    The conversion follows the special rules described in
4225    [temp.arg.nontype], and it is much more strict than an implicit
4226    conversion.
4227
4228    This function is called twice for each template argument (see
4229    lookup_template_class for a more accurate description of this
4230    problem). This means that we need to handle expressions which
4231    are not valid in a C++ source, but can be created from the
4232    first call (for instance, casts to perform conversions). These
4233    hacks can go away after we fix the double coercion problem.  */
4234
4235 static tree
4236 convert_nontype_argument (tree type, tree expr)
4237 {
4238   tree expr_type;
4239
4240   /* Detect immediately string literals as invalid non-type argument.
4241      This special-case is not needed for correctness (we would easily
4242      catch this later), but only to provide better diagnostic for this
4243      common user mistake. As suggested by DR 100, we do not mention
4244      linkage issues in the diagnostic as this is not the point.  */
4245   if (TREE_CODE (expr) == STRING_CST)
4246     {
4247       error ("%qE is not a valid template argument for type %qT "
4248              "because string literals can never be used in this context",
4249              expr, type);
4250       return NULL_TREE;
4251     }
4252
4253   /* If we are in a template, EXPR may be non-dependent, but still
4254      have a syntactic, rather than semantic, form.  For example, EXPR
4255      might be a SCOPE_REF, rather than the VAR_DECL to which the
4256      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4257      so that access checking can be performed when the template is
4258      instantiated -- but here we need the resolved form so that we can
4259      convert the argument.  */
4260   expr = fold_non_dependent_expr (expr);
4261   if (error_operand_p (expr))
4262     return error_mark_node;
4263   expr_type = TREE_TYPE (expr);
4264
4265   /* HACK: Due to double coercion, we can get a
4266      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4267      which is the tree that we built on the first call (see
4268      below when coercing to reference to object or to reference to
4269      function). We just strip everything and get to the arg.
4270      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4271      for examples.  */
4272   if (TREE_CODE (expr) == NOP_EXPR)
4273     {
4274       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4275         {
4276           /* ??? Maybe we could use convert_from_reference here, but we
4277              would need to relax its constraints because the NOP_EXPR
4278              could actually change the type to something more cv-qualified,
4279              and this is not folded by convert_from_reference.  */
4280           tree addr = TREE_OPERAND (expr, 0);
4281           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4282           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4283           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4284           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4285                       (TREE_TYPE (expr_type),
4286                        TREE_TYPE (TREE_TYPE (addr))));
4287
4288           expr = TREE_OPERAND (addr, 0);
4289           expr_type = TREE_TYPE (expr);
4290         }
4291
4292       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4293          parameter is a pointer to object, through decay and
4294          qualification conversion. Let's strip everything.  */
4295       else if (TYPE_PTROBV_P (type))
4296         {
4297           STRIP_NOPS (expr);
4298           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4299           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4300           /* Skip the ADDR_EXPR only if it is part of the decay for
4301              an array. Otherwise, it is part of the original argument
4302              in the source code.  */
4303           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4304             expr = TREE_OPERAND (expr, 0);
4305           expr_type = TREE_TYPE (expr);
4306         }
4307     }
4308
4309   /* [temp.arg.nontype]/5, bullet 1
4310
4311      For a non-type template-parameter of integral or enumeration type,
4312      integral promotions (_conv.prom_) and integral conversions
4313      (_conv.integral_) are applied.  */
4314   if (INTEGRAL_TYPE_P (type))
4315     {
4316       if (!INTEGRAL_TYPE_P (expr_type))
4317         return error_mark_node;
4318
4319       expr = fold_decl_constant_value (expr);
4320       /* Notice that there are constant expressions like '4 % 0' which
4321          do not fold into integer constants.  */
4322       if (TREE_CODE (expr) != INTEGER_CST)
4323         {
4324           error ("%qE is not a valid template argument for type %qT "
4325                  "because it is a non-constant expression", expr, type);
4326           return NULL_TREE;
4327         }
4328
4329       /* At this point, an implicit conversion does what we want,
4330          because we already know that the expression is of integral
4331          type.  */
4332       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4333       if (expr == error_mark_node)
4334         return error_mark_node;
4335
4336       /* Conversion was allowed: fold it to a bare integer constant.  */
4337       expr = fold (expr);
4338     }
4339   /* [temp.arg.nontype]/5, bullet 2
4340
4341      For a non-type template-parameter of type pointer to object,
4342      qualification conversions (_conv.qual_) and the array-to-pointer
4343      conversion (_conv.array_) are applied.  */
4344   else if (TYPE_PTROBV_P (type))
4345     {
4346       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4347
4348          A template-argument for a non-type, non-template template-parameter
4349          shall be one of: [...]
4350
4351          -- the name of a non-type template-parameter;
4352          -- the address of an object or function with external linkage, [...]
4353             expressed as "& id-expression" where the & is optional if the name
4354             refers to a function or array, or if the corresponding
4355             template-parameter is a reference.
4356
4357         Here, we do not care about functions, as they are invalid anyway
4358         for a parameter of type pointer-to-object.  */
4359
4360       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4361         /* Non-type template parameters are OK.  */
4362         ;
4363       else if (TREE_CODE (expr) != ADDR_EXPR
4364                && TREE_CODE (expr_type) != ARRAY_TYPE)
4365         {
4366           if (TREE_CODE (expr) == VAR_DECL)
4367             {
4368               error ("%qD is not a valid template argument "
4369                      "because %qD is a variable, not the address of "
4370                      "a variable",
4371                      expr, expr);
4372               return NULL_TREE;
4373             }
4374           /* Other values, like integer constants, might be valid
4375              non-type arguments of some other type.  */
4376           return error_mark_node;
4377         }
4378       else
4379         {
4380           tree decl;
4381
4382           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4383                   ? TREE_OPERAND (expr, 0) : expr);
4384           if (TREE_CODE (decl) != VAR_DECL)
4385             {
4386               error ("%qE is not a valid template argument of type %qT "
4387                      "because %qE is not a variable",
4388                      expr, type, decl);
4389               return NULL_TREE;
4390             }
4391           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4392             {
4393               error ("%qE is not a valid template argument of type %qT "
4394                      "because %qD does not have external linkage",
4395                      expr, type, decl);
4396               return NULL_TREE;
4397             }
4398         }
4399
4400       expr = decay_conversion (expr);
4401       if (expr == error_mark_node)
4402         return error_mark_node;
4403
4404       expr = perform_qualification_conversions (type, expr);
4405       if (expr == error_mark_node)
4406         return error_mark_node;
4407     }
4408   /* [temp.arg.nontype]/5, bullet 3
4409
4410      For a non-type template-parameter of type reference to object, no
4411      conversions apply. The type referred to by the reference may be more
4412      cv-qualified than the (otherwise identical) type of the
4413      template-argument. The template-parameter is bound directly to the
4414      template-argument, which must be an lvalue.  */
4415   else if (TYPE_REF_OBJ_P (type))
4416     {
4417       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4418                                                       expr_type))
4419         return error_mark_node;
4420
4421       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4422         {
4423           error ("%qE is not a valid template argument for type %qT "
4424                  "because of conflicts in cv-qualification", expr, type);
4425           return NULL_TREE;
4426         }
4427
4428       if (!real_lvalue_p (expr))
4429         {
4430           error ("%qE is not a valid template argument for type %qT "
4431                  "because it is not an lvalue", expr, type);
4432           return NULL_TREE;
4433         }
4434
4435       /* [temp.arg.nontype]/1
4436
4437          A template-argument for a non-type, non-template template-parameter
4438          shall be one of: [...]
4439
4440          -- the address of an object or function with external linkage.  */
4441       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4442         {
4443           error ("%qE is not a valid template argument for type %qT "
4444                  "because object %qD has not external linkage",
4445                  expr, type, expr);
4446           return NULL_TREE;
4447         }
4448
4449       expr = build_nop (type, build_address (expr));
4450     }
4451   /* [temp.arg.nontype]/5, bullet 4
4452
4453      For a non-type template-parameter of type pointer to function, only
4454      the function-to-pointer conversion (_conv.func_) is applied. If the
4455      template-argument represents a set of overloaded functions (or a
4456      pointer to such), the matching function is selected from the set
4457      (_over.over_).  */
4458   else if (TYPE_PTRFN_P (type))
4459     {
4460       /* If the argument is a template-id, we might not have enough
4461          context information to decay the pointer.  */
4462       if (!type_unknown_p (expr_type))
4463         {
4464           expr = decay_conversion (expr);
4465           if (expr == error_mark_node)
4466             return error_mark_node;
4467         }
4468
4469       expr = convert_nontype_argument_function (type, expr);
4470       if (!expr || expr == error_mark_node)
4471         return expr;
4472     }
4473   /* [temp.arg.nontype]/5, bullet 5
4474
4475      For a non-type template-parameter of type reference to function, no
4476      conversions apply. If the template-argument represents a set of
4477      overloaded functions, the matching function is selected from the set
4478      (_over.over_).  */
4479   else if (TYPE_REFFN_P (type))
4480     {
4481       if (TREE_CODE (expr) == ADDR_EXPR)
4482         {
4483           error ("%qE is not a valid template argument for type %qT "
4484                  "because it is a pointer", expr, type);
4485           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4486           return NULL_TREE;
4487         }
4488
4489       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4490       if (!expr || expr == error_mark_node)
4491         return expr;
4492
4493       expr = build_nop (type, build_address (expr));
4494     }
4495   /* [temp.arg.nontype]/5, bullet 6
4496
4497      For a non-type template-parameter of type pointer to member function,
4498      no conversions apply. If the template-argument represents a set of
4499      overloaded member functions, the matching member function is selected
4500      from the set (_over.over_).  */
4501   else if (TYPE_PTRMEMFUNC_P (type))
4502     {
4503       expr = instantiate_type (type, expr, tf_none);
4504       if (expr == error_mark_node)
4505         return error_mark_node;
4506
4507       /* There is no way to disable standard conversions in
4508          resolve_address_of_overloaded_function (called by
4509          instantiate_type). It is possible that the call succeeded by
4510          converting &B::I to &D::I (where B is a base of D), so we need
4511          to reject this conversion here.
4512
4513          Actually, even if there was a way to disable standard conversions,
4514          it would still be better to reject them here so that we can
4515          provide a superior diagnostic.  */
4516       if (!same_type_p (TREE_TYPE (expr), type))
4517         {
4518           /* Make sure we are just one standard conversion off.  */
4519           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4520           error ("%qE is not a valid template argument for type %qT "
4521                  "because it is of type %qT", expr, type,
4522                  TREE_TYPE (expr));
4523           inform ("standard conversions are not allowed in this context");
4524           return NULL_TREE;
4525         }
4526     }
4527   /* [temp.arg.nontype]/5, bullet 7
4528
4529      For a non-type template-parameter of type pointer to data member,
4530      qualification conversions (_conv.qual_) are applied.  */
4531   else if (TYPE_PTRMEM_P (type))
4532     {
4533       expr = perform_qualification_conversions (type, expr);
4534       if (expr == error_mark_node)
4535         return expr;
4536     }
4537   /* A template non-type parameter must be one of the above.  */
4538   else
4539     gcc_unreachable ();
4540
4541   /* Sanity check: did we actually convert the argument to the
4542      right type?  */
4543   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4544   return expr;
4545 }
4546
4547
4548 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4549    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4550    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4551    or PARM_DECL.
4552
4553    Consider the example:
4554      template <class T> class A;
4555      template<template <class U> class TT> class B;
4556
4557    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4558    the parameters to A, and OUTER_ARGS contains A.  */
4559
4560 static int
4561 coerce_template_template_parms (tree parm_parms,
4562                                 tree arg_parms,
4563                                 tsubst_flags_t complain,
4564                                 tree in_decl,
4565                                 tree outer_args)
4566 {
4567   int nparms, nargs, i;
4568   tree parm, arg;
4569
4570   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4571   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4572
4573   nparms = TREE_VEC_LENGTH (parm_parms);
4574   nargs = TREE_VEC_LENGTH (arg_parms);
4575
4576   if (nargs != nparms)
4577     return 0;
4578
4579   for (i = 0; i < nparms; ++i)
4580     {
4581       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4582           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4583         continue;
4584
4585       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4586       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4587
4588       if (arg == NULL_TREE || arg == error_mark_node
4589           || parm == NULL_TREE || parm == error_mark_node)
4590         return 0;
4591
4592       if (TREE_CODE (arg) != TREE_CODE (parm))
4593         return 0;
4594
4595       switch (TREE_CODE (parm))
4596         {
4597         case TEMPLATE_DECL:
4598           /* We encounter instantiations of templates like
4599                template <template <template <class> class> class TT>
4600                class C;  */
4601           {
4602             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4603             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4604
4605             if (!coerce_template_template_parms
4606                 (parmparm, argparm, complain, in_decl, outer_args))
4607               return 0;
4608           }
4609           /* Fall through.  */
4610
4611         case TYPE_DECL:
4612           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4613               != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4614             /* One is a parameter pack, the other is not.  */
4615             return 0;
4616           break;
4617
4618         case PARM_DECL:
4619           /* The tsubst call is used to handle cases such as
4620
4621                template <int> class C {};
4622                template <class T, template <T> class TT> class D {};
4623                D<int, C> d;
4624
4625              i.e. the parameter list of TT depends on earlier parameters.  */
4626           if (!dependent_type_p (TREE_TYPE (arg))
4627               && !same_type_p
4628                     (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4629                              TREE_TYPE (arg)))
4630             return 0;
4631
4632           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4633               != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4634             /* One is a parameter pack, the other is not.  */
4635             return 0;
4636           break;
4637
4638         default:
4639           gcc_unreachable ();
4640         }
4641     }
4642   return 1;
4643 }
4644
4645 /* Convert the indicated template ARG as necessary to match the
4646    indicated template PARM.  Returns the converted ARG, or
4647    error_mark_node if the conversion was unsuccessful.  Error and
4648    warning messages are issued under control of COMPLAIN.  This
4649    conversion is for the Ith parameter in the parameter list.  ARGS is
4650    the full set of template arguments deduced so far.  */
4651
4652 static tree
4653 convert_template_argument (tree parm,
4654                            tree arg,
4655                            tree args,
4656                            tsubst_flags_t complain,
4657                            int i,
4658                            tree in_decl)
4659 {
4660   tree val;
4661   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4662   tree check_arg = arg;
4663
4664   if (TREE_CODE (arg) == TREE_LIST
4665       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4666     {
4667       /* The template argument was the name of some
4668          member function.  That's usually
4669          invalid, but static members are OK.  In any
4670          case, grab the underlying fields/functions
4671          and issue an error later if required.  */
4672       arg = TREE_VALUE (arg);
4673       TREE_TYPE (arg) = unknown_type_node;
4674     }
4675
4676   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4677   requires_type = (TREE_CODE (parm) == TYPE_DECL
4678                    || requires_tmpl_type);
4679
4680   /* When determining whether an argument pack expansion is a template,
4681      look at the pattern.  */
4682   if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4683     check_arg = PACK_EXPANSION_PATTERN (check_arg);
4684
4685   is_tmpl_type = 
4686     ((TREE_CODE (check_arg) == TEMPLATE_DECL
4687       && TREE_CODE (DECL_TEMPLATE_RESULT (check_arg)) == TYPE_DECL)
4688      || TREE_CODE (check_arg) == TEMPLATE_TEMPLATE_PARM
4689      || TREE_CODE (check_arg) == UNBOUND_CLASS_TEMPLATE);
4690
4691   if (is_tmpl_type
4692       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4693           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4694     arg = TYPE_STUB_DECL (arg);
4695
4696   is_type = TYPE_P (arg) || is_tmpl_type;
4697
4698   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4699       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4700     {
4701       pedwarn ("to refer to a type member of a template parameter, "
4702                "use %<typename %E%>", arg);
4703
4704       arg = make_typename_type (TREE_OPERAND (arg, 0),
4705                                 TREE_OPERAND (arg, 1),
4706                                 typename_type,
4707                                 complain & tf_error);
4708       is_type = 1;
4709     }
4710   if (is_type != requires_type)
4711     {
4712       if (in_decl)
4713         {
4714           if (complain & tf_error)
4715             {
4716               error ("type/value mismatch at argument %d in template "
4717                      "parameter list for %qD",
4718                      i + 1, in_decl);
4719               if (is_type)
4720                 error ("  expected a constant of type %qT, got %qT",
4721                        TREE_TYPE (parm),
4722                        (is_tmpl_type ? DECL_NAME (arg) : arg));
4723               else if (requires_tmpl_type)
4724                 error ("  expected a class template, got %qE", arg);
4725               else
4726                 error ("  expected a type, got %qE", arg);
4727             }
4728         }
4729       return error_mark_node;
4730     }
4731   if (is_tmpl_type ^ requires_tmpl_type)
4732     {
4733       if (in_decl && (complain & tf_error))
4734         {
4735           error ("type/value mismatch at argument %d in template "
4736                  "parameter list for %qD",
4737                  i + 1, in_decl);
4738           if (is_tmpl_type)
4739             error ("  expected a type, got %qT", DECL_NAME (arg));
4740           else
4741             error ("  expected a class template, got %qT", arg);
4742         }
4743       return error_mark_node;
4744     }
4745
4746   if (is_type)
4747     {
4748       if (requires_tmpl_type)
4749         {
4750           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4751             /* The number of argument required is not known yet.
4752                Just accept it for now.  */
4753             val = TREE_TYPE (arg);
4754           else
4755             {
4756               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4757               tree argparm;
4758
4759               check_arg = arg;
4760               /* When determining whether a pack expansion is a template,
4761                  look at the pattern.  */
4762               if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4763                 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4764
4765               argparm = DECL_INNERMOST_TEMPLATE_PARMS (check_arg);
4766
4767               if (coerce_template_template_parms (parmparm, argparm,
4768                                                   complain, in_decl,
4769                                                   args))
4770                 {
4771                   val = arg;
4772
4773                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
4774                      TEMPLATE_DECL.  */
4775                   if (val != error_mark_node)
4776                     {
4777                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4778                         val = TREE_TYPE (val);
4779                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4780                                && DECL_TEMPLATE_TEMPLATE_PARM_P (check_arg))
4781                         {
4782                           val = TREE_TYPE (check_arg);
4783                           val = make_pack_expansion (val);
4784                         }
4785                     }
4786                 }
4787               else
4788                 {
4789                   if (in_decl && (complain & tf_error))
4790                     {
4791                       error ("type/value mismatch at argument %d in "
4792                              "template parameter list for %qD",
4793                              i + 1, in_decl);
4794                       error ("  expected a template of type %qD, got %qD",
4795                              parm, arg);
4796                     }
4797
4798                   val = error_mark_node;
4799                 }
4800             }
4801         }
4802       else
4803         val = arg;
4804       /* We only form one instance of each template specialization.
4805          Therefore, if we use a non-canonical variant (i.e., a
4806          typedef), any future messages referring to the type will use
4807          the typedef, which is confusing if those future uses do not
4808          themselves also use the typedef.  */
4809       if (TYPE_P (val))
4810         val = canonical_type_variant (val);
4811     }
4812   else
4813     {
4814       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4815
4816       if (invalid_nontype_parm_type_p (t, complain))
4817         return error_mark_node;
4818
4819       if (!uses_template_parms (arg) && !uses_template_parms (t))
4820         /* We used to call digest_init here.  However, digest_init
4821            will report errors, which we don't want when complain
4822            is zero.  More importantly, digest_init will try too
4823            hard to convert things: for example, `0' should not be
4824            converted to pointer type at this point according to
4825            the standard.  Accepting this is not merely an
4826            extension, since deciding whether or not these
4827            conversions can occur is part of determining which
4828            function template to call, or whether a given explicit
4829            argument specification is valid.  */
4830         val = convert_nontype_argument (t, arg);
4831       else
4832         val = arg;
4833
4834       if (val == NULL_TREE)
4835         val = error_mark_node;
4836       else if (val == error_mark_node && (complain & tf_error))
4837         error ("could not convert template argument %qE to %qT",  arg, t);
4838     }
4839
4840   return val;
4841 }
4842
4843 /* Coerces the remaining template arguments in INNER_ARGS (from
4844    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4845    Returns the coerced argument pack. PARM_IDX is the position of this
4846    parameter in the template parameter list. ARGS is the original
4847    template argument list.  */
4848 static tree
4849 coerce_template_parameter_pack (tree parms,
4850                                 int parm_idx,
4851                                 tree args,
4852                                 tree inner_args,
4853                                 int arg_idx,
4854                                 tree new_args,
4855                                 int* lost,
4856                                 tree in_decl,
4857                                 tsubst_flags_t complain)
4858 {
4859   tree parm = TREE_VEC_ELT (parms, parm_idx);
4860   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4861   tree packed_args;
4862   tree argument_pack;
4863   tree packed_types = NULL_TREE;
4864
4865   if (arg_idx > nargs)
4866     arg_idx = nargs;
4867
4868   packed_args = make_tree_vec (nargs - arg_idx);
4869
4870   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
4871       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
4872     {
4873       /* When the template parameter is a non-type template
4874          parameter pack whose type uses parameter packs, we need
4875          to look at each of the template arguments
4876          separately. Build a vector of the types for these
4877          non-type template parameters in PACKED_TYPES.  */
4878       tree expansion 
4879         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
4880       packed_types = tsubst_pack_expansion (expansion, args,
4881                                             complain, in_decl);
4882
4883       if (packed_types == error_mark_node)
4884         return error_mark_node;
4885
4886       /* Check that we have the right number of arguments.  */
4887       if (arg_idx < nargs
4888           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
4889           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
4890         {
4891           int needed_parms 
4892             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
4893           error ("wrong number of template arguments (%d, should be %d)",
4894                  nargs, needed_parms);
4895           return error_mark_node;
4896         }
4897
4898       /* If we aren't able to check the actual arguments now
4899          (because they haven't been expanded yet), we can at least
4900          verify that all of the types used for the non-type
4901          template parameter pack are, in fact, valid for non-type
4902          template parameters.  */
4903       if (arg_idx < nargs 
4904           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
4905         {
4906           int j, len = TREE_VEC_LENGTH (packed_types);
4907           for (j = 0; j < len; ++j)
4908             {
4909               tree t = TREE_VEC_ELT (packed_types, j);
4910               if (invalid_nontype_parm_type_p (t, complain))
4911                 return error_mark_node;
4912             }
4913         }
4914     }
4915
4916   /* Convert the remaining arguments, which will be a part of the
4917      parameter pack "parm".  */
4918   for (; arg_idx < nargs; ++arg_idx)
4919     {
4920       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
4921       tree actual_parm = TREE_VALUE (parm);
4922
4923       if (packed_types && !PACK_EXPANSION_P (arg))
4924         {
4925           /* When we have a vector of types (corresponding to the
4926              non-type template parameter pack that uses parameter
4927              packs in its type, as mention above), and the
4928              argument is not an expansion (which expands to a
4929              currently unknown number of arguments), clone the
4930              parm and give it the next type in PACKED_TYPES.  */
4931           actual_parm = copy_node (actual_parm);
4932           TREE_TYPE (actual_parm) = 
4933             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
4934         }
4935
4936       if (arg != error_mark_node)
4937         arg = convert_template_argument (actual_parm, 
4938                                          arg, new_args, complain, parm_idx,
4939                                          in_decl);
4940       if (arg == error_mark_node)
4941         (*lost)++;
4942       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
4943     }
4944
4945   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4946       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4947     argument_pack = make_node (TYPE_ARGUMENT_PACK);
4948   else
4949     {
4950       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4951       TREE_TYPE (argument_pack) = TREE_TYPE (TREE_VALUE (parm));
4952       TREE_CONSTANT (argument_pack) = 1;
4953     }
4954
4955   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4956   return argument_pack;
4957 }
4958
4959 /* Convert all template arguments to their appropriate types, and
4960    return a vector containing the innermost resulting template
4961    arguments.  If any error occurs, return error_mark_node. Error and
4962    warning messages are issued under control of COMPLAIN.
4963
4964    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4965    for arguments not specified in ARGS.  Otherwise, if
4966    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4967    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
4968    USE_DEFAULT_ARGS is false, then all arguments must be specified in
4969    ARGS.  */
4970
4971 static tree
4972 coerce_template_parms (tree parms,
4973                        tree args,
4974                        tree in_decl,
4975                        tsubst_flags_t complain,
4976                        bool require_all_args,
4977                        bool use_default_args)
4978 {
4979   int nparms, nargs, parm_idx, arg_idx, lost = 0;
4980   tree inner_args;
4981   tree new_args;
4982   tree new_inner_args;
4983   bool saved_skip_evaluation;
4984
4985   /* When used as a boolean value, indicates whether this is a
4986      variadic template parameter list. Since it's an int, we can also
4987      subtract it from nparms to get the number of non-variadic
4988      parameters.  */
4989   int variadic_p = 0;
4990
4991   inner_args 
4992     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
4993
4994   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4995   nparms = TREE_VEC_LENGTH (parms);
4996
4997   /* Determine if there are any parameter packs.  */
4998   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
4999     {
5000       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5001       if (template_parameter_pack_p (tparm))
5002         {
5003           variadic_p = 1;
5004           break;
5005         }
5006     }
5007
5008   if ((nargs > nparms - variadic_p && !variadic_p)
5009       || (nargs < nparms - variadic_p
5010           && require_all_args
5011           && (!use_default_args
5012               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5013                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5014     {
5015       if (complain & tf_error)
5016         {
5017           const char *or_more = "";
5018           if (variadic_p)
5019             {
5020               or_more = " or more";
5021               --nparms;
5022             }
5023
5024           error ("wrong number of template arguments (%d, should be %d%s)",
5025                  nargs, nparms, or_more);
5026
5027           if (in_decl)
5028             error ("provided for %q+D", in_decl);
5029         }
5030
5031       return error_mark_node;
5032     }
5033
5034   /* We need to evaluate the template arguments, even though this
5035      template-id may be nested within a "sizeof".  */
5036   saved_skip_evaluation = skip_evaluation;
5037   skip_evaluation = false;
5038   new_inner_args = make_tree_vec (nparms);
5039   new_args = add_outermost_template_args (args, new_inner_args);
5040   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5041     {
5042       tree arg;
5043       tree parm;
5044
5045       /* Get the Ith template parameter.  */
5046       parm = TREE_VEC_ELT (parms, parm_idx);
5047  
5048       if (parm == error_mark_node)
5049       {
5050         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5051         continue;
5052       }
5053
5054       /* Calculate the next argument.  */
5055       if (template_parameter_pack_p (TREE_VALUE (parm)))
5056         {
5057           /* All remaining arguments will be placed in the
5058              template parameter pack PARM.  */
5059           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5060                                                 inner_args, arg_idx,
5061                                                 new_args, &lost,
5062                                                 in_decl, complain);
5063           
5064           /* Store this argument.  */
5065           if (arg == error_mark_node)
5066             lost++;
5067           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5068
5069           /* We are done with all of the arguments.  */
5070           arg_idx = nargs;
5071
5072           continue;
5073         }
5074       else if (arg_idx < nargs)
5075         {
5076           arg = TREE_VEC_ELT (inner_args, arg_idx);
5077
5078           if (arg && PACK_EXPANSION_P (arg))
5079             {
5080               /* If ARG is a pack expansion, but PARM is not a
5081                  template parameter pack (if it were, we would have
5082                  handled it above), we're trying to expand into a
5083                  fixed-length argument list.  */
5084               if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5085                 error ("cannot expand %<%E%> into a fixed-length "
5086                        "argument list", arg);
5087               else
5088                 error ("cannot expand %<%T%> into a fixed-length "
5089                        "argument list", arg);
5090               return error_mark_node;
5091             }
5092         }
5093       else if (require_all_args)
5094         /* There must be a default arg in this case.  */
5095         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5096                                    complain, in_decl);
5097       else
5098         break;
5099
5100       if (arg == error_mark_node)
5101         {
5102           if (complain & tf_error)
5103             error ("template argument %d is invalid", arg_idx + 1);
5104         }
5105       else if (!arg)
5106         /* This only occurs if there was an error in the template
5107            parameter list itself (which we would already have
5108            reported) that we are trying to recover from, e.g., a class
5109            template with a parameter list such as
5110            template<typename..., typename>.  */
5111         return error_mark_node;
5112       else
5113         arg = convert_template_argument (TREE_VALUE (parm),
5114                                          arg, new_args, complain, 
5115                                          parm_idx, in_decl);
5116
5117       if (arg == error_mark_node)
5118         lost++;
5119       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5120     }
5121   skip_evaluation = saved_skip_evaluation;
5122
5123   if (lost)
5124     return error_mark_node;
5125
5126   return new_inner_args;
5127 }
5128
5129 /* Returns 1 if template args OT and NT are equivalent.  */
5130
5131 static int
5132 template_args_equal (tree ot, tree nt)
5133 {
5134   if (nt == ot)
5135     return 1;
5136
5137   if (TREE_CODE (nt) == TREE_VEC)
5138     /* For member templates */
5139     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5140   else if (PACK_EXPANSION_P (ot))
5141     return PACK_EXPANSION_P (nt) 
5142       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5143                               PACK_EXPANSION_PATTERN (nt));
5144   else if (TYPE_P (nt))
5145     return TYPE_P (ot) && same_type_p (ot, nt);
5146   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5147     return 0;
5148   else
5149     return cp_tree_equal (ot, nt);
5150 }
5151
5152 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5153    of template arguments.  Returns 0 otherwise.  */
5154
5155 int
5156 comp_template_args (tree oldargs, tree newargs)
5157 {
5158   int i;
5159
5160   oldargs = expand_template_argument_pack (oldargs);
5161   newargs = expand_template_argument_pack (newargs);
5162
5163   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5164     return 0;
5165
5166   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5167     {
5168       tree nt = TREE_VEC_ELT (newargs, i);
5169       tree ot = TREE_VEC_ELT (oldargs, i);
5170
5171       if (! template_args_equal (ot, nt))
5172         return 0;
5173     }
5174   return 1;
5175 }
5176
5177 static void
5178 add_pending_template (tree d)
5179 {
5180   tree ti = (TYPE_P (d)
5181              ? CLASSTYPE_TEMPLATE_INFO (d)
5182              : DECL_TEMPLATE_INFO (d));
5183   struct pending_template *pt;
5184   int level;
5185
5186   if (TI_PENDING_TEMPLATE_FLAG (ti))
5187     return;
5188
5189   /* We are called both from instantiate_decl, where we've already had a
5190      tinst_level pushed, and instantiate_template, where we haven't.
5191      Compensate.  */
5192   level = !current_tinst_level || current_tinst_level->decl != d;
5193
5194   if (level)
5195     push_tinst_level (d);
5196
5197   pt = GGC_NEW (struct pending_template);
5198   pt->next = NULL;
5199   pt->tinst = current_tinst_level;
5200   if (last_pending_template)
5201     last_pending_template->next = pt;
5202   else
5203     pending_templates = pt;
5204
5205   last_pending_template = pt;
5206
5207   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5208
5209   if (level)
5210     pop_tinst_level ();
5211 }
5212
5213
5214 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5215    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5216    documentation for TEMPLATE_ID_EXPR.  */
5217
5218 tree
5219 lookup_template_function (tree fns, tree arglist)
5220 {
5221   tree type;
5222
5223   if (fns == error_mark_node || arglist == error_mark_node)
5224     return error_mark_node;
5225
5226   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5227   gcc_assert (fns && (is_overloaded_fn (fns)
5228                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5229
5230   if (BASELINK_P (fns))
5231     {
5232       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5233                                          unknown_type_node,
5234                                          BASELINK_FUNCTIONS (fns),
5235                                          arglist);
5236       return fns;
5237     }
5238
5239   type = TREE_TYPE (fns);
5240   if (TREE_CODE (fns) == OVERLOAD || !type)
5241     type = unknown_type_node;
5242
5243   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5244 }
5245
5246 /* Within the scope of a template class S<T>, the name S gets bound
5247    (in build_self_reference) to a TYPE_DECL for the class, not a
5248    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5249    or one of its enclosing classes, and that type is a template,
5250    return the associated TEMPLATE_DECL.  Otherwise, the original
5251    DECL is returned.  */
5252
5253 tree
5254 maybe_get_template_decl_from_type_decl (tree decl)
5255 {
5256   return (decl != NULL_TREE
5257           && TREE_CODE (decl) == TYPE_DECL
5258           && DECL_ARTIFICIAL (decl)
5259           && CLASS_TYPE_P (TREE_TYPE (decl))
5260           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5261     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5262 }
5263
5264 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5265    parameters, find the desired type.
5266
5267    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5268
5269    IN_DECL, if non-NULL, is the template declaration we are trying to
5270    instantiate.
5271
5272    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5273    the class we are looking up.
5274
5275    Issue error and warning messages under control of COMPLAIN.
5276
5277    If the template class is really a local class in a template
5278    function, then the FUNCTION_CONTEXT is the function in which it is
5279    being instantiated.
5280
5281    ??? Note that this function is currently called *twice* for each
5282    template-id: the first time from the parser, while creating the
5283    incomplete type (finish_template_type), and the second type during the
5284    real instantiation (instantiate_template_class). This is surely something
5285    that we want to avoid. It also causes some problems with argument
5286    coercion (see convert_nontype_argument for more information on this).  */
5287
5288 tree
5289 lookup_template_class (tree d1,
5290                        tree arglist,
5291                        tree in_decl,
5292                        tree context,
5293                        int entering_scope,
5294                        tsubst_flags_t complain)
5295 {
5296   tree template = NULL_TREE, parmlist;
5297   tree t;
5298
5299   timevar_push (TV_NAME_LOOKUP);
5300
5301   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5302     {
5303       tree value = innermost_non_namespace_value (d1);
5304       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5305         template = value;
5306       else
5307         {
5308           if (context)
5309             push_decl_namespace (context);
5310           template = lookup_name (d1);
5311           template = maybe_get_template_decl_from_type_decl (template);
5312           if (context)
5313             pop_decl_namespace ();
5314         }
5315       if (template)
5316         context = DECL_CONTEXT (template);
5317     }
5318   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5319     {
5320       tree type = TREE_TYPE (d1);
5321
5322       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5323          an implicit typename for the second A.  Deal with it.  */
5324       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5325         type = TREE_TYPE (type);
5326
5327       if (CLASSTYPE_TEMPLATE_INFO (type))
5328         {
5329           template = CLASSTYPE_TI_TEMPLATE (type);
5330           d1 = DECL_NAME (template);
5331         }
5332     }
5333   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5334            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5335     {
5336       template = TYPE_TI_TEMPLATE (d1);
5337       d1 = DECL_NAME (template);
5338     }
5339   else if (TREE_CODE (d1) == TEMPLATE_DECL
5340            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5341     {
5342       template = d1;
5343       d1 = DECL_NAME (template);
5344       context = DECL_CONTEXT (template);
5345     }
5346
5347   /* Issue an error message if we didn't find a template.  */
5348   if (! template)
5349     {
5350       if (complain & tf_error)
5351         error ("%qT is not a template", d1);
5352       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5353     }
5354
5355   if (TREE_CODE (template) != TEMPLATE_DECL
5356          /* Make sure it's a user visible template, if it was named by
5357             the user.  */
5358       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5359           && !PRIMARY_TEMPLATE_P (template)))
5360     {
5361       if (complain & tf_error)
5362         {
5363           error ("non-template type %qT used as a template", d1);
5364           if (in_decl)
5365             error ("for template declaration %q+D", in_decl);
5366         }
5367       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5368     }
5369
5370   complain &= ~tf_user;
5371
5372   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5373     {
5374       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5375          template arguments */
5376
5377       tree parm;
5378       tree arglist2;
5379
5380       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5381
5382       /* Consider an example where a template template parameter declared as
5383
5384            template <class T, class U = std::allocator<T> > class TT
5385
5386          The template parameter level of T and U are one level larger than
5387          of TT.  To proper process the default argument of U, say when an
5388          instantiation `TT<int>' is seen, we need to build the full
5389          arguments containing {int} as the innermost level.  Outer levels,
5390          available when not appearing as default template argument, can be
5391          obtained from `current_template_args ()'.
5392
5393          Suppose that TT is later substituted with std::vector.  The above
5394          instantiation is `TT<int, std::allocator<T> >' with TT at
5395          level 1, and T at level 2, while the template arguments at level 1
5396          becomes {std::vector} and the inner level 2 is {int}.  */
5397
5398       if (current_template_parms)
5399         arglist = add_to_template_args (current_template_args (), arglist);
5400
5401       arglist2 = coerce_template_parms (parmlist, arglist, template,
5402                                         complain,
5403                                         /*require_all_args=*/true,
5404                                         /*use_default_args=*/true);
5405       if (arglist2 == error_mark_node
5406           || (!uses_template_parms (arglist2)
5407               && check_instantiated_args (template, arglist2, complain)))
5408         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5409
5410       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5411       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5412     }
5413   else
5414     {
5415       tree template_type = TREE_TYPE (template);
5416       tree gen_tmpl;
5417       tree type_decl;
5418       tree found = NULL_TREE;
5419       int arg_depth;
5420       int parm_depth;
5421       int is_partial_instantiation;
5422
5423       gen_tmpl = most_general_template (template);
5424       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5425       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5426       arg_depth = TMPL_ARGS_DEPTH (arglist);
5427
5428       if (arg_depth == 1 && parm_depth > 1)
5429         {
5430           /* We've been given an incomplete set of template arguments.
5431              For example, given:
5432
5433                template <class T> struct S1 {
5434                  template <class U> struct S2 {};
5435                  template <class U> struct S2<U*> {};
5436                 };
5437
5438              we will be called with an ARGLIST of `U*', but the
5439              TEMPLATE will be `template <class T> template
5440              <class U> struct S1<T>::S2'.  We must fill in the missing
5441              arguments.  */
5442           arglist
5443             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5444                                            arglist);
5445           arg_depth = TMPL_ARGS_DEPTH (arglist);
5446         }
5447
5448       /* Now we should have enough arguments.  */
5449       gcc_assert (parm_depth == arg_depth);
5450
5451       /* From here on, we're only interested in the most general
5452          template.  */
5453       template = gen_tmpl;
5454
5455       /* Calculate the BOUND_ARGS.  These will be the args that are
5456          actually tsubst'd into the definition to create the
5457          instantiation.  */
5458       if (parm_depth > 1)
5459         {
5460           /* We have multiple levels of arguments to coerce, at once.  */
5461           int i;
5462           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5463
5464           tree bound_args = make_tree_vec (parm_depth);
5465
5466           for (i = saved_depth,
5467                  t = DECL_TEMPLATE_PARMS (template);
5468                i > 0 && t != NULL_TREE;
5469                --i, t = TREE_CHAIN (t))
5470             {
5471               tree a = coerce_template_parms (TREE_VALUE (t),
5472                                               arglist, template,
5473                                               complain,
5474                                               /*require_all_args=*/true,
5475                                               /*use_default_args=*/true);
5476
5477               /* Don't process further if one of the levels fails.  */
5478               if (a == error_mark_node)
5479                 {
5480                   /* Restore the ARGLIST to its full size.  */
5481                   TREE_VEC_LENGTH (arglist) = saved_depth;
5482                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5483                 }
5484
5485               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5486
5487               /* We temporarily reduce the length of the ARGLIST so
5488                  that coerce_template_parms will see only the arguments
5489                  corresponding to the template parameters it is
5490                  examining.  */
5491               TREE_VEC_LENGTH (arglist)--;
5492             }
5493
5494           /* Restore the ARGLIST to its full size.  */
5495           TREE_VEC_LENGTH (arglist) = saved_depth;
5496
5497           arglist = bound_args;
5498         }
5499       else
5500         arglist
5501           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5502                                    INNERMOST_TEMPLATE_ARGS (arglist),
5503                                    template,
5504                                    complain,
5505                                    /*require_all_args=*/true,
5506                                    /*use_default_args=*/true);
5507
5508       if (arglist == error_mark_node)
5509         /* We were unable to bind the arguments.  */
5510         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5511
5512       /* In the scope of a template class, explicit references to the
5513          template class refer to the type of the template, not any
5514          instantiation of it.  For example, in:
5515
5516            template <class T> class C { void f(C<T>); }
5517
5518          the `C<T>' is just the same as `C'.  Outside of the
5519          class, however, such a reference is an instantiation.  */
5520       if (comp_template_args (TYPE_TI_ARGS (template_type),
5521                               arglist))
5522         {
5523           found = template_type;
5524
5525           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5526             {
5527               tree ctx;
5528
5529               for (ctx = current_class_type;
5530                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5531                    ctx = (TYPE_P (ctx)
5532                           ? TYPE_CONTEXT (ctx)
5533                           : DECL_CONTEXT (ctx)))
5534                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5535                   goto found_ctx;
5536
5537               /* We're not in the scope of the class, so the
5538                  TEMPLATE_TYPE is not the type we want after all.  */
5539               found = NULL_TREE;
5540             found_ctx:;
5541             }
5542         }
5543       if (found)
5544         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5545
5546       /* If we already have this specialization, return it.  */
5547       found = retrieve_specialization (template, arglist,
5548                                        /*class_specializations_p=*/false);
5549       if (found)
5550         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5551
5552       /* This type is a "partial instantiation" if any of the template
5553          arguments still involve template parameters.  Note that we set
5554          IS_PARTIAL_INSTANTIATION for partial specializations as
5555          well.  */
5556       is_partial_instantiation = uses_template_parms (arglist);
5557
5558       /* If the deduced arguments are invalid, then the binding
5559          failed.  */
5560       if (!is_partial_instantiation
5561           && check_instantiated_args (template,
5562                                       INNERMOST_TEMPLATE_ARGS (arglist),
5563                                       complain))
5564         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5565
5566       if (!is_partial_instantiation
5567           && !PRIMARY_TEMPLATE_P (template)
5568           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5569         {
5570           found = xref_tag_from_type (TREE_TYPE (template),
5571                                       DECL_NAME (template),
5572                                       /*tag_scope=*/ts_global);
5573           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5574         }
5575
5576       context = tsubst (DECL_CONTEXT (template), arglist,
5577                         complain, in_decl);
5578       if (!context)
5579         context = global_namespace;
5580
5581       /* Create the type.  */
5582       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5583         {
5584           if (!is_partial_instantiation)
5585             {
5586               set_current_access_from_decl (TYPE_NAME (template_type));
5587               t = start_enum (TYPE_IDENTIFIER (template_type));
5588             }
5589           else
5590             /* We don't want to call start_enum for this type, since
5591                the values for the enumeration constants may involve
5592                template parameters.  And, no one should be interested
5593                in the enumeration constants for such a type.  */
5594             t = make_node (ENUMERAL_TYPE);
5595         }
5596       else
5597         {
5598           t = make_aggr_type (TREE_CODE (template_type));
5599           CLASSTYPE_DECLARED_CLASS (t)
5600             = CLASSTYPE_DECLARED_CLASS (template_type);
5601           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5602           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5603
5604           /* A local class.  Make sure the decl gets registered properly.  */
5605           if (context == current_function_decl)
5606             pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5607
5608           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5609             /* This instantiation is another name for the primary
5610                template type. Set the TYPE_CANONICAL field
5611                appropriately. */
5612             TYPE_CANONICAL (t) = template_type;
5613           else if (any_template_arguments_need_structural_equality_p (arglist))
5614             /* Some of the template arguments require structural
5615                equality testing, so this template class requires
5616                structural equality testing. */
5617             SET_TYPE_STRUCTURAL_EQUALITY (t);
5618         }
5619
5620       /* If we called start_enum or pushtag above, this information
5621          will already be set up.  */
5622       if (!TYPE_NAME (t))
5623         {
5624           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5625
5626           type_decl = create_implicit_typedef (DECL_NAME (template), t);
5627           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5628           TYPE_STUB_DECL (t) = type_decl;
5629           DECL_SOURCE_LOCATION (type_decl)
5630             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5631         }
5632       else
5633         type_decl = TYPE_NAME (t);
5634
5635       TREE_PRIVATE (type_decl)
5636         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5637       TREE_PROTECTED (type_decl)
5638         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5639       DECL_IN_SYSTEM_HEADER (type_decl)
5640         = DECL_IN_SYSTEM_HEADER (template);
5641       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5642         {
5643           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5644           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5645         }
5646
5647       /* Set up the template information.  We have to figure out which
5648          template is the immediate parent if this is a full
5649          instantiation.  */
5650       if (parm_depth == 1 || is_partial_instantiation
5651           || !PRIMARY_TEMPLATE_P (template))
5652         /* This case is easy; there are no member templates involved.  */
5653         found = template;
5654       else
5655         {
5656           /* This is a full instantiation of a member template.  Look
5657              for a partial instantiation of which this is an instance.  */
5658
5659           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5660                found; found = TREE_CHAIN (found))
5661             {
5662               int success;
5663               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5664
5665               /* We only want partial instantiations, here, not
5666                  specializations or full instantiations.  */
5667               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5668                   || !uses_template_parms (TREE_VALUE (found)))
5669                 continue;
5670
5671               /* Temporarily reduce by one the number of levels in the
5672                  ARGLIST and in FOUND so as to avoid comparing the
5673                  last set of arguments.  */
5674               TREE_VEC_LENGTH (arglist)--;
5675               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5676
5677               /* See if the arguments match.  If they do, then TMPL is
5678                  the partial instantiation we want.  */
5679               success = comp_template_args (TREE_PURPOSE (found), arglist);
5680
5681               /* Restore the argument vectors to their full size.  */
5682               TREE_VEC_LENGTH (arglist)++;
5683               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5684
5685               if (success)
5686                 {
5687                   found = tmpl;
5688                   break;
5689                 }
5690             }
5691
5692           if (!found)
5693             {
5694               /* There was no partial instantiation. This happens
5695                  where C<T> is a member template of A<T> and it's used
5696                  in something like
5697
5698                   template <typename T> struct B { A<T>::C<int> m; };
5699                   B<float>;
5700
5701                  Create the partial instantiation.
5702                */
5703               TREE_VEC_LENGTH (arglist)--;
5704               found = tsubst (template, arglist, complain, NULL_TREE);
5705               TREE_VEC_LENGTH (arglist)++;
5706             }
5707         }
5708
5709       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5710       DECL_TEMPLATE_INSTANTIATIONS (template)
5711         = tree_cons (arglist, t,
5712                      DECL_TEMPLATE_INSTANTIATIONS (template));
5713
5714       if (TREE_CODE (t) == ENUMERAL_TYPE
5715           && !is_partial_instantiation)
5716         /* Now that the type has been registered on the instantiations
5717            list, we set up the enumerators.  Because the enumeration
5718            constants may involve the enumeration type itself, we make
5719            sure to register the type first, and then create the
5720            constants.  That way, doing tsubst_expr for the enumeration
5721            constants won't result in recursive calls here; we'll find
5722            the instantiation and exit above.  */
5723         tsubst_enum (template_type, t, arglist);
5724
5725       if (is_partial_instantiation)
5726         /* If the type makes use of template parameters, the
5727            code that generates debugging information will crash.  */
5728         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5729
5730       /* Possibly limit visibility based on template args.  */
5731       TREE_PUBLIC (type_decl) = 1;
5732       determine_visibility (type_decl);
5733
5734       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5735     }
5736   timevar_pop (TV_NAME_LOOKUP);
5737 }
5738 \f
5739 struct pair_fn_data
5740 {
5741   tree_fn_t fn;
5742   void *data;
5743   struct pointer_set_t *visited;
5744 };
5745
5746 /* Called from for_each_template_parm via walk_tree.  */
5747
5748 static tree
5749 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5750 {
5751   tree t = *tp;
5752   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5753   tree_fn_t fn = pfd->fn;
5754   void *data = pfd->data;
5755
5756   if (TYPE_P (t)
5757       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5758     return error_mark_node;
5759
5760   switch (TREE_CODE (t))
5761     {
5762     case RECORD_TYPE:
5763       if (TYPE_PTRMEMFUNC_P (t))
5764         break;
5765       /* Fall through.  */
5766
5767     case UNION_TYPE:
5768     case ENUMERAL_TYPE:
5769       if (!TYPE_TEMPLATE_INFO (t))
5770         *walk_subtrees = 0;
5771       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5772                                        fn, data, pfd->visited))
5773         return error_mark_node;
5774       break;
5775
5776     case INTEGER_TYPE:
5777       if (for_each_template_parm (TYPE_MIN_VALUE (t),
5778                                   fn, data, pfd->visited)
5779           || for_each_template_parm (TYPE_MAX_VALUE (t),
5780                                      fn, data, pfd->visited))
5781         return error_mark_node;
5782       break;
5783
5784     case METHOD_TYPE:
5785       /* Since we're not going to walk subtrees, we have to do this
5786          explicitly here.  */
5787       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5788                                   pfd->visited))
5789         return error_mark_node;
5790       /* Fall through.  */
5791
5792     case FUNCTION_TYPE:
5793       /* Check the return type.  */
5794       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5795         return error_mark_node;
5796
5797       /* Check the parameter types.  Since default arguments are not
5798          instantiated until they are needed, the TYPE_ARG_TYPES may
5799          contain expressions that involve template parameters.  But,
5800          no-one should be looking at them yet.  And, once they're
5801          instantiated, they don't contain template parameters, so
5802          there's no point in looking at them then, either.  */
5803       {
5804         tree parm;
5805
5806         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5807           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5808                                       pfd->visited))
5809             return error_mark_node;
5810
5811         /* Since we've already handled the TYPE_ARG_TYPES, we don't
5812            want walk_tree walking into them itself.  */
5813         *walk_subtrees = 0;
5814       }
5815       break;
5816
5817     case TYPEOF_TYPE:
5818       if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
5819                                   pfd->visited))
5820         return error_mark_node;
5821       break;
5822
5823     case FUNCTION_DECL:
5824     case VAR_DECL:
5825       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
5826           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5827                                      pfd->visited))
5828         return error_mark_node;
5829       /* Fall through.  */
5830
5831     case PARM_DECL:
5832     case CONST_DECL:
5833       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5834           && for_each_template_parm (DECL_INITIAL (t), fn, data,
5835                                      pfd->visited))
5836         return error_mark_node;
5837       if (DECL_CONTEXT (t)
5838           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5839                                      pfd->visited))
5840         return error_mark_node;
5841       break;
5842
5843     case BOUND_TEMPLATE_TEMPLATE_PARM:
5844       /* Record template parameters such as `T' inside `TT<T>'.  */
5845       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
5846         return error_mark_node;
5847       /* Fall through.  */
5848
5849     case TEMPLATE_TEMPLATE_PARM:
5850     case TEMPLATE_TYPE_PARM:
5851     case TEMPLATE_PARM_INDEX:
5852       if (fn && (*fn)(t, data))
5853         return error_mark_node;
5854       else if (!fn)
5855         return error_mark_node;
5856       break;
5857
5858     case TEMPLATE_DECL:
5859       /* A template template parameter is encountered.  */
5860       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
5861           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5862         return error_mark_node;
5863
5864       /* Already substituted template template parameter */
5865       *walk_subtrees = 0;
5866       break;
5867
5868     case TYPENAME_TYPE:
5869       if (!fn
5870           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5871                                      data, pfd->visited))
5872         return error_mark_node;
5873       break;
5874
5875     case CONSTRUCTOR:
5876       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5877           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5878                                      (TREE_TYPE (t)), fn, data,
5879                                      pfd->visited))
5880         return error_mark_node;
5881       break;
5882
5883     case INDIRECT_REF:
5884     case COMPONENT_REF:
5885       /* If there's no type, then this thing must be some expression
5886          involving template parameters.  */
5887       if (!fn && !TREE_TYPE (t))
5888         return error_mark_node;
5889       break;
5890
5891     case MODOP_EXPR:
5892     case CAST_EXPR:
5893     case REINTERPRET_CAST_EXPR:
5894     case CONST_CAST_EXPR:
5895     case STATIC_CAST_EXPR:
5896     case DYNAMIC_CAST_EXPR:
5897     case ARROW_EXPR:
5898     case DOTSTAR_EXPR:
5899     case TYPEID_EXPR:
5900     case PSEUDO_DTOR_EXPR:
5901       if (!fn)
5902         return error_mark_node;
5903       break;
5904
5905     default:
5906       break;
5907     }
5908
5909   /* We didn't find any template parameters we liked.  */
5910   return NULL_TREE;
5911 }
5912
5913 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5914    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5915    call FN with the parameter and the DATA.
5916    If FN returns nonzero, the iteration is terminated, and
5917    for_each_template_parm returns 1.  Otherwise, the iteration
5918    continues.  If FN never returns a nonzero value, the value
5919    returned by for_each_template_parm is 0.  If FN is NULL, it is
5920    considered to be the function which always returns 1.  */
5921
5922 static int
5923 for_each_template_parm (tree t, tree_fn_t fn, void* data,
5924                         struct pointer_set_t *visited)
5925 {
5926   struct pair_fn_data pfd;
5927   int result;
5928
5929   /* Set up.  */
5930   pfd.fn = fn;
5931   pfd.data = data;
5932
5933   /* Walk the tree.  (Conceptually, we would like to walk without
5934      duplicates, but for_each_template_parm_r recursively calls
5935      for_each_template_parm, so we would need to reorganize a fair
5936      bit to use walk_tree_without_duplicates, so we keep our own
5937      visited list.)  */
5938   if (visited)
5939     pfd.visited = visited;
5940   else
5941     pfd.visited = pointer_set_create ();
5942   result = cp_walk_tree (&t,
5943                          for_each_template_parm_r,
5944                          &pfd,
5945                          pfd.visited) != NULL_TREE;
5946
5947   /* Clean up.  */
5948   if (!visited)
5949     {
5950       pointer_set_destroy (pfd.visited);
5951       pfd.visited = 0;
5952     }
5953
5954   return result;
5955 }
5956
5957 /* Returns true if T depends on any template parameter.  */
5958
5959 int
5960 uses_template_parms (tree t)
5961 {
5962   bool dependent_p;
5963   int saved_processing_template_decl;
5964
5965   saved_processing_template_decl = processing_template_decl;
5966   if (!saved_processing_template_decl)
5967     processing_template_decl = 1;
5968   if (TYPE_P (t))
5969     dependent_p = dependent_type_p (t);
5970   else if (TREE_CODE (t) == TREE_VEC)
5971     dependent_p = any_dependent_template_arguments_p (t);
5972   else if (TREE_CODE (t) == TREE_LIST)
5973     dependent_p = (uses_template_parms (TREE_VALUE (t))
5974                    || uses_template_parms (TREE_CHAIN (t)));
5975   else if (TREE_CODE (t) == TYPE_DECL)
5976     dependent_p = dependent_type_p (TREE_TYPE (t));
5977   else if (DECL_P (t)
5978            || EXPR_P (t)
5979            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5980            || TREE_CODE (t) == OVERLOAD
5981            || TREE_CODE (t) == BASELINK
5982            || TREE_CODE (t) == IDENTIFIER_NODE
5983            || TREE_CODE (t) == TRAIT_EXPR
5984            || CONSTANT_CLASS_P (t))
5985     dependent_p = (type_dependent_expression_p (t)
5986                    || value_dependent_expression_p (t));
5987   else
5988     {
5989       gcc_assert (t == error_mark_node);
5990       dependent_p = false;
5991     }
5992
5993   processing_template_decl = saved_processing_template_decl;
5994
5995   return dependent_p;
5996 }
5997
5998 /* Returns true if T depends on any template parameter with level LEVEL.  */
5999
6000 int
6001 uses_template_parms_level (tree t, int level)
6002 {
6003   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
6004 }
6005
6006 static int tinst_depth;
6007 extern int max_tinst_depth;
6008 #ifdef GATHER_STATISTICS
6009 int depth_reached;
6010 #endif
6011 static int tinst_level_tick;
6012 static int last_template_error_tick;
6013
6014 /* We're starting to instantiate D; record the template instantiation context
6015    for diagnostics and to restore it later.  */
6016
6017 static int
6018 push_tinst_level (tree d)
6019 {
6020   struct tinst_level *new;
6021
6022   if (tinst_depth >= max_tinst_depth)
6023     {
6024       /* If the instantiation in question still has unbound template parms,
6025          we don't really care if we can't instantiate it, so just return.
6026          This happens with base instantiation for implicit `typename'.  */
6027       if (uses_template_parms (d))
6028         return 0;
6029
6030       last_template_error_tick = tinst_level_tick;
6031       error ("template instantiation depth exceeds maximum of %d (use "
6032              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6033              max_tinst_depth, d);
6034
6035       print_instantiation_context ();
6036
6037       return 0;
6038     }
6039
6040   new = GGC_NEW (struct tinst_level);
6041   new->decl = d;
6042   new->locus = input_location;
6043   new->in_system_header_p = in_system_header;
6044   new->next = current_tinst_level;
6045   current_tinst_level = new;
6046
6047   ++tinst_depth;
6048 #ifdef GATHER_STATISTICS
6049   if (tinst_depth > depth_reached)
6050     depth_reached = tinst_depth;
6051 #endif
6052
6053   ++tinst_level_tick;
6054   return 1;
6055 }
6056
6057 /* We're done instantiating this template; return to the instantiation
6058    context.  */
6059
6060 static void
6061 pop_tinst_level (void)
6062 {
6063   /* Restore the filename and line number stashed away when we started
6064      this instantiation.  */
6065   input_location = current_tinst_level->locus;
6066   in_system_header = current_tinst_level->in_system_header_p;
6067   current_tinst_level = current_tinst_level->next;
6068   --tinst_depth;
6069   ++tinst_level_tick;
6070 }
6071
6072 /* We're instantiating a deferred template; restore the template
6073    instantiation context in which the instantiation was requested, which
6074    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6075
6076 static tree
6077 reopen_tinst_level (struct tinst_level *level)
6078 {
6079   struct tinst_level *t;
6080
6081   tinst_depth = 0;
6082   for (t = level; t; t = t->next)
6083     ++tinst_depth;
6084
6085   current_tinst_level = level;
6086   pop_tinst_level ();
6087   return level->decl;
6088 }
6089
6090 /* Returns the TINST_LEVEL which gives the original instantiation
6091    context.  */
6092
6093 struct tinst_level *
6094 outermost_tinst_level (void)
6095 {
6096   struct tinst_level *level = current_tinst_level;
6097   if (level)
6098     while (level->next)
6099       level = level->next;
6100   return level;
6101 }
6102
6103 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6104    vector of template arguments, as for tsubst.
6105
6106    Returns an appropriate tsubst'd friend declaration.  */
6107
6108 static tree
6109 tsubst_friend_function (tree decl, tree args)
6110 {
6111   tree new_friend;
6112
6113   if (TREE_CODE (decl) == FUNCTION_DECL
6114       && DECL_TEMPLATE_INSTANTIATION (decl)
6115       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6116     /* This was a friend declared with an explicit template
6117        argument list, e.g.:
6118
6119        friend void f<>(T);
6120
6121        to indicate that f was a template instantiation, not a new
6122        function declaration.  Now, we have to figure out what
6123        instantiation of what template.  */
6124     {
6125       tree template_id, arglist, fns;
6126       tree new_args;
6127       tree tmpl;
6128       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6129
6130       /* Friend functions are looked up in the containing namespace scope.
6131          We must enter that scope, to avoid finding member functions of the
6132          current cless with same name.  */
6133       push_nested_namespace (ns);
6134       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6135                          tf_warning_or_error, NULL_TREE,
6136                          /*integral_constant_expression_p=*/false);
6137       pop_nested_namespace (ns);
6138       arglist = tsubst (DECL_TI_ARGS (decl), args,
6139                         tf_warning_or_error, NULL_TREE);
6140       template_id = lookup_template_function (fns, arglist);
6141
6142       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6143       tmpl = determine_specialization (template_id, new_friend,
6144                                        &new_args,
6145                                        /*need_member_template=*/0,
6146                                        TREE_VEC_LENGTH (args),
6147                                        tsk_none);
6148       return instantiate_template (tmpl, new_args, tf_error);
6149     }
6150
6151   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6152
6153   /* The NEW_FRIEND will look like an instantiation, to the
6154      compiler, but is not an instantiation from the point of view of
6155      the language.  For example, we might have had:
6156
6157      template <class T> struct S {
6158        template <class U> friend void f(T, U);
6159      };
6160
6161      Then, in S<int>, template <class U> void f(int, U) is not an
6162      instantiation of anything.  */
6163   if (new_friend == error_mark_node)
6164     return error_mark_node;
6165
6166   DECL_USE_TEMPLATE (new_friend) = 0;
6167   if (TREE_CODE (decl) == TEMPLATE_DECL)
6168     {
6169       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6170       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6171         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6172     }
6173
6174   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6175      is not a template instantiation and should not be mangled like
6176      one.  Therefore, we forget the mangling here; we'll recompute it
6177      later if we need it.  */
6178   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6179     {
6180       SET_DECL_RTL (new_friend, NULL_RTX);
6181       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6182     }
6183
6184   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6185     {
6186       tree old_decl;
6187       tree new_friend_template_info;
6188       tree new_friend_result_template_info;
6189       tree ns;
6190       int  new_friend_is_defn;
6191
6192       /* We must save some information from NEW_FRIEND before calling
6193          duplicate decls since that function will free NEW_FRIEND if
6194          possible.  */
6195       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6196       new_friend_is_defn =
6197             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6198                            (template_for_substitution (new_friend)))
6199              != NULL_TREE);
6200       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6201         {
6202           /* This declaration is a `primary' template.  */
6203           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6204
6205           new_friend_result_template_info
6206             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6207         }
6208       else
6209         new_friend_result_template_info = NULL_TREE;
6210
6211       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6212       if (new_friend_is_defn)
6213         DECL_INITIAL (new_friend) = error_mark_node;
6214
6215       /* Inside pushdecl_namespace_level, we will push into the
6216          current namespace. However, the friend function should go
6217          into the namespace of the template.  */
6218       ns = decl_namespace_context (new_friend);
6219       push_nested_namespace (ns);
6220       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6221       pop_nested_namespace (ns);
6222
6223       if (old_decl == error_mark_node)
6224         return error_mark_node;
6225
6226       if (old_decl != new_friend)
6227         {
6228           /* This new friend declaration matched an existing
6229              declaration.  For example, given:
6230
6231                template <class T> void f(T);
6232                template <class U> class C {
6233                  template <class T> friend void f(T) {}
6234                };
6235
6236              the friend declaration actually provides the definition
6237              of `f', once C has been instantiated for some type.  So,
6238              old_decl will be the out-of-class template declaration,
6239              while new_friend is the in-class definition.
6240
6241              But, if `f' was called before this point, the
6242              instantiation of `f' will have DECL_TI_ARGS corresponding
6243              to `T' but not to `U', references to which might appear
6244              in the definition of `f'.  Previously, the most general
6245              template for an instantiation of `f' was the out-of-class
6246              version; now it is the in-class version.  Therefore, we
6247              run through all specialization of `f', adding to their
6248              DECL_TI_ARGS appropriately.  In particular, they need a
6249              new set of outer arguments, corresponding to the
6250              arguments for this class instantiation.
6251
6252              The same situation can arise with something like this:
6253
6254                friend void f(int);
6255                template <class T> class C {
6256                  friend void f(T) {}
6257                };
6258
6259              when `C<int>' is instantiated.  Now, `f(int)' is defined
6260              in the class.  */
6261
6262           if (!new_friend_is_defn)
6263             /* On the other hand, if the in-class declaration does
6264                *not* provide a definition, then we don't want to alter
6265                existing definitions.  We can just leave everything
6266                alone.  */
6267             ;
6268           else
6269             {
6270               /* Overwrite whatever template info was there before, if
6271                  any, with the new template information pertaining to
6272                  the declaration.  */
6273               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6274
6275               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6276                 reregister_specialization (new_friend,
6277                                            most_general_template (old_decl),
6278                                            old_decl);
6279               else
6280                 {
6281                   tree t;
6282                   tree new_friend_args;
6283
6284                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6285                     = new_friend_result_template_info;
6286
6287                   new_friend_args = TI_ARGS (new_friend_template_info);
6288                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6289                        t != NULL_TREE;
6290                        t = TREE_CHAIN (t))
6291                     {
6292                       tree spec = TREE_VALUE (t);
6293
6294                       DECL_TI_ARGS (spec)
6295                         = add_outermost_template_args (new_friend_args,
6296                                                        DECL_TI_ARGS (spec));
6297                     }
6298
6299                   /* Now, since specializations are always supposed to
6300                      hang off of the most general template, we must move
6301                      them.  */
6302                   t = most_general_template (old_decl);
6303                   if (t != old_decl)
6304                     {
6305                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6306                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6307                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6308                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6309                     }
6310                 }
6311             }
6312
6313           /* The information from NEW_FRIEND has been merged into OLD_DECL
6314              by duplicate_decls.  */
6315           new_friend = old_decl;
6316         }
6317     }
6318   else
6319     {
6320       tree context = DECL_CONTEXT (new_friend);
6321       bool dependent_p;
6322
6323       /* In the code
6324            template <class T> class C {
6325              template <class U> friend void C1<U>::f (); // case 1
6326              friend void C2<T>::f ();                    // case 2
6327            };
6328          we only need to make sure CONTEXT is a complete type for
6329          case 2.  To distinguish between the two cases, we note that
6330          CONTEXT of case 1 remains dependent type after tsubst while
6331          this isn't true for case 2.  */
6332       ++processing_template_decl;
6333       dependent_p = dependent_type_p (context);
6334       --processing_template_decl;
6335
6336       if (!dependent_p
6337           && !complete_type_or_else (context, NULL_TREE))
6338         return error_mark_node;
6339
6340       if (COMPLETE_TYPE_P (context))
6341         {
6342           /* Check to see that the declaration is really present, and,
6343              possibly obtain an improved declaration.  */
6344           tree fn = check_classfn (context,
6345                                    new_friend, NULL_TREE);
6346
6347           if (fn)
6348             new_friend = fn;
6349         }
6350     }
6351
6352   return new_friend;
6353 }
6354
6355 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6356    template arguments, as for tsubst.
6357
6358    Returns an appropriate tsubst'd friend type or error_mark_node on
6359    failure.  */
6360
6361 static tree
6362 tsubst_friend_class (tree friend_tmpl, tree args)
6363 {
6364   tree friend_type;
6365   tree tmpl;
6366   tree context;
6367
6368   context = DECL_CONTEXT (friend_tmpl);
6369
6370   if (context)
6371     {
6372       if (TREE_CODE (context) == NAMESPACE_DECL)
6373         push_nested_namespace (context);
6374       else
6375         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6376     }
6377
6378   /* Look for a class template declaration.  We look for hidden names
6379      because two friend declarations of the same template are the
6380      same.  For example, in:
6381
6382        struct A { 
6383          template <typename> friend class F;
6384        };
6385        template <typename> struct B { 
6386          template <typename> friend class F;
6387        };
6388
6389      both F templates are the same.  */
6390   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6391                            /*block_p=*/true, 0, 
6392                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6393
6394   /* But, if we don't find one, it might be because we're in a
6395      situation like this:
6396
6397        template <class T>
6398        struct S {
6399          template <class U>
6400          friend struct S;
6401        };
6402
6403      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6404      for `S<int>', not the TEMPLATE_DECL.  */
6405   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6406     {
6407       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6408       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6409     }
6410
6411   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6412     {
6413       /* The friend template has already been declared.  Just
6414          check to see that the declarations match, and install any new
6415          default parameters.  We must tsubst the default parameters,
6416          of course.  We only need the innermost template parameters
6417          because that is all that redeclare_class_template will look
6418          at.  */
6419       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6420           > TMPL_ARGS_DEPTH (args))
6421         {
6422           tree parms;
6423           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6424                                          args, tf_warning_or_error);
6425           redeclare_class_template (TREE_TYPE (tmpl), parms);
6426         }
6427
6428       friend_type = TREE_TYPE (tmpl);
6429     }
6430   else
6431     {
6432       /* The friend template has not already been declared.  In this
6433          case, the instantiation of the template class will cause the
6434          injection of this template into the global scope.  */
6435       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6436       if (tmpl == error_mark_node)
6437         return error_mark_node;
6438
6439       /* The new TMPL is not an instantiation of anything, so we
6440          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6441          the new type because that is supposed to be the corresponding
6442          template decl, i.e., TMPL.  */
6443       DECL_USE_TEMPLATE (tmpl) = 0;
6444       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6445       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6446       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6447         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6448
6449       /* Inject this template into the global scope.  */
6450       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6451     }
6452
6453   if (context)
6454     {
6455       if (TREE_CODE (context) == NAMESPACE_DECL)
6456         pop_nested_namespace (context);
6457       else
6458         pop_nested_class ();
6459     }
6460
6461   return friend_type;
6462 }
6463
6464 /* Returns zero if TYPE cannot be completed later due to circularity.
6465    Otherwise returns one.  */
6466
6467 static int
6468 can_complete_type_without_circularity (tree type)
6469 {
6470   if (type == NULL_TREE || type == error_mark_node)
6471     return 0;
6472   else if (COMPLETE_TYPE_P (type))
6473     return 1;
6474   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6475     return can_complete_type_without_circularity (TREE_TYPE (type));
6476   else if (CLASS_TYPE_P (type)
6477            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6478     return 0;
6479   else
6480     return 1;
6481 }
6482
6483 /* Apply any attributes which had to be deferred until instantiation
6484    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6485    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6486
6487 static void
6488 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6489                                 tree args, tsubst_flags_t complain, tree in_decl)
6490 {
6491   tree late_attrs = NULL_TREE;
6492   tree t;
6493
6494   if (DECL_P (*decl_p))
6495     DECL_ATTRIBUTES (*decl_p) = attributes;
6496   else
6497     TYPE_ATTRIBUTES (*decl_p) = attributes;
6498
6499   for (t = attributes; t; t = TREE_CHAIN (t))
6500     if (ATTR_IS_DEPENDENT (t))
6501       late_attrs = tree_cons
6502         (TREE_PURPOSE (t),
6503          tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6504                       /*integral_constant_expression_p=*/false),
6505          late_attrs);
6506
6507   cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6508 }
6509
6510 tree
6511 instantiate_class_template (tree type)
6512 {
6513   tree template, args, pattern, t, member;
6514   tree typedecl;
6515   tree pbinfo;
6516   tree base_list;
6517
6518   if (type == error_mark_node)
6519     return error_mark_node;
6520
6521   if (TYPE_BEING_DEFINED (type)
6522       || COMPLETE_TYPE_P (type)
6523       || dependent_type_p (type))
6524     return type;
6525
6526   /* Figure out which template is being instantiated.  */
6527   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6528   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6529
6530   /* Determine what specialization of the original template to
6531      instantiate.  */
6532   t = most_specialized_class (type, template);
6533   if (t == error_mark_node)
6534     {
6535       TYPE_BEING_DEFINED (type) = 1;
6536       return error_mark_node;
6537     }
6538   else if (t)
6539     {
6540       /* This TYPE is actually an instantiation of a partial
6541          specialization.  We replace the innermost set of ARGS with
6542          the arguments appropriate for substitution.  For example,
6543          given:
6544
6545            template <class T> struct S {};
6546            template <class T> struct S<T*> {};
6547
6548          and supposing that we are instantiating S<int*>, ARGS will
6549          presently be {int*} -- but we need {int}.  */
6550       pattern = TREE_TYPE (t);
6551       args = TREE_PURPOSE (t);
6552     }
6553   else
6554     {
6555       pattern = TREE_TYPE (template);
6556       args = CLASSTYPE_TI_ARGS (type);
6557     }
6558
6559   /* If the template we're instantiating is incomplete, then clearly
6560      there's nothing we can do.  */
6561   if (!COMPLETE_TYPE_P (pattern))
6562     return type;
6563
6564   /* If we've recursively instantiated too many templates, stop.  */
6565   if (! push_tinst_level (type))
6566     return type;
6567
6568   /* Now we're really doing the instantiation.  Mark the type as in
6569      the process of being defined.  */
6570   TYPE_BEING_DEFINED (type) = 1;
6571
6572   /* We may be in the middle of deferred access check.  Disable
6573      it now.  */
6574   push_deferring_access_checks (dk_no_deferred);
6575
6576   push_to_top_level ();
6577
6578   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6579
6580   /* Set the input location to the template definition. This is needed
6581      if tsubsting causes an error.  */
6582   typedecl = TYPE_MAIN_DECL (type);
6583   input_location = DECL_SOURCE_LOCATION (typedecl);
6584   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6585
6586   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6587   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6588   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6589   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6590   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6591   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6592   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6593   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6594   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6595   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6596   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6597   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6598   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6599   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6600   if (ANON_AGGR_TYPE_P (pattern))
6601     SET_ANON_AGGR_TYPE_P (type);
6602   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6603     {
6604       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6605       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6606     }
6607
6608   pbinfo = TYPE_BINFO (pattern);
6609
6610   /* We should never instantiate a nested class before its enclosing
6611      class; we need to look up the nested class by name before we can
6612      instantiate it, and that lookup should instantiate the enclosing
6613      class.  */
6614   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6615               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6616               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6617
6618   base_list = NULL_TREE;
6619   if (BINFO_N_BASE_BINFOS (pbinfo))
6620     {
6621       tree pbase_binfo;
6622       tree context = TYPE_CONTEXT (type);
6623       tree pushed_scope;
6624       int i;
6625
6626       /* We must enter the scope containing the type, as that is where
6627          the accessibility of types named in dependent bases are
6628          looked up from.  */
6629       pushed_scope = push_scope (context ? context : global_namespace);
6630
6631       /* Substitute into each of the bases to determine the actual
6632          basetypes.  */
6633       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6634         {
6635           tree base;
6636           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6637           tree expanded_bases = NULL_TREE;
6638           int idx, len = 1;
6639
6640           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6641             {
6642               expanded_bases = 
6643                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6644                                        args, tf_error, NULL_TREE);
6645               if (expanded_bases == error_mark_node)
6646                 continue;
6647
6648               len = TREE_VEC_LENGTH (expanded_bases);
6649             }
6650
6651           for (idx = 0; idx < len; idx++)
6652             {
6653               if (expanded_bases)
6654                 /* Extract the already-expanded base class.  */
6655                 base = TREE_VEC_ELT (expanded_bases, idx);
6656               else
6657                 /* Substitute to figure out the base class.  */
6658                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6659                                NULL_TREE);
6660
6661               if (base == error_mark_node)
6662                 continue;
6663
6664               base_list = tree_cons (access, base, base_list);
6665               if (BINFO_VIRTUAL_P (pbase_binfo))
6666                 TREE_TYPE (base_list) = integer_type_node;
6667             }
6668         }
6669
6670       /* The list is now in reverse order; correct that.  */
6671       base_list = nreverse (base_list);
6672
6673       if (pushed_scope)
6674         pop_scope (pushed_scope);
6675     }
6676   /* Now call xref_basetypes to set up all the base-class
6677      information.  */
6678   xref_basetypes (type, base_list);
6679
6680   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
6681                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
6682                                   args, tf_error, NULL_TREE);
6683
6684   /* Now that our base classes are set up, enter the scope of the
6685      class, so that name lookups into base classes, etc. will work
6686      correctly.  This is precisely analogous to what we do in
6687      begin_class_definition when defining an ordinary non-template
6688      class, except we also need to push the enclosing classes.  */
6689   push_nested_class (type);
6690
6691   /* Now members are processed in the order of declaration.  */
6692   for (member = CLASSTYPE_DECL_LIST (pattern);
6693        member; member = TREE_CHAIN (member))
6694     {
6695       tree t = TREE_VALUE (member);
6696
6697       if (TREE_PURPOSE (member))
6698         {
6699           if (TYPE_P (t))
6700             {
6701               /* Build new CLASSTYPE_NESTED_UTDS.  */
6702
6703               tree newtag;
6704               bool class_template_p;
6705
6706               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6707                                   && TYPE_LANG_SPECIFIC (t)
6708                                   && CLASSTYPE_IS_TEMPLATE (t));
6709               /* If the member is a class template, then -- even after
6710                  substitution -- there may be dependent types in the
6711                  template argument list for the class.  We increment
6712                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6713                  that function will assume that no types are dependent
6714                  when outside of a template.  */
6715               if (class_template_p)
6716                 ++processing_template_decl;
6717               newtag = tsubst (t, args, tf_error, NULL_TREE);
6718               if (class_template_p)
6719                 --processing_template_decl;
6720               if (newtag == error_mark_node)
6721                 continue;
6722
6723               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6724                 {
6725                   tree name = TYPE_IDENTIFIER (t);
6726
6727                   if (class_template_p)
6728                     /* Unfortunately, lookup_template_class sets
6729                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6730                        instantiation (i.e., for the type of a member
6731                        template class nested within a template class.)
6732                        This behavior is required for
6733                        maybe_process_partial_specialization to work
6734                        correctly, but is not accurate in this case;
6735                        the TAG is not an instantiation of anything.
6736                        (The corresponding TEMPLATE_DECL is an
6737                        instantiation, but the TYPE is not.) */
6738                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6739
6740                   /* Now, we call pushtag to put this NEWTAG into the scope of
6741                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
6742                      pushtag calling push_template_decl.  We don't have to do
6743                      this for enums because it will already have been done in
6744                      tsubst_enum.  */
6745                   if (name)
6746                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6747                   pushtag (name, newtag, /*tag_scope=*/ts_current);
6748                 }
6749             }
6750           else if (TREE_CODE (t) == FUNCTION_DECL
6751                    || DECL_FUNCTION_TEMPLATE_P (t))
6752             {
6753               /* Build new TYPE_METHODS.  */
6754               tree r;
6755
6756               if (TREE_CODE (t) == TEMPLATE_DECL)
6757                 ++processing_template_decl;
6758               r = tsubst (t, args, tf_error, NULL_TREE);
6759               if (TREE_CODE (t) == TEMPLATE_DECL)
6760                 --processing_template_decl;
6761               set_current_access_from_decl (r);
6762               finish_member_declaration (r);
6763             }
6764           else
6765             {
6766               /* Build new TYPE_FIELDS.  */
6767               if (TREE_CODE (t) == STATIC_ASSERT)
6768                 {
6769                   tree condition = 
6770                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
6771                                  tf_warning_or_error, NULL_TREE,
6772                                  /*integral_constant_expression_p=*/true);
6773                   finish_static_assert (condition,
6774                                         STATIC_ASSERT_MESSAGE (t), 
6775                                         STATIC_ASSERT_SOURCE_LOCATION (t),
6776                                         /*member_p=*/true);
6777                 }
6778               else if (TREE_CODE (t) != CONST_DECL)
6779                 {
6780                   tree r;
6781
6782                   /* The the file and line for this declaration, to
6783                      assist in error message reporting.  Since we
6784                      called push_tinst_level above, we don't need to
6785                      restore these.  */
6786                   input_location = DECL_SOURCE_LOCATION (t);
6787
6788                   if (TREE_CODE (t) == TEMPLATE_DECL)
6789                     ++processing_template_decl;
6790                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6791                   if (TREE_CODE (t) == TEMPLATE_DECL)
6792                     --processing_template_decl;
6793                   if (TREE_CODE (r) == VAR_DECL)
6794                     {
6795                       /* In [temp.inst]:
6796
6797                            [t]he initialization (and any associated
6798                            side-effects) of a static data member does
6799                            not occur unless the static data member is
6800                            itself used in a way that requires the
6801                            definition of the static data member to
6802                            exist.
6803
6804                          Therefore, we do not substitute into the
6805                          initialized for the static data member here.  */
6806                       finish_static_data_member_decl
6807                         (r,
6808                          /*init=*/NULL_TREE,
6809                          /*init_const_expr_p=*/false,
6810                          /*asmspec_tree=*/NULL_TREE,
6811                          /*flags=*/0);
6812                       if (DECL_INITIALIZED_IN_CLASS_P (r))
6813                         check_static_variable_definition (r, TREE_TYPE (r));
6814                     }
6815                   else if (TREE_CODE (r) == FIELD_DECL)
6816                     {
6817                       /* Determine whether R has a valid type and can be
6818                          completed later.  If R is invalid, then it is
6819                          replaced by error_mark_node so that it will not be
6820                          added to TYPE_FIELDS.  */
6821                       tree rtype = TREE_TYPE (r);
6822                       if (can_complete_type_without_circularity (rtype))
6823                         complete_type (rtype);
6824
6825                       if (!COMPLETE_TYPE_P (rtype))
6826                         {
6827                           cxx_incomplete_type_error (r, rtype);
6828                           r = error_mark_node;
6829                         }
6830                     }
6831
6832                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6833                      such a thing will already have been added to the field
6834                      list by tsubst_enum in finish_member_declaration in the
6835                      CLASSTYPE_NESTED_UTDS case above.  */
6836                   if (!(TREE_CODE (r) == TYPE_DECL
6837                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6838                         && DECL_ARTIFICIAL (r)))
6839                     {
6840                       set_current_access_from_decl (r);
6841                       finish_member_declaration (r);
6842                     }
6843                 }
6844             }
6845         }
6846       else
6847         {
6848           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6849             {
6850               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
6851
6852               tree friend_type = t;
6853               bool adjust_processing_template_decl = false;
6854
6855               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6856                 {
6857                   /* template <class T> friend class C;  */
6858                   friend_type = tsubst_friend_class (friend_type, args);
6859                   adjust_processing_template_decl = true;
6860                 }
6861               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6862                 {
6863                   /* template <class T> friend class C::D;  */
6864                   friend_type = tsubst (friend_type, args,
6865                                         tf_warning_or_error, NULL_TREE);
6866                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6867                     friend_type = TREE_TYPE (friend_type);
6868                   adjust_processing_template_decl = true;
6869                 }
6870               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6871                 {
6872                   /* This could be either
6873
6874                        friend class T::C;
6875
6876                      when dependent_type_p is false or
6877
6878                        template <class U> friend class T::C;
6879
6880                      otherwise.  */
6881                   friend_type = tsubst (friend_type, args,
6882                                         tf_warning_or_error, NULL_TREE);
6883                   /* Bump processing_template_decl for correct
6884                      dependent_type_p calculation.  */
6885                   ++processing_template_decl;
6886                   if (dependent_type_p (friend_type))
6887                     adjust_processing_template_decl = true;
6888                   --processing_template_decl;
6889                 }
6890               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6891                        && hidden_name_p (TYPE_NAME (friend_type)))
6892                 {
6893                   /* friend class C;
6894
6895                      where C hasn't been declared yet.  Let's lookup name
6896                      from namespace scope directly, bypassing any name that
6897                      come from dependent base class.  */
6898                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6899
6900                   /* The call to xref_tag_from_type does injection for friend
6901                      classes.  */
6902                   push_nested_namespace (ns);
6903                   friend_type =
6904                     xref_tag_from_type (friend_type, NULL_TREE,
6905                                         /*tag_scope=*/ts_current);
6906                   pop_nested_namespace (ns);
6907                 }
6908               else if (uses_template_parms (friend_type))
6909                 /* friend class C<T>;  */
6910                 friend_type = tsubst (friend_type, args,
6911                                       tf_warning_or_error, NULL_TREE);
6912               /* Otherwise it's
6913
6914                    friend class C;
6915
6916                  where C is already declared or
6917
6918                    friend class C<int>;
6919
6920                  We don't have to do anything in these cases.  */
6921
6922               if (adjust_processing_template_decl)
6923                 /* Trick make_friend_class into realizing that the friend
6924                    we're adding is a template, not an ordinary class.  It's
6925                    important that we use make_friend_class since it will
6926                    perform some error-checking and output cross-reference
6927                    information.  */
6928                 ++processing_template_decl;
6929
6930               if (friend_type != error_mark_node)
6931                 make_friend_class (type, friend_type, /*complain=*/false);
6932
6933               if (adjust_processing_template_decl)
6934                 --processing_template_decl;
6935             }
6936           else
6937             {
6938               /* Build new DECL_FRIENDLIST.  */
6939               tree r;
6940
6941               /* The the file and line for this declaration, to
6942                  assist in error message reporting.  Since we
6943                  called push_tinst_level above, we don't need to
6944                  restore these.  */
6945               input_location = DECL_SOURCE_LOCATION (t);
6946
6947               if (TREE_CODE (t) == TEMPLATE_DECL)
6948                 {
6949                   ++processing_template_decl;
6950                   push_deferring_access_checks (dk_no_check);
6951                 }
6952
6953               r = tsubst_friend_function (t, args);
6954               add_friend (type, r, /*complain=*/false);
6955               if (TREE_CODE (t) == TEMPLATE_DECL)
6956                 {
6957                   pop_deferring_access_checks ();
6958                   --processing_template_decl;
6959                 }
6960             }
6961         }
6962     }
6963
6964   /* Set the file and line number information to whatever is given for
6965      the class itself.  This puts error messages involving generated
6966      implicit functions at a predictable point, and the same point
6967      that would be used for non-template classes.  */
6968   input_location = DECL_SOURCE_LOCATION (typedecl);
6969
6970   unreverse_member_declarations (type);
6971   finish_struct_1 (type);
6972   TYPE_BEING_DEFINED (type) = 0;
6973
6974   /* Now that the class is complete, instantiate default arguments for
6975      any member functions.  We don't do this earlier because the
6976      default arguments may reference members of the class.  */
6977   if (!PRIMARY_TEMPLATE_P (template))
6978     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
6979       if (TREE_CODE (t) == FUNCTION_DECL
6980           /* Implicitly generated member functions will not have template
6981              information; they are not instantiations, but instead are
6982              created "fresh" for each instantiation.  */
6983           && DECL_TEMPLATE_INFO (t))
6984         tsubst_default_arguments (t);
6985
6986   pop_nested_class ();
6987   pop_from_top_level ();
6988   pop_deferring_access_checks ();
6989   pop_tinst_level ();
6990
6991   /* The vtable for a template class can be emitted in any translation
6992      unit in which the class is instantiated.  When there is no key
6993      method, however, finish_struct_1 will already have added TYPE to
6994      the keyed_classes list.  */
6995   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
6996     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6997
6998   return type;
6999 }
7000
7001 static tree
7002 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7003 {
7004   tree r;
7005
7006   if (!t)
7007     r = t;
7008   else if (TYPE_P (t))
7009     r = tsubst (t, args, complain, in_decl);
7010   else
7011     {
7012       r = tsubst_expr (t, args, complain, in_decl,
7013                        /*integral_constant_expression_p=*/true);
7014       r = fold_non_dependent_expr (r);
7015     }
7016   return r;
7017 }
7018
7019 /* Substitute ARGS into T, which is an pack expansion
7020    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7021    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7022    (if only a partial substitution could be performed) or
7023    ERROR_MARK_NODE if there was an error.  */
7024 tree
7025 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7026                        tree in_decl)
7027 {
7028   tree pattern;
7029   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7030   tree first_arg_pack; int i, len = -1;
7031   tree result;
7032   int incomplete = 0;
7033
7034   gcc_assert (PACK_EXPANSION_P (t));
7035   pattern = PACK_EXPANSION_PATTERN (t);
7036
7037   /* Determine the argument packs that will instantiate the parameter
7038      packs used in the expansion expression. While we're at it,
7039      compute the number of arguments to be expanded and make sure it
7040      is consistent.  */
7041   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7042        pack = TREE_CHAIN (pack))
7043     {
7044       tree parm_pack = TREE_VALUE (pack);
7045       tree arg_pack = NULL_TREE;
7046       tree orig_arg = NULL_TREE;
7047
7048       if (TREE_CODE (parm_pack) == PARM_DECL)
7049         {
7050           if (local_specializations)
7051             arg_pack = retrieve_local_specialization (parm_pack);
7052         }
7053       else
7054         {
7055           int level, idx, levels;
7056           template_parm_level_and_index (parm_pack, &level, &idx);
7057
7058           levels = TMPL_ARGS_DEPTH (args);
7059           if (level <= levels)
7060             arg_pack = TMPL_ARG (args, level, idx);
7061         }
7062
7063       orig_arg = arg_pack;
7064       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7065         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7066       
7067       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7068         /* This can only happen if we forget to expand an argument
7069            pack somewhere else. Just return an error, silently.  */
7070         {
7071           result = make_tree_vec (1);
7072           TREE_VEC_ELT (result, 0) = error_mark_node;
7073           return result;
7074         }
7075
7076       if (arg_pack)
7077         {
7078           int my_len = 
7079             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7080
7081           /* It's all-or-nothing with incomplete argument packs.  */
7082           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7083             return error_mark_node;
7084           
7085           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7086             incomplete = 1;
7087
7088           if (len < 0)
7089             {
7090               len = my_len;
7091               first_arg_pack = arg_pack;
7092             }
7093           else if (len != my_len)
7094             {
7095               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7096                 error ("mismatched argument pack lengths while expanding "
7097                        "%<%T%>",
7098                        pattern);
7099               else
7100                 error ("mismatched argument pack lengths while expanding "
7101                        "%<%E%>",
7102                        pattern);
7103               return error_mark_node;
7104             }
7105
7106           /* Keep track of the parameter packs and their corresponding
7107              argument packs.  */
7108           packs = tree_cons (parm_pack, arg_pack, packs);
7109           TREE_TYPE (packs) = orig_arg;
7110         }
7111       else
7112         /* We can't substitute for this parameter pack.  */
7113         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7114                                          TREE_VALUE (pack),
7115                                          unsubstituted_packs);
7116     }
7117
7118   /* We cannot expand this expansion expression, because we don't have
7119      all of the argument packs we need. Substitute into the pattern
7120      and return a PACK_EXPANSION_*. The caller will need to deal with
7121      that.  */
7122   if (unsubstituted_packs)
7123     return make_pack_expansion (tsubst (pattern, args, complain, 
7124                                         in_decl));
7125
7126   /* We could not find any argument packs that work.  */
7127   if (len < 0)
7128     return error_mark_node;
7129
7130   /* For each argument in each argument pack, substitute into the
7131      pattern.  */
7132   result = make_tree_vec (len + incomplete);
7133   for (i = 0; i < len + incomplete; ++i)
7134     {
7135       /* For parameter pack, change the substitution of the parameter
7136          pack to the ith argument in its argument pack, then expand
7137          the pattern.  */
7138       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7139         {
7140           tree parm = TREE_PURPOSE (pack);
7141
7142           if (TREE_CODE (parm) == PARM_DECL)
7143             {
7144               /* Select the Ith argument from the pack.  */
7145               tree arg = make_node (ARGUMENT_PACK_SELECT);
7146               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7147               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7148               mark_used (parm);
7149               register_local_specialization (arg, parm);
7150             }
7151           else
7152             {
7153               tree value = parm;
7154               int idx, level;
7155               template_parm_level_and_index (parm, &level, &idx);
7156               
7157               if (i < len) 
7158                 {
7159                   /* Select the Ith argument from the pack. */
7160                   value = make_node (ARGUMENT_PACK_SELECT);
7161                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7162                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7163                 }
7164
7165               /* Update the corresponding argument.  */
7166               TMPL_ARG (args, level, idx) = value;
7167             }
7168         }
7169
7170       /* Substitute into the PATTERN with the altered arguments.  */
7171       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7172         TREE_VEC_ELT (result, i) = 
7173           tsubst_expr (pattern, args, complain, in_decl,
7174                        /*integral_constant_expression_p=*/false);
7175       else
7176         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7177
7178       if (i == len)
7179         /* When we have incomplete argument packs, the last "expanded"
7180            result is itself a pack expansion, which allows us
7181            to deduce more arguments.  */
7182         TREE_VEC_ELT (result, i) = 
7183           make_pack_expansion (TREE_VEC_ELT (result, i));
7184
7185       if (TREE_VEC_ELT (result, i) == error_mark_node)
7186         {
7187           result = error_mark_node;
7188           break;
7189         }
7190     }
7191   
7192   /* Update ARGS to restore the substitution from parameter packs to
7193      their argument packs.  */
7194   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7195     {
7196       tree parm = TREE_PURPOSE (pack);
7197
7198       if (TREE_CODE (parm) == PARM_DECL)
7199         register_local_specialization (TREE_TYPE (pack), parm);
7200       else
7201         {
7202           int idx, level;
7203           template_parm_level_and_index (parm, &level, &idx);
7204           
7205           /* Update the corresponding argument.  */
7206           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7207             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7208               TREE_TYPE (pack);
7209           else
7210             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7211         }
7212     }
7213
7214   return result;
7215 }
7216
7217 /* Substitute ARGS into the vector or list of template arguments T.  */
7218
7219 static tree
7220 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7221 {
7222   tree orig_t = t;
7223   int len = TREE_VEC_LENGTH (t);
7224   int need_new = 0, i, expanded_len_adjust = 0, out;
7225   tree *elts = (tree *) alloca (len * sizeof (tree));
7226
7227   for (i = 0; i < len; i++)
7228     {
7229       tree orig_arg = TREE_VEC_ELT (t, i);
7230       tree new_arg;
7231
7232       if (TREE_CODE (orig_arg) == TREE_VEC)
7233         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7234       else if (PACK_EXPANSION_P (orig_arg))
7235         {
7236           /* Substitute into an expansion expression.  */
7237           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7238
7239           if (TREE_CODE (new_arg) == TREE_VEC)
7240             /* Add to the expanded length adjustment the number of
7241                expanded arguments. We subtract one from this
7242                measurement, because the argument pack expression
7243                itself is already counted as 1 in
7244                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7245                the argument pack is empty.  */
7246             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7247         }
7248       else if (ARGUMENT_PACK_P (orig_arg))
7249         {
7250           /* Substitute into each of the arguments.  */
7251           new_arg = make_node (TREE_CODE (orig_arg));
7252           
7253           SET_ARGUMENT_PACK_ARGS (
7254             new_arg,
7255             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7256                                   args, complain, in_decl));
7257
7258           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7259             new_arg = error_mark_node;
7260
7261           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7262             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7263                                           complain, in_decl);
7264             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7265
7266             if (TREE_TYPE (new_arg) == error_mark_node)
7267               new_arg = error_mark_node;
7268           }
7269         }
7270       else
7271         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7272
7273       if (new_arg == error_mark_node)
7274         return error_mark_node;
7275
7276       elts[i] = new_arg;
7277       if (new_arg != orig_arg)
7278         need_new = 1;
7279     }
7280
7281   if (!need_new)
7282     return t;
7283
7284   /* Make space for the expanded arguments coming from template
7285      argument packs.  */
7286   t = make_tree_vec (len + expanded_len_adjust);
7287   for (i = 0, out = 0; i < len; i++)
7288     {
7289       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7290            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7291           && TREE_CODE (elts[i]) == TREE_VEC)
7292         {
7293           int idx;
7294
7295           /* Now expand the template argument pack "in place".  */
7296           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7297             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7298         }
7299       else
7300         {
7301           TREE_VEC_ELT (t, out) = elts[i];
7302           out++;
7303         }
7304     }
7305
7306   return t;
7307 }
7308
7309 /* Return the result of substituting ARGS into the template parameters
7310    given by PARMS.  If there are m levels of ARGS and m + n levels of
7311    PARMS, then the result will contain n levels of PARMS.  For
7312    example, if PARMS is `template <class T> template <class U>
7313    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7314    result will be `template <int*, double, class V>'.  */
7315
7316 static tree
7317 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7318 {
7319   tree r = NULL_TREE;
7320   tree* new_parms;
7321
7322   /* When substituting into a template, we must set
7323      PROCESSING_TEMPLATE_DECL as the template parameters may be
7324      dependent if they are based on one-another, and the dependency
7325      predicates are short-circuit outside of templates.  */
7326   ++processing_template_decl;
7327
7328   for (new_parms = &r;
7329        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7330        new_parms = &(TREE_CHAIN (*new_parms)),
7331          parms = TREE_CHAIN (parms))
7332     {
7333       tree new_vec =
7334         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7335       int i;
7336
7337       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7338         {
7339           tree tuple;
7340           tree default_value;
7341           tree parm_decl;
7342
7343           if (parms == error_mark_node)
7344             continue;
7345
7346           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7347
7348           if (tuple == error_mark_node)
7349             continue;
7350
7351           default_value = TREE_PURPOSE (tuple);
7352           parm_decl = TREE_VALUE (tuple);
7353
7354           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7355           if (TREE_CODE (parm_decl) == PARM_DECL
7356               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7357             parm_decl = error_mark_node;
7358           default_value = tsubst_template_arg (default_value, args,
7359                                                complain, NULL_TREE);
7360
7361           tuple = build_tree_list (default_value, parm_decl);
7362           TREE_VEC_ELT (new_vec, i) = tuple;
7363         }
7364
7365       *new_parms =
7366         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7367                              - TMPL_ARGS_DEPTH (args)),
7368                    new_vec, NULL_TREE);
7369     }
7370
7371   --processing_template_decl;
7372
7373   return r;
7374 }
7375
7376 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7377    type T.  If T is not an aggregate or enumeration type, it is
7378    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7379    ENTERING_SCOPE is nonzero, T is the context for a template which
7380    we are presently tsubst'ing.  Return the substituted value.  */
7381
7382 static tree
7383 tsubst_aggr_type (tree t,
7384                   tree args,
7385                   tsubst_flags_t complain,
7386                   tree in_decl,
7387                   int entering_scope)
7388 {
7389   if (t == NULL_TREE)
7390     return NULL_TREE;
7391
7392   switch (TREE_CODE (t))
7393     {
7394     case RECORD_TYPE:
7395       if (TYPE_PTRMEMFUNC_P (t))
7396         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7397
7398       /* Else fall through.  */
7399     case ENUMERAL_TYPE:
7400     case UNION_TYPE:
7401       if (TYPE_TEMPLATE_INFO (t))
7402         {
7403           tree argvec;
7404           tree context;
7405           tree r;
7406           bool saved_skip_evaluation;
7407
7408           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7409           saved_skip_evaluation = skip_evaluation;
7410           skip_evaluation = false;
7411
7412           /* First, determine the context for the type we are looking
7413              up.  */
7414           context = TYPE_CONTEXT (t);
7415           if (context)
7416             context = tsubst_aggr_type (context, args, complain,
7417                                         in_decl, /*entering_scope=*/1);
7418
7419           /* Then, figure out what arguments are appropriate for the
7420              type we are trying to find.  For example, given:
7421
7422                template <class T> struct S;
7423                template <class T, class U> void f(T, U) { S<U> su; }
7424
7425              and supposing that we are instantiating f<int, double>,
7426              then our ARGS will be {int, double}, but, when looking up
7427              S we only want {double}.  */
7428           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7429                                          complain, in_decl);
7430           if (argvec == error_mark_node)
7431             r = error_mark_node;
7432           else
7433             {
7434               r = lookup_template_class (t, argvec, in_decl, context,
7435                                          entering_scope, complain);
7436               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7437             }
7438
7439           skip_evaluation = saved_skip_evaluation;
7440
7441           return r;
7442         }
7443       else
7444         /* This is not a template type, so there's nothing to do.  */
7445         return t;
7446
7447     default:
7448       return tsubst (t, args, complain, in_decl);
7449     }
7450 }
7451
7452 /* Substitute into the default argument ARG (a default argument for
7453    FN), which has the indicated TYPE.  */
7454
7455 tree
7456 tsubst_default_argument (tree fn, tree type, tree arg)
7457 {
7458   tree saved_class_ptr = NULL_TREE;
7459   tree saved_class_ref = NULL_TREE;
7460
7461   /* This default argument came from a template.  Instantiate the
7462      default argument here, not in tsubst.  In the case of
7463      something like:
7464
7465        template <class T>
7466        struct S {
7467          static T t();
7468          void f(T = t());
7469        };
7470
7471      we must be careful to do name lookup in the scope of S<T>,
7472      rather than in the current class.  */
7473   push_access_scope (fn);
7474   /* The "this" pointer is not valid in a default argument.  */
7475   if (cfun)
7476     {
7477       saved_class_ptr = current_class_ptr;
7478       cp_function_chain->x_current_class_ptr = NULL_TREE;
7479       saved_class_ref = current_class_ref;
7480       cp_function_chain->x_current_class_ref = NULL_TREE;
7481     }
7482
7483   push_deferring_access_checks(dk_no_deferred);
7484   /* The default argument expression may cause implicitly defined
7485      member functions to be synthesized, which will result in garbage
7486      collection.  We must treat this situation as if we were within
7487      the body of function so as to avoid collecting live data on the
7488      stack.  */
7489   ++function_depth;
7490   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7491                      tf_warning_or_error, NULL_TREE,
7492                      /*integral_constant_expression_p=*/false);
7493   --function_depth;
7494   pop_deferring_access_checks();
7495
7496   /* Restore the "this" pointer.  */
7497   if (cfun)
7498     {
7499       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7500       cp_function_chain->x_current_class_ref = saved_class_ref;
7501     }
7502
7503   pop_access_scope (fn);
7504
7505   /* Make sure the default argument is reasonable.  */
7506   arg = check_default_argument (type, arg);
7507
7508   return arg;
7509 }
7510
7511 /* Substitute into all the default arguments for FN.  */
7512
7513 static void
7514 tsubst_default_arguments (tree fn)
7515 {
7516   tree arg;
7517   tree tmpl_args;
7518
7519   tmpl_args = DECL_TI_ARGS (fn);
7520
7521   /* If this function is not yet instantiated, we certainly don't need
7522      its default arguments.  */
7523   if (uses_template_parms (tmpl_args))
7524     return;
7525
7526   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7527        arg;
7528        arg = TREE_CHAIN (arg))
7529     if (TREE_PURPOSE (arg))
7530       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7531                                                     TREE_VALUE (arg),
7532                                                     TREE_PURPOSE (arg));
7533 }
7534
7535 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7536    result of the substitution.  Issue error and warning messages under
7537    control of COMPLAIN.  */
7538
7539 static tree
7540 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7541 {
7542   location_t saved_loc;
7543   tree r = NULL_TREE;
7544   tree in_decl = t;
7545
7546   /* Set the filename and linenumber to improve error-reporting.  */
7547   saved_loc = input_location;
7548   input_location = DECL_SOURCE_LOCATION (t);
7549
7550   switch (TREE_CODE (t))
7551     {
7552     case TEMPLATE_DECL:
7553       {
7554         /* We can get here when processing a member function template,
7555            member class template, and template template parameter of
7556            a template class.  */
7557         tree decl = DECL_TEMPLATE_RESULT (t);
7558         tree spec;
7559         tree tmpl_args;
7560         tree full_args;
7561
7562         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7563           {
7564             /* Template template parameter is treated here.  */
7565             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7566             if (new_type == error_mark_node)
7567               return error_mark_node;
7568
7569             r = copy_decl (t);
7570             TREE_CHAIN (r) = NULL_TREE;
7571             TREE_TYPE (r) = new_type;
7572             DECL_TEMPLATE_RESULT (r)
7573               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7574             DECL_TEMPLATE_PARMS (r)
7575               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7576                                        complain);
7577             TYPE_NAME (new_type) = r;
7578             break;
7579           }
7580
7581         /* We might already have an instance of this template.
7582            The ARGS are for the surrounding class type, so the
7583            full args contain the tsubst'd args for the context,
7584            plus the innermost args from the template decl.  */
7585         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7586           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7587           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7588         /* Because this is a template, the arguments will still be
7589            dependent, even after substitution.  If
7590            PROCESSING_TEMPLATE_DECL is not set, the dependency
7591            predicates will short-circuit.  */
7592         ++processing_template_decl;
7593         full_args = tsubst_template_args (tmpl_args, args,
7594                                           complain, in_decl);
7595         --processing_template_decl;
7596         if (full_args == error_mark_node)
7597           return error_mark_node;
7598
7599         /* tsubst_template_args doesn't copy the vector if
7600            nothing changed.  But, *something* should have
7601            changed.  */
7602         gcc_assert (full_args != tmpl_args);
7603
7604         spec = retrieve_specialization (t, full_args,
7605                                         /*class_specializations_p=*/true);
7606         if (spec != NULL_TREE)
7607           {
7608             r = spec;
7609             break;
7610           }
7611
7612         /* Make a new template decl.  It will be similar to the
7613            original, but will record the current template arguments.
7614            We also create a new function declaration, which is just
7615            like the old one, but points to this new template, rather
7616            than the old one.  */
7617         r = copy_decl (t);
7618         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7619         TREE_CHAIN (r) = NULL_TREE;
7620
7621         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7622
7623         if (TREE_CODE (decl) == TYPE_DECL)
7624           {
7625             tree new_type;
7626             ++processing_template_decl;
7627             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7628             --processing_template_decl;
7629             if (new_type == error_mark_node)
7630               return error_mark_node;
7631
7632             TREE_TYPE (r) = new_type;
7633             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7634             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7635             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7636             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7637           }
7638         else
7639           {
7640             tree new_decl;
7641             ++processing_template_decl;
7642             new_decl = tsubst (decl, args, complain, in_decl);
7643             --processing_template_decl;
7644             if (new_decl == error_mark_node)
7645               return error_mark_node;
7646
7647             DECL_TEMPLATE_RESULT (r) = new_decl;
7648             DECL_TI_TEMPLATE (new_decl) = r;
7649             TREE_TYPE (r) = TREE_TYPE (new_decl);
7650             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7651             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7652           }
7653
7654         SET_DECL_IMPLICIT_INSTANTIATION (r);
7655         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7656         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7657
7658         /* The template parameters for this new template are all the
7659            template parameters for the old template, except the
7660            outermost level of parameters.  */
7661         DECL_TEMPLATE_PARMS (r)
7662           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7663                                    complain);
7664
7665         if (PRIMARY_TEMPLATE_P (t))
7666           DECL_PRIMARY_TEMPLATE (r) = r;
7667
7668         if (TREE_CODE (decl) != TYPE_DECL)
7669           /* Record this non-type partial instantiation.  */
7670           register_specialization (r, t,
7671                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7672                                    false);
7673       }
7674       break;
7675
7676     case FUNCTION_DECL:
7677       {
7678         tree ctx;
7679         tree argvec = NULL_TREE;
7680         tree *friends;
7681         tree gen_tmpl;
7682         tree type;
7683         int member;
7684         int args_depth;
7685         int parms_depth;
7686
7687         /* Nobody should be tsubst'ing into non-template functions.  */
7688         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7689
7690         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7691           {
7692             tree spec;
7693             bool dependent_p;
7694
7695             /* If T is not dependent, just return it.  We have to
7696                increment PROCESSING_TEMPLATE_DECL because
7697                value_dependent_expression_p assumes that nothing is
7698                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
7699             ++processing_template_decl;
7700             dependent_p = value_dependent_expression_p (t);
7701             --processing_template_decl;
7702             if (!dependent_p)
7703               return t;
7704
7705             /* Calculate the most general template of which R is a
7706                specialization, and the complete set of arguments used to
7707                specialize R.  */
7708             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7709             argvec = tsubst_template_args (DECL_TI_ARGS
7710                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
7711                                            args, complain, in_decl);
7712
7713             /* Check to see if we already have this specialization.  */
7714             spec = retrieve_specialization (gen_tmpl, argvec,
7715                                             /*class_specializations_p=*/false);
7716
7717             if (spec)
7718               {
7719                 r = spec;
7720                 break;
7721               }
7722
7723             /* We can see more levels of arguments than parameters if
7724                there was a specialization of a member template, like
7725                this:
7726
7727                  template <class T> struct S { template <class U> void f(); }
7728                  template <> template <class U> void S<int>::f(U);
7729
7730                Here, we'll be substituting into the specialization,
7731                because that's where we can find the code we actually
7732                want to generate, but we'll have enough arguments for
7733                the most general template.
7734
7735                We also deal with the peculiar case:
7736
7737                  template <class T> struct S {
7738                    template <class U> friend void f();
7739                  };
7740                  template <class U> void f() {}
7741                  template S<int>;
7742                  template void f<double>();
7743
7744                Here, the ARGS for the instantiation of will be {int,
7745                double}.  But, we only need as many ARGS as there are
7746                levels of template parameters in CODE_PATTERN.  We are
7747                careful not to get fooled into reducing the ARGS in
7748                situations like:
7749
7750                  template <class T> struct S { template <class U> void f(U); }
7751                  template <class T> template <> void S<T>::f(int) {}
7752
7753                which we can spot because the pattern will be a
7754                specialization in this case.  */
7755             args_depth = TMPL_ARGS_DEPTH (args);
7756             parms_depth =
7757               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7758             if (args_depth > parms_depth
7759                 && !DECL_TEMPLATE_SPECIALIZATION (t))
7760               args = get_innermost_template_args (args, parms_depth);
7761           }
7762         else
7763           {
7764             /* This special case arises when we have something like this:
7765
7766                  template <class T> struct S {
7767                    friend void f<int>(int, double);
7768                  };
7769
7770                Here, the DECL_TI_TEMPLATE for the friend declaration
7771                will be an IDENTIFIER_NODE.  We are being called from
7772                tsubst_friend_function, and we want only to create a
7773                new decl (R) with appropriate types so that we can call
7774                determine_specialization.  */
7775             gen_tmpl = NULL_TREE;
7776           }
7777
7778         if (DECL_CLASS_SCOPE_P (t))
7779           {
7780             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7781               member = 2;
7782             else
7783               member = 1;
7784             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7785                                     complain, t, /*entering_scope=*/1);
7786           }
7787         else
7788           {
7789             member = 0;
7790             ctx = DECL_CONTEXT (t);
7791           }
7792         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7793         if (type == error_mark_node)
7794           return error_mark_node;
7795
7796         /* We do NOT check for matching decls pushed separately at this
7797            point, as they may not represent instantiations of this
7798            template, and in any case are considered separate under the
7799            discrete model.  */
7800         r = copy_decl (t);
7801         DECL_USE_TEMPLATE (r) = 0;
7802         TREE_TYPE (r) = type;
7803         /* Clear out the mangled name and RTL for the instantiation.  */
7804         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7805         SET_DECL_RTL (r, NULL_RTX);
7806         DECL_INITIAL (r) = NULL_TREE;
7807         DECL_CONTEXT (r) = ctx;
7808
7809         if (member && DECL_CONV_FN_P (r))
7810           /* Type-conversion operator.  Reconstruct the name, in
7811              case it's the name of one of the template's parameters.  */
7812           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7813
7814         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7815                                      complain, t);
7816         DECL_RESULT (r) = NULL_TREE;
7817
7818         TREE_STATIC (r) = 0;
7819         TREE_PUBLIC (r) = TREE_PUBLIC (t);
7820         DECL_EXTERNAL (r) = 1;
7821         /* If this is an instantiation of a function with internal
7822            linkage, we already know what object file linkage will be
7823            assigned to the instantiation.  */
7824         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7825         DECL_DEFER_OUTPUT (r) = 0;
7826         TREE_CHAIN (r) = NULL_TREE;
7827         DECL_PENDING_INLINE_INFO (r) = 0;
7828         DECL_PENDING_INLINE_P (r) = 0;
7829         DECL_SAVED_TREE (r) = NULL_TREE;
7830         TREE_USED (r) = 0;
7831         if (DECL_CLONED_FUNCTION (r))
7832           {
7833             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7834                                                args, complain, t);
7835             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7836             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7837           }
7838
7839         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
7840            this in the special friend case mentioned above where
7841            GEN_TMPL is NULL.  */
7842         if (gen_tmpl)
7843           {
7844             DECL_TEMPLATE_INFO (r)
7845               = tree_cons (gen_tmpl, argvec, NULL_TREE);
7846             SET_DECL_IMPLICIT_INSTANTIATION (r);
7847             register_specialization (r, gen_tmpl, argvec, false);
7848
7849             /* We're not supposed to instantiate default arguments
7850                until they are called, for a template.  But, for a
7851                declaration like:
7852
7853                  template <class T> void f ()
7854                  { extern void g(int i = T()); }
7855
7856                we should do the substitution when the template is
7857                instantiated.  We handle the member function case in
7858                instantiate_class_template since the default arguments
7859                might refer to other members of the class.  */
7860             if (!member
7861                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7862                 && !uses_template_parms (argvec))
7863               tsubst_default_arguments (r);
7864           }
7865         else
7866           DECL_TEMPLATE_INFO (r) = NULL_TREE;
7867
7868         /* Copy the list of befriending classes.  */
7869         for (friends = &DECL_BEFRIENDING_CLASSES (r);
7870              *friends;
7871              friends = &TREE_CHAIN (*friends))
7872           {
7873             *friends = copy_node (*friends);
7874             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7875                                             args, complain,
7876                                             in_decl);
7877           }
7878
7879         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7880           {
7881             maybe_retrofit_in_chrg (r);
7882             if (DECL_CONSTRUCTOR_P (r))
7883               grok_ctor_properties (ctx, r);
7884             /* If this is an instantiation of a member template, clone it.
7885                If it isn't, that'll be handled by
7886                clone_constructors_and_destructors.  */
7887             if (PRIMARY_TEMPLATE_P (gen_tmpl))
7888               clone_function_decl (r, /*update_method_vec_p=*/0);
7889           }
7890         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7891                  && !grok_op_properties (r, (complain & tf_error) != 0))
7892           return error_mark_node;
7893
7894         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7895           SET_DECL_FRIEND_CONTEXT (r,
7896                                    tsubst (DECL_FRIEND_CONTEXT (t),
7897                                             args, complain, in_decl));
7898
7899         /* Possibly limit visibility based on template args.  */
7900         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7901         if (DECL_VISIBILITY_SPECIFIED (t))
7902           {
7903             DECL_VISIBILITY_SPECIFIED (r) = 0;
7904             DECL_ATTRIBUTES (r)
7905               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7906           }
7907         determine_visibility (r);
7908
7909         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
7910                                         args, complain, in_decl);
7911       }
7912       break;
7913
7914     case PARM_DECL:
7915       {
7916         tree type = NULL_TREE;
7917         int i, len = 1;
7918         tree expanded_types = NULL_TREE;
7919         tree prev_r = NULL_TREE;
7920         tree first_r = NULL_TREE;
7921
7922         if (FUNCTION_PARAMETER_PACK_P (t))
7923           {
7924             /* If there is a local specialization that isn't a
7925                parameter pack, it means that we're doing a "simple"
7926                substitution from inside tsubst_pack_expansion. Just
7927                return the local specialization (which will be a single
7928                parm).  */
7929             tree spec = NULL_TREE;
7930             if (local_specializations)
7931               spec = retrieve_local_specialization (t);
7932             if (spec 
7933                 && TREE_CODE (spec) == PARM_DECL
7934                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7935               return spec;
7936
7937             /* Expand the TYPE_PACK_EXPANSION that provides the types for
7938                the parameters in this function parameter pack.  */
7939             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7940                                                     complain, in_decl);
7941             if (TREE_CODE (expanded_types) == TREE_VEC)
7942               {
7943                 len = TREE_VEC_LENGTH (expanded_types);
7944
7945                 /* Zero-length parameter packs are boring. Just substitute
7946                    into the chain.  */
7947                 if (len == 0)
7948                   return tsubst (TREE_CHAIN (t), args, complain, 
7949                                  TREE_CHAIN (t));
7950               }
7951             else
7952               {
7953                 /* All we did was update the type. Make a note of that.  */
7954                 type = expanded_types;
7955                 expanded_types = NULL_TREE;
7956               }
7957           }
7958
7959         /* Loop through all of the parameter's we'll build. When T is
7960            a function parameter pack, LEN is the number of expanded
7961            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
7962         r = NULL_TREE;
7963         for (i = 0; i < len; ++i)
7964           {
7965             prev_r = r;
7966             r = copy_node (t);
7967             if (DECL_TEMPLATE_PARM_P (t))
7968               SET_DECL_TEMPLATE_PARM_P (r);
7969
7970             if (expanded_types)
7971               /* We're on the Ith parameter of the function parameter
7972                  pack.  */
7973               {
7974                 /* Get the Ith type.  */
7975                 type = TREE_VEC_ELT (expanded_types, i);
7976
7977                 if (DECL_NAME (r))
7978                   /* Rename the parameter to include the index.  */
7979                   DECL_NAME (r) =
7980                     make_ith_pack_parameter_name (DECL_NAME (r), i);
7981               }
7982             else if (!type)
7983               /* We're dealing with a normal parameter.  */
7984               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7985
7986             type = type_decays_to (type);
7987             TREE_TYPE (r) = type;
7988             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7989
7990             if (DECL_INITIAL (r))
7991               {
7992                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7993                   DECL_INITIAL (r) = TREE_TYPE (r);
7994                 else
7995                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7996                                              complain, in_decl);
7997               }
7998
7999             DECL_CONTEXT (r) = NULL_TREE;
8000
8001             if (!DECL_TEMPLATE_PARM_P (r))
8002               DECL_ARG_TYPE (r) = type_passed_as (type);
8003
8004             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8005                                             args, complain, in_decl);
8006
8007             /* Keep track of the first new parameter we
8008                generate. That's what will be returned to the
8009                caller.  */
8010             if (!first_r)
8011               first_r = r;
8012
8013             /* Build a proper chain of parameters when substituting
8014                into a function parameter pack.  */
8015             if (prev_r)
8016               TREE_CHAIN (prev_r) = r;
8017           }
8018
8019         if (TREE_CHAIN (t))
8020           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8021                                    complain, TREE_CHAIN (t));
8022
8023         /* FIRST_R contains the start of the chain we've built.  */
8024         r = first_r;
8025       }
8026       break;
8027
8028     case FIELD_DECL:
8029       {
8030         tree type;
8031
8032         r = copy_decl (t);
8033         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8034         if (type == error_mark_node)
8035           return error_mark_node;
8036         TREE_TYPE (r) = type;
8037         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8038
8039         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8040         DECL_INITIAL (r)
8041           = tsubst_expr (DECL_INITIAL (t), args,
8042                          complain, in_decl,
8043                          /*integral_constant_expression_p=*/true);
8044         /* We don't have to set DECL_CONTEXT here; it is set by
8045            finish_member_declaration.  */
8046         TREE_CHAIN (r) = NULL_TREE;
8047         if (VOID_TYPE_P (type))
8048           error ("instantiation of %q+D as type %qT", r, type);
8049
8050         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8051                                         args, complain, in_decl);
8052       }
8053       break;
8054
8055     case USING_DECL:
8056       /* We reach here only for member using decls.  */
8057       if (DECL_DEPENDENT_P (t))
8058         {
8059           r = do_class_using_decl
8060             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8061              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8062           if (!r)
8063             r = error_mark_node;
8064         }
8065       else
8066         {
8067           r = copy_node (t);
8068           TREE_CHAIN (r) = NULL_TREE;
8069         }
8070       break;
8071
8072     case TYPE_DECL:
8073     case VAR_DECL:
8074       {
8075         tree argvec = NULL_TREE;
8076         tree gen_tmpl = NULL_TREE;
8077         tree spec;
8078         tree tmpl = NULL_TREE;
8079         tree ctx;
8080         tree type = NULL_TREE;
8081         bool local_p;
8082
8083         if (TREE_CODE (t) == TYPE_DECL
8084             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8085           {
8086             /* If this is the canonical decl, we don't have to
8087                mess with instantiations, and often we can't (for
8088                typename, template type parms and such).  Note that
8089                TYPE_NAME is not correct for the above test if
8090                we've copied the type for a typedef.  */
8091             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8092             if (type == error_mark_node)
8093               return error_mark_node;
8094             r = TYPE_NAME (type);
8095             break;
8096           }
8097
8098         /* Check to see if we already have the specialization we
8099            need.  */
8100         spec = NULL_TREE;
8101         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8102           {
8103             /* T is a static data member or namespace-scope entity.
8104                We have to substitute into namespace-scope variables
8105                (even though such entities are never templates) because
8106                of cases like:
8107                
8108                  template <class T> void f() { extern T t; }
8109
8110                where the entity referenced is not known until
8111                instantiation time.  */
8112             local_p = false;
8113             ctx = DECL_CONTEXT (t);
8114             if (DECL_CLASS_SCOPE_P (t))
8115               {
8116                 ctx = tsubst_aggr_type (ctx, args,
8117                                         complain,
8118                                         in_decl, /*entering_scope=*/1);
8119                 /* If CTX is unchanged, then T is in fact the
8120                    specialization we want.  That situation occurs when
8121                    referencing a static data member within in its own
8122                    class.  We can use pointer equality, rather than
8123                    same_type_p, because DECL_CONTEXT is always
8124                    canonical.  */
8125                 if (ctx == DECL_CONTEXT (t))
8126                   spec = t;
8127               }
8128
8129             if (!spec)
8130               {
8131                 tmpl = DECL_TI_TEMPLATE (t);
8132                 gen_tmpl = most_general_template (tmpl);
8133                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8134                 spec = (retrieve_specialization 
8135                         (gen_tmpl, argvec,
8136                          /*class_specializations_p=*/false));
8137               }
8138           }
8139         else
8140           {
8141             /* A local variable.  */
8142             local_p = true;
8143             /* Subsequent calls to pushdecl will fill this in.  */
8144             ctx = NULL_TREE;
8145             spec = retrieve_local_specialization (t);
8146           }
8147         /* If we already have the specialization we need, there is
8148            nothing more to do.  */ 
8149         if (spec)
8150           {
8151             r = spec;
8152             break;
8153           }
8154
8155         /* Create a new node for the specialization we need.  */
8156         r = copy_decl (t);
8157         if (type == NULL_TREE)
8158           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8159         if (TREE_CODE (r) == VAR_DECL)
8160           {
8161             /* Even if the original location is out of scope, the
8162                newly substituted one is not.  */
8163             DECL_DEAD_FOR_LOCAL (r) = 0;
8164             DECL_INITIALIZED_P (r) = 0;
8165             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8166             if (type == error_mark_node)
8167               return error_mark_node;
8168             if (TREE_CODE (type) == FUNCTION_TYPE)
8169               {
8170                 /* It may seem that this case cannot occur, since:
8171
8172                      typedef void f();
8173                      void g() { f x; }
8174
8175                    declares a function, not a variable.  However:
8176       
8177                      typedef void f();
8178                      template <typename T> void g() { T t; }
8179                      template void g<f>();
8180
8181                    is an attempt to declare a variable with function
8182                    type.  */
8183                 error ("variable %qD has function type",
8184                        /* R is not yet sufficiently initialized, so we
8185                           just use its name.  */
8186                        DECL_NAME (r));
8187                 return error_mark_node;
8188               }
8189             type = complete_type (type);
8190             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8191               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8192             type = check_var_type (DECL_NAME (r), type);
8193
8194             if (DECL_HAS_VALUE_EXPR_P (t))
8195               {
8196                 tree ve = DECL_VALUE_EXPR (t);
8197                 ve = tsubst_expr (ve, args, complain, in_decl,
8198                                   /*constant_expression_p=*/false);
8199                 SET_DECL_VALUE_EXPR (r, ve);
8200               }
8201           }
8202         else if (DECL_SELF_REFERENCE_P (t))
8203           SET_DECL_SELF_REFERENCE_P (r);
8204         TREE_TYPE (r) = type;
8205         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8206         DECL_CONTEXT (r) = ctx;
8207         /* Clear out the mangled name and RTL for the instantiation.  */
8208         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8209         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8210           SET_DECL_RTL (r, NULL_RTX);
8211         /* The initializer must not be expanded until it is required;
8212            see [temp.inst].  */
8213         DECL_INITIAL (r) = NULL_TREE;
8214         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8215           SET_DECL_RTL (r, NULL_RTX);
8216         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8217         if (TREE_CODE (r) == VAR_DECL)
8218           {
8219             /* Possibly limit visibility based on template args.  */
8220             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8221             if (DECL_VISIBILITY_SPECIFIED (t))
8222               {
8223                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8224                 DECL_ATTRIBUTES (r)
8225                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8226               }
8227             determine_visibility (r);
8228           }
8229         /* Preserve a typedef that names a type.  */
8230         else if (TREE_CODE (r) == TYPE_DECL
8231                  && DECL_ORIGINAL_TYPE (t)
8232                  && type != error_mark_node)
8233           {
8234             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8235                                              args, complain, in_decl);
8236             TREE_TYPE (r) = type = build_variant_type_copy (type);
8237             TYPE_NAME (type) = r;
8238           }
8239
8240         if (!local_p)
8241           {
8242             /* A static data member declaration is always marked
8243                external when it is declared in-class, even if an
8244                initializer is present.  We mimic the non-template
8245                processing here.  */
8246             DECL_EXTERNAL (r) = 1;
8247
8248             register_specialization (r, gen_tmpl, argvec, false);
8249             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8250             SET_DECL_IMPLICIT_INSTANTIATION (r);
8251           }
8252         else
8253           register_local_specialization (r, t);
8254
8255         TREE_CHAIN (r) = NULL_TREE;
8256
8257         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8258                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8259                                         args, complain, in_decl);
8260         layout_decl (r, 0);
8261       }
8262       break;
8263
8264     default:
8265       gcc_unreachable ();
8266     }
8267
8268   /* Restore the file and line information.  */
8269   input_location = saved_loc;
8270
8271   return r;
8272 }
8273
8274 /* Substitute into the ARG_TYPES of a function type.  */
8275
8276 static tree
8277 tsubst_arg_types (tree arg_types,
8278                   tree args,
8279                   tsubst_flags_t complain,
8280                   tree in_decl)
8281 {
8282   tree remaining_arg_types;
8283   tree type = NULL_TREE;
8284   int i = 1;
8285   tree expanded_args = NULL_TREE;
8286   tree default_arg;
8287
8288   if (!arg_types || arg_types == void_list_node)
8289     return arg_types;
8290
8291   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8292                                           args, complain, in_decl);
8293   if (remaining_arg_types == error_mark_node)
8294     return error_mark_node;
8295
8296   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8297     {
8298       /* For a pack expansion, perform substitution on the
8299          entire expression. Later on, we'll handle the arguments
8300          one-by-one.  */
8301       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8302                                             args, complain, in_decl);
8303
8304       if (TREE_CODE (expanded_args) == TREE_VEC)
8305         /* So that we'll spin through the parameters, one by one.  */
8306         i = TREE_VEC_LENGTH (expanded_args);
8307       else
8308         {
8309           /* We only partially substituted into the parameter
8310              pack. Our type is TYPE_PACK_EXPANSION.  */
8311           type = expanded_args;
8312           expanded_args = NULL_TREE;
8313         }
8314     }
8315
8316   while (i > 0) {
8317     --i;
8318     
8319     if (expanded_args)
8320       type = TREE_VEC_ELT (expanded_args, i);
8321     else if (!type)
8322       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8323
8324     if (type == error_mark_node)
8325       return error_mark_node;
8326     if (VOID_TYPE_P (type))
8327       {
8328         if (complain & tf_error)
8329           {
8330             error ("invalid parameter type %qT", type);
8331             if (in_decl)
8332               error ("in declaration %q+D", in_decl);
8333           }
8334         return error_mark_node;
8335     }
8336     
8337     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8338        top-level qualifiers as required.  */
8339     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8340
8341     /* We do not substitute into default arguments here.  The standard
8342        mandates that they be instantiated only when needed, which is
8343        done in build_over_call.  */
8344     default_arg = TREE_PURPOSE (arg_types);
8345
8346     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8347       {
8348         /* We've instantiated a template before its default arguments
8349            have been parsed.  This can happen for a nested template
8350            class, and is not an error unless we require the default
8351            argument in a call of this function.  */
8352         remaining_arg_types = 
8353           tree_cons (default_arg, type, remaining_arg_types);
8354         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8355                        remaining_arg_types);
8356       }
8357     else
8358       remaining_arg_types = 
8359         hash_tree_cons (default_arg, type, remaining_arg_types);
8360   }
8361         
8362   return remaining_arg_types;
8363 }
8364
8365 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8366    *not* handle the exception-specification for FNTYPE, because the
8367    initial substitution of explicitly provided template parameters
8368    during argument deduction forbids substitution into the
8369    exception-specification:
8370
8371      [temp.deduct]
8372
8373      All references in the function type of the function template to  the
8374      corresponding template parameters are replaced by the specified tem-
8375      plate argument values.  If a substitution in a template parameter or
8376      in  the function type of the function template results in an invalid
8377      type, type deduction fails.  [Note: The equivalent  substitution  in
8378      exception specifications is done only when the function is instanti-
8379      ated, at which point a program is  ill-formed  if  the  substitution
8380      results in an invalid type.]  */
8381
8382 static tree
8383 tsubst_function_type (tree t,
8384                       tree args,
8385                       tsubst_flags_t complain,
8386                       tree in_decl)
8387 {
8388   tree return_type;
8389   tree arg_types;
8390   tree fntype;
8391
8392   /* The TYPE_CONTEXT is not used for function/method types.  */
8393   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8394
8395   /* Substitute the return type.  */
8396   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8397   if (return_type == error_mark_node)
8398     return error_mark_node;
8399   /* The standard does not presently indicate that creation of a
8400      function type with an invalid return type is a deduction failure.
8401      However, that is clearly analogous to creating an array of "void"
8402      or a reference to a reference.  This is core issue #486.  */
8403   if (TREE_CODE (return_type) == ARRAY_TYPE
8404       || TREE_CODE (return_type) == FUNCTION_TYPE)
8405     {
8406       if (complain & tf_error)
8407         {
8408           if (TREE_CODE (return_type) == ARRAY_TYPE)
8409             error ("function returning an array");
8410           else
8411             error ("function returning a function");
8412         }
8413       return error_mark_node;
8414     }
8415
8416   /* Substitute the argument types.  */
8417   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8418                                 complain, in_decl);
8419   if (arg_types == error_mark_node)
8420     return error_mark_node;
8421
8422   if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8423       && in_decl != NULL_TREE
8424       && !TREE_NO_WARNING (in_decl)
8425       && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8426     warning (OPT_Wreturn_type,
8427             "type qualifiers ignored on function return type");
8428
8429   /* Construct a new type node and return it.  */
8430   if (TREE_CODE (t) == FUNCTION_TYPE)
8431     fntype = build_function_type (return_type, arg_types);
8432   else
8433     {
8434       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8435       if (! IS_AGGR_TYPE (r))
8436         {
8437           /* [temp.deduct]
8438
8439              Type deduction may fail for any of the following
8440              reasons:
8441
8442              -- Attempting to create "pointer to member of T" when T
8443              is not a class type.  */
8444           if (complain & tf_error)
8445             error ("creating pointer to member function of non-class type %qT",
8446                       r);
8447           return error_mark_node;
8448         }
8449
8450       fntype = build_method_type_directly (r, return_type,
8451                                            TREE_CHAIN (arg_types));
8452     }
8453   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8454   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8455
8456   return fntype;
8457 }
8458
8459 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8460    ARGS into that specification, and return the substituted
8461    specification.  If there is no specification, return NULL_TREE.  */
8462
8463 static tree
8464 tsubst_exception_specification (tree fntype,
8465                                 tree args,
8466                                 tsubst_flags_t complain,
8467                                 tree in_decl)
8468 {
8469   tree specs;
8470   tree new_specs;
8471
8472   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8473   new_specs = NULL_TREE;
8474   if (specs)
8475     {
8476       if (! TREE_VALUE (specs))
8477         new_specs = specs;
8478       else
8479         while (specs)
8480           {
8481             tree spec;
8482             int i, len = 1;
8483             tree expanded_specs = NULL_TREE;
8484
8485             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8486               {
8487                 /* Expand the pack expansion type.  */
8488                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8489                                                        args, complain,
8490                                                        in_decl);
8491                 len = TREE_VEC_LENGTH (expanded_specs);
8492               }
8493
8494             for (i = 0; i < len; ++i)
8495               {
8496                 if (expanded_specs)
8497                   spec = TREE_VEC_ELT (expanded_specs, i);
8498                 else
8499                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8500                 if (spec == error_mark_node)
8501                   return spec;
8502                 new_specs = add_exception_specifier (new_specs, spec, 
8503                                                      complain);
8504               }
8505
8506             specs = TREE_CHAIN (specs);
8507           }
8508     }
8509   return new_specs;
8510 }
8511
8512 /* Take the tree structure T and replace template parameters used
8513    therein with the argument vector ARGS.  IN_DECL is an associated
8514    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8515    Issue error and warning messages under control of COMPLAIN.  Note
8516    that we must be relatively non-tolerant of extensions here, in
8517    order to preserve conformance; if we allow substitutions that
8518    should not be allowed, we may allow argument deductions that should
8519    not succeed, and therefore report ambiguous overload situations
8520    where there are none.  In theory, we could allow the substitution,
8521    but indicate that it should have failed, and allow our caller to
8522    make sure that the right thing happens, but we don't try to do this
8523    yet.
8524
8525    This function is used for dealing with types, decls and the like;
8526    for expressions, use tsubst_expr or tsubst_copy.  */
8527
8528 static tree
8529 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8530 {
8531   tree type, r;
8532
8533   if (t == NULL_TREE || t == error_mark_node
8534       || t == integer_type_node
8535       || t == void_type_node
8536       || t == char_type_node
8537       || t == unknown_type_node
8538       || TREE_CODE (t) == NAMESPACE_DECL)
8539     return t;
8540
8541   if (DECL_P (t))
8542     return tsubst_decl (t, args, complain);
8543
8544   if (TREE_CODE (t) == IDENTIFIER_NODE)
8545     type = IDENTIFIER_TYPE_VALUE (t);
8546   else
8547     type = TREE_TYPE (t);
8548
8549   gcc_assert (type != unknown_type_node);
8550
8551   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8552      such as attribute aligned.  */
8553   if (TYPE_P (t)
8554       && TYPE_NAME (t)
8555       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8556     {
8557       tree decl = TYPE_NAME (t);
8558       
8559       if (DECL_CLASS_SCOPE_P (decl)
8560           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8561         {
8562           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8563           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8564           r = retrieve_specialization (tmpl, gen_args, false);
8565         }
8566       else if (DECL_FUNCTION_SCOPE_P (decl))
8567         r = retrieve_local_specialization (decl);
8568       else
8569         r = NULL_TREE;
8570         
8571       if (r)
8572         {
8573           r = TREE_TYPE (r);
8574           r = cp_build_qualified_type_real
8575             (r, cp_type_quals (t) | cp_type_quals (r),
8576              complain | tf_ignore_bad_quals);
8577           return r;
8578         }
8579       /* Else we must be instantiating the typedef, so fall through.  */
8580     }
8581
8582   if (type
8583       && TREE_CODE (t) != TYPENAME_TYPE
8584       && TREE_CODE (t) != IDENTIFIER_NODE
8585       && TREE_CODE (t) != FUNCTION_TYPE
8586       && TREE_CODE (t) != METHOD_TYPE)
8587     type = tsubst (type, args, complain, in_decl);
8588   if (type == error_mark_node)
8589     return error_mark_node;
8590
8591   switch (TREE_CODE (t))
8592     {
8593     case RECORD_TYPE:
8594     case UNION_TYPE:
8595     case ENUMERAL_TYPE:
8596       return tsubst_aggr_type (t, args, complain, in_decl,
8597                                /*entering_scope=*/0);
8598
8599     case ERROR_MARK:
8600     case IDENTIFIER_NODE:
8601     case VOID_TYPE:
8602     case REAL_TYPE:
8603     case COMPLEX_TYPE:
8604     case VECTOR_TYPE:
8605     case BOOLEAN_TYPE:
8606     case INTEGER_CST:
8607     case REAL_CST:
8608     case STRING_CST:
8609       return t;
8610
8611     case INTEGER_TYPE:
8612       if (t == integer_type_node)
8613         return t;
8614
8615       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8616           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8617         return t;
8618
8619       {
8620         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8621
8622         max = tsubst_expr (omax, args, complain, in_decl,
8623                            /*integral_constant_expression_p=*/false);
8624         max = fold_decl_constant_value (max);
8625
8626         if (TREE_CODE (max) != INTEGER_CST 
8627             && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8628             && !at_function_scope_p ())
8629           {
8630             if (complain & tf_error)
8631               error ("array bound is not an integer constant");
8632             return error_mark_node;
8633           }
8634
8635         /* [temp.deduct]
8636
8637            Type deduction may fail for any of the following
8638            reasons:
8639
8640              Attempting to create an array with a size that is
8641              zero or negative.  */
8642         if (integer_zerop (max) && !(complain & tf_error))
8643           /* We must fail if performing argument deduction (as
8644              indicated by the state of complain), so that
8645              another substitution can be found.  */
8646           return error_mark_node;
8647         else if (TREE_CODE (max) == INTEGER_CST
8648                  && INT_CST_LT (max, integer_zero_node))
8649           {
8650             if (complain & tf_error)
8651               error ("creating array with negative size (%qE)", max);
8652
8653             return error_mark_node;
8654           }
8655
8656         return compute_array_index_type (NULL_TREE, max);
8657       }
8658
8659     case TEMPLATE_TYPE_PARM:
8660     case TEMPLATE_TEMPLATE_PARM:
8661     case BOUND_TEMPLATE_TEMPLATE_PARM:
8662     case TEMPLATE_PARM_INDEX:
8663       {
8664         int idx;
8665         int level;
8666         int levels;
8667         tree arg = NULL_TREE;
8668
8669         r = NULL_TREE;
8670
8671         gcc_assert (TREE_VEC_LENGTH (args) > 0);
8672         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8673             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
8674             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8675           {
8676             idx = TEMPLATE_TYPE_IDX (t);
8677             level = TEMPLATE_TYPE_LEVEL (t);
8678           }
8679         else
8680           {
8681             idx = TEMPLATE_PARM_IDX (t);
8682             level = TEMPLATE_PARM_LEVEL (t);
8683           }
8684
8685         levels = TMPL_ARGS_DEPTH (args);
8686         if (level <= levels)
8687           {
8688             arg = TMPL_ARG (args, level, idx);
8689
8690             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8691               /* See through ARGUMENT_PACK_SELECT arguments. */
8692               arg = ARGUMENT_PACK_SELECT_ARG (arg);
8693           }
8694
8695         if (arg == error_mark_node)
8696           return error_mark_node;
8697         else if (arg != NULL_TREE)
8698           {
8699             if (ARGUMENT_PACK_P (arg))
8700               /* If ARG is an argument pack, we don't actually want to
8701                  perform a substitution here, because substitutions
8702                  for argument packs are only done
8703                  element-by-element. We can get to this point when
8704                  substituting the type of a non-type template
8705                  parameter pack, when that type actually contains
8706                  template parameter packs from an outer template, e.g.,
8707
8708                  template<typename... Types> struct A {
8709                    template<Types... Values> struct B { };
8710                  };  */
8711               return t;
8712
8713             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8714               {
8715                 int quals;
8716                 gcc_assert (TYPE_P (arg));
8717
8718                 /* cv-quals from the template are discarded when
8719                    substituting in a function or reference type.  */
8720                 if (TREE_CODE (arg) == FUNCTION_TYPE
8721                     || TREE_CODE (arg) == METHOD_TYPE
8722                     || TREE_CODE (arg) == REFERENCE_TYPE)
8723                   quals = cp_type_quals (arg);
8724                 else
8725                   quals = cp_type_quals (arg) | cp_type_quals (t);
8726                   
8727                 return cp_build_qualified_type_real
8728                   (arg, quals, complain | tf_ignore_bad_quals);
8729               }
8730             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8731               {
8732                 /* We are processing a type constructed from a
8733                    template template parameter.  */
8734                 tree argvec = tsubst (TYPE_TI_ARGS (t),
8735                                       args, complain, in_decl);
8736                 if (argvec == error_mark_node)
8737                   return error_mark_node;
8738
8739                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8740                    are resolving nested-types in the signature of a
8741                    member function templates.  Otherwise ARG is a
8742                    TEMPLATE_DECL and is the real template to be
8743                    instantiated.  */
8744                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8745                   arg = TYPE_NAME (arg);
8746
8747                 r = lookup_template_class (arg,
8748                                            argvec, in_decl,
8749                                            DECL_CONTEXT (arg),
8750                                             /*entering_scope=*/0,
8751                                            complain);
8752                 return cp_build_qualified_type_real
8753                   (r, TYPE_QUALS (t), complain);
8754               }
8755             else
8756               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
8757               return arg;
8758           }
8759
8760         if (level == 1)
8761           /* This can happen during the attempted tsubst'ing in
8762              unify.  This means that we don't yet have any information
8763              about the template parameter in question.  */
8764           return t;
8765
8766         /* If we get here, we must have been looking at a parm for a
8767            more deeply nested template.  Make a new version of this
8768            template parameter, but with a lower level.  */
8769         switch (TREE_CODE (t))
8770           {
8771           case TEMPLATE_TYPE_PARM:
8772           case TEMPLATE_TEMPLATE_PARM:
8773           case BOUND_TEMPLATE_TEMPLATE_PARM:
8774             if (cp_type_quals (t))
8775               {
8776                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8777                 r = cp_build_qualified_type_real
8778                   (r, cp_type_quals (t),
8779                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8780                                ? tf_ignore_bad_quals : 0));
8781               }
8782             else
8783               {
8784                 r = copy_type (t);
8785                 TEMPLATE_TYPE_PARM_INDEX (r)
8786                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8787                                                 r, levels);
8788                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8789                 TYPE_MAIN_VARIANT (r) = r;
8790                 TYPE_POINTER_TO (r) = NULL_TREE;
8791                 TYPE_REFERENCE_TO (r) = NULL_TREE;
8792
8793                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8794                   /* We have reduced the level of the template
8795                      template parameter, but not the levels of its
8796                      template parameters, so canonical_type_parameter
8797                      will not be able to find the canonical template
8798                      template parameter for this level. Thus, we
8799                      require structural equality checking to compare
8800                      TEMPLATE_TEMPLATE_PARMs. */
8801                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8802                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8803                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8804                 else
8805                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
8806
8807                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8808                   {
8809                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8810                                           complain, in_decl);
8811                     if (argvec == error_mark_node)
8812                       return error_mark_node;
8813
8814                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8815                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8816                   }
8817               }
8818             break;
8819
8820           case TEMPLATE_PARM_INDEX:
8821             r = reduce_template_parm_level (t, type, levels);
8822             break;
8823
8824           default:
8825             gcc_unreachable ();
8826           }
8827
8828         return r;
8829       }
8830
8831     case TREE_LIST:
8832       {
8833         tree purpose, value, chain;
8834
8835         if (t == void_list_node)
8836           return t;
8837
8838         purpose = TREE_PURPOSE (t);
8839         if (purpose)
8840           {
8841             purpose = tsubst (purpose, args, complain, in_decl);
8842             if (purpose == error_mark_node)
8843               return error_mark_node;
8844           }
8845         value = TREE_VALUE (t);
8846         if (value)
8847           {
8848             value = tsubst (value, args, complain, in_decl);
8849             if (value == error_mark_node)
8850               return error_mark_node;
8851           }
8852         chain = TREE_CHAIN (t);
8853         if (chain && chain != void_type_node)
8854           {
8855             chain = tsubst (chain, args, complain, in_decl);
8856             if (chain == error_mark_node)
8857               return error_mark_node;
8858           }
8859         if (purpose == TREE_PURPOSE (t)
8860             && value == TREE_VALUE (t)
8861             && chain == TREE_CHAIN (t))
8862           return t;
8863         return hash_tree_cons (purpose, value, chain);
8864       }
8865
8866     case TREE_BINFO:
8867       /* We should never be tsubsting a binfo.  */
8868       gcc_unreachable ();
8869
8870     case TREE_VEC:
8871       /* A vector of template arguments.  */
8872       gcc_assert (!type);
8873       return tsubst_template_args (t, args, complain, in_decl);
8874
8875     case POINTER_TYPE:
8876     case REFERENCE_TYPE:
8877       {
8878         enum tree_code code;
8879
8880         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8881           return t;
8882
8883         code = TREE_CODE (t);
8884
8885
8886         /* [temp.deduct]
8887
8888            Type deduction may fail for any of the following
8889            reasons:
8890
8891            -- Attempting to create a pointer to reference type.
8892            -- Attempting to create a reference to a reference type or
8893               a reference to void.
8894
8895           Core issue 106 says that creating a reference to a reference
8896           during instantiation is no longer a cause for failure. We
8897           only enforce this check in strict C++98 mode.  */
8898         if ((TREE_CODE (type) == REFERENCE_TYPE
8899              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8900             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8901           {
8902             static location_t last_loc;
8903
8904             /* We keep track of the last time we issued this error
8905                message to avoid spewing a ton of messages during a
8906                single bad template instantiation.  */
8907             if (complain & tf_error
8908 #ifdef USE_MAPPED_LOCATION
8909                 && last_loc != input_location
8910 #else
8911                 && (last_loc.line != input_line
8912                     || last_loc.file != input_filename)
8913 #endif
8914                   )
8915               {
8916                 if (TREE_CODE (type) == VOID_TYPE)
8917                   error ("forming reference to void");
8918                 else
8919                   error ("forming %s to reference type %qT",
8920                          (code == POINTER_TYPE) ? "pointer" : "reference",
8921                          type);
8922                 last_loc = input_location;
8923               }
8924
8925             return error_mark_node;
8926           }
8927         else if (code == POINTER_TYPE)
8928           {
8929             r = build_pointer_type (type);
8930             if (TREE_CODE (type) == METHOD_TYPE)
8931               r = build_ptrmemfunc_type (r);
8932           }
8933         else if (TREE_CODE (type) == REFERENCE_TYPE)
8934           /* In C++0x, during template argument substitution, when there is an
8935              attempt to create a reference to a reference type, reference
8936              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8937
8938              "If a template-argument for a template-parameter T names a type
8939              that is a reference to a type A, an attempt to create the type
8940              'lvalue reference to cv T' creates the type 'lvalue reference to
8941              A,' while an attempt to create the type type rvalue reference to
8942              cv T' creates the type T"
8943           */
8944           r = cp_build_reference_type
8945               (TREE_TYPE (type),
8946                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8947         else
8948           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8949         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8950
8951         if (r != error_mark_node)
8952           /* Will this ever be needed for TYPE_..._TO values?  */
8953           layout_type (r);
8954
8955         return r;
8956       }
8957     case OFFSET_TYPE:
8958       {
8959         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8960         if (r == error_mark_node || !IS_AGGR_TYPE (r))
8961           {
8962             /* [temp.deduct]
8963
8964                Type deduction may fail for any of the following
8965                reasons:
8966
8967                -- Attempting to create "pointer to member of T" when T
8968                   is not a class type.  */
8969             if (complain & tf_error)
8970               error ("creating pointer to member of non-class type %qT", r);
8971             return error_mark_node;
8972           }
8973         if (TREE_CODE (type) == REFERENCE_TYPE)
8974           {
8975             if (complain & tf_error)
8976               error ("creating pointer to member reference type %qT", type);
8977             return error_mark_node;
8978           }
8979         if (TREE_CODE (type) == VOID_TYPE)
8980           {
8981             if (complain & tf_error)
8982               error ("creating pointer to member of type void");
8983             return error_mark_node;
8984           }
8985         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
8986         if (TREE_CODE (type) == FUNCTION_TYPE)
8987           {
8988             /* The type of the implicit object parameter gets its
8989                cv-qualifiers from the FUNCTION_TYPE. */
8990             tree method_type;
8991             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8992                                                       cp_type_quals (type));
8993             tree memptr;
8994             method_type = build_method_type_directly (this_type,
8995                                                       TREE_TYPE (type),
8996                                                       TYPE_ARG_TYPES (type));
8997             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8998             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8999                                                  complain);
9000           }
9001         else
9002           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9003                                                TYPE_QUALS (t),
9004                                                complain);
9005       }
9006     case FUNCTION_TYPE:
9007     case METHOD_TYPE:
9008       {
9009         tree fntype;
9010         tree specs;
9011         fntype = tsubst_function_type (t, args, complain, in_decl);
9012         if (fntype == error_mark_node)
9013           return error_mark_node;
9014
9015         /* Substitute the exception specification.  */
9016         specs = tsubst_exception_specification (t, args, complain,
9017                                                 in_decl);
9018         if (specs == error_mark_node)
9019           return error_mark_node;
9020         if (specs)
9021           fntype = build_exception_variant (fntype, specs);
9022         return fntype;
9023       }
9024     case ARRAY_TYPE:
9025       {
9026         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9027         if (domain == error_mark_node)
9028           return error_mark_node;
9029
9030         /* As an optimization, we avoid regenerating the array type if
9031            it will obviously be the same as T.  */
9032         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9033           return t;
9034
9035         /* These checks should match the ones in grokdeclarator.
9036
9037            [temp.deduct]
9038
9039            The deduction may fail for any of the following reasons:
9040
9041            -- Attempting to create an array with an element type that
9042               is void, a function type, or a reference type, or [DR337]
9043               an abstract class type.  */
9044         if (TREE_CODE (type) == VOID_TYPE
9045             || TREE_CODE (type) == FUNCTION_TYPE
9046             || TREE_CODE (type) == REFERENCE_TYPE)
9047           {
9048             if (complain & tf_error)
9049               error ("creating array of %qT", type);
9050             return error_mark_node;
9051           }
9052         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9053           {
9054             if (complain & tf_error)
9055               error ("creating array of %qT, which is an abstract class type",
9056                      type);
9057             return error_mark_node;
9058           }
9059
9060         r = build_cplus_array_type (type, domain);
9061
9062         if (TYPE_USER_ALIGN (t))
9063           {
9064             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9065             TYPE_USER_ALIGN (r) = 1;
9066           }
9067
9068         return r;
9069       }
9070
9071     case PLUS_EXPR:
9072     case MINUS_EXPR:
9073       {
9074         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9075         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9076
9077         if (e1 == error_mark_node || e2 == error_mark_node)
9078           return error_mark_node;
9079
9080         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9081       }
9082
9083     case NEGATE_EXPR:
9084     case NOP_EXPR:
9085       {
9086         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9087         if (e == error_mark_node)
9088           return error_mark_node;
9089
9090         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9091       }
9092
9093     case TYPENAME_TYPE:
9094       {
9095         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9096                                      in_decl, /*entering_scope=*/1);
9097         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9098                               complain, in_decl);
9099
9100         if (ctx == error_mark_node || f == error_mark_node)
9101           return error_mark_node;
9102
9103         if (!IS_AGGR_TYPE (ctx))
9104           {
9105             if (complain & tf_error)
9106               error ("%qT is not a class, struct, or union type", ctx);
9107             return error_mark_node;
9108           }
9109         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9110           {
9111             /* Normally, make_typename_type does not require that the CTX
9112                have complete type in order to allow things like:
9113
9114                  template <class T> struct S { typename S<T>::X Y; };
9115
9116                But, such constructs have already been resolved by this
9117                point, so here CTX really should have complete type, unless
9118                it's a partial instantiation.  */
9119             ctx = complete_type (ctx);
9120             if (!COMPLETE_TYPE_P (ctx))
9121               {
9122                 if (complain & tf_error)
9123                   cxx_incomplete_type_error (NULL_TREE, ctx);
9124                 return error_mark_node;
9125               }
9126           }
9127
9128         f = make_typename_type (ctx, f, typename_type,
9129                                 (complain & tf_error) | tf_keep_type_decl);
9130         if (f == error_mark_node)
9131           return f;
9132         if (TREE_CODE (f) == TYPE_DECL)
9133           {
9134             complain |= tf_ignore_bad_quals;
9135             f = TREE_TYPE (f);
9136           }
9137
9138         if (TREE_CODE (f) != TYPENAME_TYPE)
9139           {
9140             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9141               error ("%qT resolves to %qT, which is not an enumeration type",
9142                      t, f);
9143             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9144               error ("%qT resolves to %qT, which is is not a class type",
9145                      t, f);
9146           }
9147
9148         return cp_build_qualified_type_real
9149           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9150       }
9151
9152     case UNBOUND_CLASS_TEMPLATE:
9153       {
9154         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9155                                      in_decl, /*entering_scope=*/1);
9156         tree name = TYPE_IDENTIFIER (t);
9157         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9158
9159         if (ctx == error_mark_node || name == error_mark_node)
9160           return error_mark_node;
9161
9162         if (parm_list)
9163           parm_list = tsubst_template_parms (parm_list, args, complain);
9164         return make_unbound_class_template (ctx, name, parm_list, complain);
9165       }
9166
9167     case INDIRECT_REF:
9168     case ADDR_EXPR:
9169     case CALL_EXPR:
9170       gcc_unreachable ();
9171
9172     case ARRAY_REF:
9173       {
9174         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9175         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9176                                /*integral_constant_expression_p=*/false);
9177         if (e1 == error_mark_node || e2 == error_mark_node)
9178           return error_mark_node;
9179
9180         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9181       }
9182
9183     case SCOPE_REF:
9184       {
9185         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9186         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9187         if (e1 == error_mark_node || e2 == error_mark_node)
9188           return error_mark_node;
9189
9190         return build_qualified_name (/*type=*/NULL_TREE,
9191                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9192       }
9193
9194     case TYPEOF_TYPE:
9195       {
9196         tree type;
9197
9198         type = finish_typeof (tsubst_expr 
9199                               (TYPEOF_TYPE_EXPR (t), args,
9200                                complain, in_decl,
9201                                /*integral_constant_expression_p=*/false));
9202         return cp_build_qualified_type_real (type,
9203                                              cp_type_quals (t)
9204                                              | cp_type_quals (type),
9205                                              complain);
9206       }
9207
9208     case DECLTYPE_TYPE:
9209       {
9210         tree type;
9211
9212         type = 
9213           finish_decltype_type (tsubst_expr 
9214                                 (DECLTYPE_TYPE_EXPR (t), args,
9215                                  complain, in_decl,
9216                                  /*integral_constant_expression_p=*/false),
9217                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9218         return cp_build_qualified_type_real (type,
9219                                              cp_type_quals (t)
9220                                              | cp_type_quals (type),
9221                                              complain);
9222       }
9223
9224     case TYPE_ARGUMENT_PACK:
9225     case NONTYPE_ARGUMENT_PACK:
9226       {
9227         tree r = make_node (TREE_CODE (t));
9228         tree packed_out = 
9229           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9230                                 args,
9231                                 complain,
9232                                 in_decl);
9233         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9234
9235         /* For template nontype argument packs, also substitute into
9236            the type.  */
9237         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9238           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9239
9240         return r;
9241       }
9242       break;
9243
9244     default:
9245       sorry ("use of %qs in template",
9246              tree_code_name [(int) TREE_CODE (t)]);
9247       return error_mark_node;
9248     }
9249 }
9250
9251 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9252    type of the expression on the left-hand side of the "." or "->"
9253    operator.  */
9254
9255 static tree
9256 tsubst_baselink (tree baselink, tree object_type,
9257                  tree args, tsubst_flags_t complain, tree in_decl)
9258 {
9259     tree name;
9260     tree qualifying_scope;
9261     tree fns;
9262     tree optype;
9263     tree template_args = 0;
9264     bool template_id_p = false;
9265
9266     /* A baselink indicates a function from a base class.  Both the
9267        BASELINK_ACCESS_BINFO and the base class referenced may
9268        indicate bases of the template class, rather than the
9269        instantiated class.  In addition, lookups that were not
9270        ambiguous before may be ambiguous now.  Therefore, we perform
9271        the lookup again.  */
9272     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9273     qualifying_scope = tsubst (qualifying_scope, args,
9274                                complain, in_decl);
9275     fns = BASELINK_FUNCTIONS (baselink);
9276     optype = BASELINK_OPTYPE (baselink);
9277     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9278       {
9279         template_id_p = true;
9280         template_args = TREE_OPERAND (fns, 1);
9281         fns = TREE_OPERAND (fns, 0);
9282         if (template_args)
9283           template_args = tsubst_template_args (template_args, args,
9284                                                 complain, in_decl);
9285       }
9286     name = DECL_NAME (get_first_fn (fns));
9287     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9288
9289     /* If lookup found a single function, mark it as used at this
9290        point.  (If it lookup found multiple functions the one selected
9291        later by overload resolution will be marked as used at that
9292        point.)  */
9293     if (BASELINK_P (baselink))
9294       fns = BASELINK_FUNCTIONS (baselink);
9295     if (!template_id_p && !really_overloaded_fn (fns))
9296       mark_used (OVL_CURRENT (fns));
9297
9298     /* Add back the template arguments, if present.  */
9299     if (BASELINK_P (baselink) && template_id_p)
9300       BASELINK_FUNCTIONS (baselink)
9301         = build_nt (TEMPLATE_ID_EXPR,
9302                     BASELINK_FUNCTIONS (baselink),
9303                     template_args);
9304     /* Update the conversion operator type.  */
9305     BASELINK_OPTYPE (baselink) 
9306       = tsubst (optype, args, complain, in_decl);
9307
9308     if (!object_type)
9309       object_type = current_class_type;
9310     return adjust_result_of_qualified_name_lookup (baselink,
9311                                                    qualifying_scope,
9312                                                    object_type);
9313 }
9314
9315 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9316    true if the qualified-id will be a postfix-expression in-and-of
9317    itself; false if more of the postfix-expression follows the
9318    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9319    of "&".  */
9320
9321 static tree
9322 tsubst_qualified_id (tree qualified_id, tree args,
9323                      tsubst_flags_t complain, tree in_decl,
9324                      bool done, bool address_p)
9325 {
9326   tree expr;
9327   tree scope;
9328   tree name;
9329   bool is_template;
9330   tree template_args;
9331
9332   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9333
9334   /* Figure out what name to look up.  */
9335   name = TREE_OPERAND (qualified_id, 1);
9336   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9337     {
9338       is_template = true;
9339       template_args = TREE_OPERAND (name, 1);
9340       if (template_args)
9341         template_args = tsubst_template_args (template_args, args,
9342                                               complain, in_decl);
9343       name = TREE_OPERAND (name, 0);
9344     }
9345   else
9346     {
9347       is_template = false;
9348       template_args = NULL_TREE;
9349     }
9350
9351   /* Substitute into the qualifying scope.  When there are no ARGS, we
9352      are just trying to simplify a non-dependent expression.  In that
9353      case the qualifying scope may be dependent, and, in any case,
9354      substituting will not help.  */
9355   scope = TREE_OPERAND (qualified_id, 0);
9356   if (args)
9357     {
9358       scope = tsubst (scope, args, complain, in_decl);
9359       expr = tsubst_copy (name, args, complain, in_decl);
9360     }
9361   else
9362     expr = name;
9363
9364   if (dependent_type_p (scope))
9365     return build_qualified_name (/*type=*/NULL_TREE,
9366                                  scope, expr,
9367                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9368
9369   if (!BASELINK_P (name) && !DECL_P (expr))
9370     {
9371       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9372         /* If this were actually a destructor call, it would have been
9373            parsed as such by the parser.  */
9374         expr = error_mark_node;
9375       else
9376         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9377       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9378                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9379         {
9380           if (complain & tf_error)
9381             {
9382               error ("dependent-name %qE is parsed as a non-type, but "
9383                      "instantiation yields a type", qualified_id);
9384               inform ("say %<typename %E%> if a type is meant", qualified_id);
9385             }
9386           return error_mark_node;
9387         }
9388     }
9389
9390   if (DECL_P (expr))
9391     {
9392       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9393                                            scope);
9394       /* Remember that there was a reference to this entity.  */
9395       mark_used (expr);
9396     }
9397
9398   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9399     {
9400       if (complain & tf_error)
9401         qualified_name_lookup_error (scope,
9402                                      TREE_OPERAND (qualified_id, 1),
9403                                      expr);
9404       return error_mark_node;
9405     }
9406
9407   if (is_template)
9408     expr = lookup_template_function (expr, template_args);
9409
9410   if (expr == error_mark_node && complain & tf_error)
9411     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9412                                  expr);
9413   else if (TYPE_P (scope))
9414     {
9415       expr = (adjust_result_of_qualified_name_lookup
9416               (expr, scope, current_class_type));
9417       expr = (finish_qualified_id_expr
9418               (scope, expr, done, address_p,
9419                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9420                /*template_arg_p=*/false));
9421     }
9422
9423   /* Expressions do not generally have reference type.  */
9424   if (TREE_CODE (expr) != SCOPE_REF
9425       /* However, if we're about to form a pointer-to-member, we just
9426          want the referenced member referenced.  */
9427       && TREE_CODE (expr) != OFFSET_REF)
9428     expr = convert_from_reference (expr);
9429
9430   return expr;
9431 }
9432
9433 /* Like tsubst, but deals with expressions.  This function just replaces
9434    template parms; to finish processing the resultant expression, use
9435    tsubst_expr.  */
9436
9437 static tree
9438 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9439 {
9440   enum tree_code code;
9441   tree r;
9442
9443   if (t == NULL_TREE || t == error_mark_node)
9444     return t;
9445
9446   code = TREE_CODE (t);
9447
9448   switch (code)
9449     {
9450     case PARM_DECL:
9451       r = retrieve_local_specialization (t);
9452       gcc_assert (r != NULL);
9453       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9454         r = ARGUMENT_PACK_SELECT_ARG (r);
9455       mark_used (r);
9456       return r;
9457
9458     case CONST_DECL:
9459       {
9460         tree enum_type;
9461         tree v;
9462
9463         if (DECL_TEMPLATE_PARM_P (t))
9464           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9465         /* There is no need to substitute into namespace-scope
9466            enumerators.  */
9467         if (DECL_NAMESPACE_SCOPE_P (t))
9468           return t;
9469         /* If ARGS is NULL, then T is known to be non-dependent.  */
9470         if (args == NULL_TREE)
9471           return integral_constant_value (t);
9472
9473         /* Unfortunately, we cannot just call lookup_name here.
9474            Consider:
9475
9476              template <int I> int f() {
9477              enum E { a = I };
9478              struct S { void g() { E e = a; } };
9479              };
9480
9481            When we instantiate f<7>::S::g(), say, lookup_name is not
9482            clever enough to find f<7>::a.  */
9483         enum_type
9484           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9485                               /*entering_scope=*/0);
9486
9487         for (v = TYPE_VALUES (enum_type);
9488              v != NULL_TREE;
9489              v = TREE_CHAIN (v))
9490           if (TREE_PURPOSE (v) == DECL_NAME (t))
9491             return TREE_VALUE (v);
9492
9493           /* We didn't find the name.  That should never happen; if
9494              name-lookup found it during preliminary parsing, we
9495              should find it again here during instantiation.  */
9496         gcc_unreachable ();
9497       }
9498       return t;
9499
9500     case FIELD_DECL:
9501       if (DECL_CONTEXT (t))
9502         {
9503           tree ctx;
9504
9505           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9506                                   /*entering_scope=*/1);
9507           if (ctx != DECL_CONTEXT (t))
9508             {
9509               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9510               if (!r)
9511                 {
9512                   if (complain & tf_error)
9513                     error ("using invalid field %qD", t);
9514                   return error_mark_node;
9515                 }
9516               return r;
9517             }
9518         }
9519
9520       return t;
9521
9522     case VAR_DECL:
9523     case FUNCTION_DECL:
9524       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9525           || local_variable_p (t))
9526         t = tsubst (t, args, complain, in_decl);
9527       mark_used (t);
9528       return t;
9529
9530     case BASELINK:
9531       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9532
9533     case TEMPLATE_DECL:
9534       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9535         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9536                        args, complain, in_decl);
9537       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9538         return tsubst (t, args, complain, in_decl);
9539       else if (DECL_CLASS_SCOPE_P (t)
9540                && uses_template_parms (DECL_CONTEXT (t)))
9541         {
9542           /* Template template argument like the following example need
9543              special treatment:
9544
9545                template <template <class> class TT> struct C {};
9546                template <class T> struct D {
9547                  template <class U> struct E {};
9548                  C<E> c;                                // #1
9549                };
9550                D<int> d;                                // #2
9551
9552              We are processing the template argument `E' in #1 for
9553              the template instantiation #2.  Originally, `E' is a
9554              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9555              have to substitute this with one having context `D<int>'.  */
9556
9557           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9558           return lookup_field (context, DECL_NAME(t), 0, false);
9559         }
9560       else
9561         /* Ordinary template template argument.  */
9562         return t;
9563
9564     case CAST_EXPR:
9565     case REINTERPRET_CAST_EXPR:
9566     case CONST_CAST_EXPR:
9567     case STATIC_CAST_EXPR:
9568     case DYNAMIC_CAST_EXPR:
9569     case NOP_EXPR:
9570       return build1
9571         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9572          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9573
9574     case SIZEOF_EXPR:
9575       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9576         {
9577           /* We only want to compute the number of arguments.  */
9578           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9579                                                 complain, in_decl);
9580           if (expanded == error_mark_node)
9581             return error_mark_node;
9582           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9583         }
9584       /* Fall through */
9585
9586     case INDIRECT_REF:
9587     case NEGATE_EXPR:
9588     case TRUTH_NOT_EXPR:
9589     case BIT_NOT_EXPR:
9590     case ADDR_EXPR:
9591     case UNARY_PLUS_EXPR:      /* Unary + */
9592     case ALIGNOF_EXPR:
9593     case ARROW_EXPR:
9594     case THROW_EXPR:
9595     case TYPEID_EXPR:
9596     case REALPART_EXPR:
9597     case IMAGPART_EXPR:
9598       return build1
9599         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9600          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9601
9602     case COMPONENT_REF:
9603       {
9604         tree object;
9605         tree name;
9606
9607         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9608         name = TREE_OPERAND (t, 1);
9609         if (TREE_CODE (name) == BIT_NOT_EXPR)
9610           {
9611             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9612                                 complain, in_decl);
9613             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9614           }
9615         else if (TREE_CODE (name) == SCOPE_REF
9616                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9617           {
9618             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9619                                      complain, in_decl);
9620             name = TREE_OPERAND (name, 1);
9621             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9622                                 complain, in_decl);
9623             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9624             name = build_qualified_name (/*type=*/NULL_TREE,
9625                                          base, name,
9626                                          /*template_p=*/false);
9627           }
9628         else if (TREE_CODE (name) == BASELINK)
9629           name = tsubst_baselink (name,
9630                                   non_reference (TREE_TYPE (object)),
9631                                   args, complain,
9632                                   in_decl);
9633         else
9634           name = tsubst_copy (name, args, complain, in_decl);
9635         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9636       }
9637
9638     case PLUS_EXPR:
9639     case MINUS_EXPR:
9640     case MULT_EXPR:
9641     case TRUNC_DIV_EXPR:
9642     case CEIL_DIV_EXPR:
9643     case FLOOR_DIV_EXPR:
9644     case ROUND_DIV_EXPR:
9645     case EXACT_DIV_EXPR:
9646     case BIT_AND_EXPR:
9647     case BIT_IOR_EXPR:
9648     case BIT_XOR_EXPR:
9649     case TRUNC_MOD_EXPR:
9650     case FLOOR_MOD_EXPR:
9651     case TRUTH_ANDIF_EXPR:
9652     case TRUTH_ORIF_EXPR:
9653     case TRUTH_AND_EXPR:
9654     case TRUTH_OR_EXPR:
9655     case RSHIFT_EXPR:
9656     case LSHIFT_EXPR:
9657     case RROTATE_EXPR:
9658     case LROTATE_EXPR:
9659     case EQ_EXPR:
9660     case NE_EXPR:
9661     case MAX_EXPR:
9662     case MIN_EXPR:
9663     case LE_EXPR:
9664     case GE_EXPR:
9665     case LT_EXPR:
9666     case GT_EXPR:
9667     case COMPOUND_EXPR:
9668     case DOTSTAR_EXPR:
9669     case MEMBER_REF:
9670     case PREDECREMENT_EXPR:
9671     case PREINCREMENT_EXPR:
9672     case POSTDECREMENT_EXPR:
9673     case POSTINCREMENT_EXPR:
9674       return build_nt
9675         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9676          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9677
9678     case SCOPE_REF:
9679       return build_qualified_name (/*type=*/NULL_TREE,
9680                                    tsubst_copy (TREE_OPERAND (t, 0),
9681                                                 args, complain, in_decl),
9682                                    tsubst_copy (TREE_OPERAND (t, 1),
9683                                                 args, complain, in_decl),
9684                                    QUALIFIED_NAME_IS_TEMPLATE (t));
9685
9686     case ARRAY_REF:
9687       return build_nt
9688         (ARRAY_REF,
9689          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9690          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9691          NULL_TREE, NULL_TREE);
9692
9693     case CALL_EXPR:
9694       {
9695         int n = VL_EXP_OPERAND_LENGTH (t);
9696         tree result = build_vl_exp (CALL_EXPR, n);
9697         int i;
9698         for (i = 0; i < n; i++)
9699           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9700                                              complain, in_decl);
9701         return result;
9702       }
9703
9704     case COND_EXPR:
9705     case MODOP_EXPR:
9706     case PSEUDO_DTOR_EXPR:
9707       {
9708         r = build_nt
9709           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9710            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9711            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9712         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9713         return r;
9714       }
9715
9716     case NEW_EXPR:
9717       {
9718         r = build_nt
9719         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9720          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9721          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9722         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9723         return r;
9724       }
9725
9726     case DELETE_EXPR:
9727       {
9728         r = build_nt
9729         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9730          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9731         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9732         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9733         return r;
9734       }
9735
9736     case TEMPLATE_ID_EXPR:
9737       {
9738         /* Substituted template arguments */
9739         tree fn = TREE_OPERAND (t, 0);
9740         tree targs = TREE_OPERAND (t, 1);
9741
9742         fn = tsubst_copy (fn, args, complain, in_decl);
9743         if (targs)
9744           targs = tsubst_template_args (targs, args, complain, in_decl);
9745
9746         return lookup_template_function (fn, targs);
9747       }
9748
9749     case TREE_LIST:
9750       {
9751         tree purpose, value, chain;
9752
9753         if (t == void_list_node)
9754           return t;
9755
9756         purpose = TREE_PURPOSE (t);
9757         if (purpose)
9758           purpose = tsubst_copy (purpose, args, complain, in_decl);
9759         value = TREE_VALUE (t);
9760         if (value)
9761           value = tsubst_copy (value, args, complain, in_decl);
9762         chain = TREE_CHAIN (t);
9763         if (chain && chain != void_type_node)
9764           chain = tsubst_copy (chain, args, complain, in_decl);
9765         if (purpose == TREE_PURPOSE (t)
9766             && value == TREE_VALUE (t)
9767             && chain == TREE_CHAIN (t))
9768           return t;
9769         return tree_cons (purpose, value, chain);
9770       }
9771
9772     case RECORD_TYPE:
9773     case UNION_TYPE:
9774     case ENUMERAL_TYPE:
9775     case INTEGER_TYPE:
9776     case TEMPLATE_TYPE_PARM:
9777     case TEMPLATE_TEMPLATE_PARM:
9778     case BOUND_TEMPLATE_TEMPLATE_PARM:
9779     case TEMPLATE_PARM_INDEX:
9780     case POINTER_TYPE:
9781     case REFERENCE_TYPE:
9782     case OFFSET_TYPE:
9783     case FUNCTION_TYPE:
9784     case METHOD_TYPE:
9785     case ARRAY_TYPE:
9786     case TYPENAME_TYPE:
9787     case UNBOUND_CLASS_TEMPLATE:
9788     case TYPEOF_TYPE:
9789     case DECLTYPE_TYPE:
9790     case TYPE_DECL:
9791       return tsubst (t, args, complain, in_decl);
9792
9793     case IDENTIFIER_NODE:
9794       if (IDENTIFIER_TYPENAME_P (t))
9795         {
9796           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9797           return mangle_conv_op_name_for_type (new_type);
9798         }
9799       else
9800         return t;
9801
9802     case CONSTRUCTOR:
9803       /* This is handled by tsubst_copy_and_build.  */
9804       gcc_unreachable ();
9805
9806     case VA_ARG_EXPR:
9807       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9808                                           in_decl),
9809                              tsubst (TREE_TYPE (t), args, complain, in_decl));
9810
9811     case CLEANUP_POINT_EXPR:
9812       /* We shouldn't have built any of these during initial template
9813          generation.  Instead, they should be built during instantiation
9814          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
9815       gcc_unreachable ();
9816
9817     case OFFSET_REF:
9818       mark_used (TREE_OPERAND (t, 1));
9819       return t;
9820
9821     case EXPR_PACK_EXPANSION:
9822       error ("invalid use of pack expansion expression");
9823       return error_mark_node;
9824
9825     case NONTYPE_ARGUMENT_PACK:
9826       error ("use %<...%> to expand argument pack");
9827       return error_mark_node;
9828
9829     default:
9830       return t;
9831     }
9832 }
9833
9834 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
9835
9836 static tree
9837 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9838                     tree in_decl)
9839 {
9840   tree new_clauses = NULL, nc, oc;
9841
9842   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9843     {
9844       nc = copy_node (oc);
9845       OMP_CLAUSE_CHAIN (nc) = new_clauses;
9846       new_clauses = nc;
9847
9848       switch (OMP_CLAUSE_CODE (nc))
9849         {
9850         case OMP_CLAUSE_PRIVATE:
9851         case OMP_CLAUSE_SHARED:
9852         case OMP_CLAUSE_FIRSTPRIVATE:
9853         case OMP_CLAUSE_LASTPRIVATE:
9854         case OMP_CLAUSE_REDUCTION:
9855         case OMP_CLAUSE_COPYIN:
9856         case OMP_CLAUSE_COPYPRIVATE:
9857         case OMP_CLAUSE_IF:
9858         case OMP_CLAUSE_NUM_THREADS:
9859         case OMP_CLAUSE_SCHEDULE:
9860           OMP_CLAUSE_OPERAND (nc, 0)
9861             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
9862                            in_decl, /*integral_constant_expression_p=*/false);
9863           break;
9864         case OMP_CLAUSE_NOWAIT:
9865         case OMP_CLAUSE_ORDERED:
9866         case OMP_CLAUSE_DEFAULT:
9867           break;
9868         default:
9869           gcc_unreachable ();
9870         }
9871     }
9872
9873   return finish_omp_clauses (nreverse (new_clauses));
9874 }
9875
9876 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
9877
9878 static tree
9879 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9880                           tree in_decl)
9881 {
9882 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9883
9884   tree purpose, value, chain;
9885
9886   if (t == NULL)
9887     return t;
9888
9889   if (TREE_CODE (t) != TREE_LIST)
9890     return tsubst_copy_and_build (t, args, complain, in_decl,
9891                                   /*function_p=*/false,
9892                                   /*integral_constant_expression_p=*/false);
9893
9894   if (t == void_list_node)
9895     return t;
9896
9897   purpose = TREE_PURPOSE (t);
9898   if (purpose)
9899     purpose = RECUR (purpose);
9900   value = TREE_VALUE (t);
9901   if (value)
9902     value = RECUR (value);
9903   chain = TREE_CHAIN (t);
9904   if (chain && chain != void_type_node)
9905     chain = RECUR (chain);
9906   return tree_cons (purpose, value, chain);
9907 #undef RECUR
9908 }
9909
9910 /* Like tsubst_copy for expressions, etc. but also does semantic
9911    processing.  */
9912
9913 static tree
9914 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9915              bool integral_constant_expression_p)
9916 {
9917 #define RECUR(NODE)                             \
9918   tsubst_expr ((NODE), args, complain, in_decl, \
9919                integral_constant_expression_p)
9920
9921   tree stmt, tmp;
9922
9923   if (t == NULL_TREE || t == error_mark_node)
9924     return t;
9925
9926   if (EXPR_HAS_LOCATION (t))
9927     input_location = EXPR_LOCATION (t);
9928   if (STATEMENT_CODE_P (TREE_CODE (t)))
9929     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9930
9931   switch (TREE_CODE (t))
9932     {
9933     case STATEMENT_LIST:
9934       {
9935         tree_stmt_iterator i;
9936         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9937           RECUR (tsi_stmt (i));
9938         break;
9939       }
9940
9941     case CTOR_INITIALIZER:
9942       finish_mem_initializers (tsubst_initializer_list
9943                                (TREE_OPERAND (t, 0), args));
9944       break;
9945
9946     case RETURN_EXPR:
9947       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9948       break;
9949
9950     case EXPR_STMT:
9951       tmp = RECUR (EXPR_STMT_EXPR (t));
9952       if (EXPR_STMT_STMT_EXPR_RESULT (t))
9953         finish_stmt_expr_expr (tmp, cur_stmt_expr);
9954       else
9955         finish_expr_stmt (tmp);
9956       break;
9957
9958     case USING_STMT:
9959       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9960       break;
9961
9962     case DECL_EXPR:
9963       {
9964         tree decl;
9965         tree init;
9966
9967         decl = DECL_EXPR_DECL (t);
9968         if (TREE_CODE (decl) == LABEL_DECL)
9969           finish_label_decl (DECL_NAME (decl));
9970         else if (TREE_CODE (decl) == USING_DECL)
9971           {
9972             tree scope = USING_DECL_SCOPE (decl);
9973             tree name = DECL_NAME (decl);
9974             tree decl;
9975
9976             scope = RECUR (scope);
9977             decl = lookup_qualified_name (scope, name,
9978                                           /*is_type_p=*/false,
9979                                           /*complain=*/false);
9980             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9981               qualified_name_lookup_error (scope, name, decl);
9982             else
9983               do_local_using_decl (decl, scope, name);
9984           }
9985         else
9986           {
9987             init = DECL_INITIAL (decl);
9988             decl = tsubst (decl, args, complain, in_decl);
9989             if (decl != error_mark_node)
9990               {
9991                 /* By marking the declaration as instantiated, we avoid
9992                    trying to instantiate it.  Since instantiate_decl can't
9993                    handle local variables, and since we've already done
9994                    all that needs to be done, that's the right thing to
9995                    do.  */
9996                 if (TREE_CODE (decl) == VAR_DECL)
9997                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
9998                 if (TREE_CODE (decl) == VAR_DECL
9999                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10000                   /* Anonymous aggregates are a special case.  */
10001                   finish_anon_union (decl);
10002                 else
10003                   {
10004                     maybe_push_decl (decl);
10005                     if (TREE_CODE (decl) == VAR_DECL
10006                         && DECL_PRETTY_FUNCTION_P (decl))
10007                       {
10008                         /* For __PRETTY_FUNCTION__ we have to adjust the
10009                            initializer.  */
10010                         const char *const name
10011                           = cxx_printable_name (current_function_decl, 2);
10012                         init = cp_fname_init (name, &TREE_TYPE (decl));
10013                       }
10014                     else
10015                       {
10016                         tree t = RECUR (init);
10017
10018                         if (init && !t)
10019                           /* If we had an initializer but it
10020                              instantiated to nothing,
10021                              value-initialize the object.  This will
10022                              only occur when the initializer was a
10023                              pack expansion where the parameter packs
10024                              used in that expansion were of length
10025                              zero.  */
10026                           init = build_default_init (TREE_TYPE (decl),
10027                                                      NULL_TREE);
10028                         else
10029                           init = t;
10030                       }
10031
10032                     finish_decl (decl, init, NULL_TREE);
10033                   }
10034               }
10035           }
10036
10037         /* A DECL_EXPR can also be used as an expression, in the condition
10038            clause of an if/for/while construct.  */
10039         return decl;
10040       }
10041
10042     case FOR_STMT:
10043       stmt = begin_for_stmt ();
10044                           RECUR (FOR_INIT_STMT (t));
10045       finish_for_init_stmt (stmt);
10046       tmp = RECUR (FOR_COND (t));
10047       finish_for_cond (tmp, stmt);
10048       tmp = RECUR (FOR_EXPR (t));
10049       finish_for_expr (tmp, stmt);
10050       RECUR (FOR_BODY (t));
10051       finish_for_stmt (stmt);
10052       break;
10053
10054     case WHILE_STMT:
10055       stmt = begin_while_stmt ();
10056       tmp = RECUR (WHILE_COND (t));
10057       finish_while_stmt_cond (tmp, stmt);
10058       RECUR (WHILE_BODY (t));
10059       finish_while_stmt (stmt);
10060       break;
10061
10062     case DO_STMT:
10063       stmt = begin_do_stmt ();
10064       RECUR (DO_BODY (t));
10065       finish_do_body (stmt);
10066       tmp = RECUR (DO_COND (t));
10067       finish_do_stmt (tmp, stmt);
10068       break;
10069
10070     case IF_STMT:
10071       stmt = begin_if_stmt ();
10072       tmp = RECUR (IF_COND (t));
10073       finish_if_stmt_cond (tmp, stmt);
10074       RECUR (THEN_CLAUSE (t));
10075       finish_then_clause (stmt);
10076
10077       if (ELSE_CLAUSE (t))
10078         {
10079           begin_else_clause (stmt);
10080           RECUR (ELSE_CLAUSE (t));
10081           finish_else_clause (stmt);
10082         }
10083
10084       finish_if_stmt (stmt);
10085       break;
10086
10087     case BIND_EXPR:
10088       if (BIND_EXPR_BODY_BLOCK (t))
10089         stmt = begin_function_body ();
10090       else
10091         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10092                                     ? BCS_TRY_BLOCK : 0);
10093
10094       RECUR (BIND_EXPR_BODY (t));
10095
10096       if (BIND_EXPR_BODY_BLOCK (t))
10097         finish_function_body (stmt);
10098       else
10099         finish_compound_stmt (stmt);
10100       break;
10101
10102     case BREAK_STMT:
10103       finish_break_stmt ();
10104       break;
10105
10106     case CONTINUE_STMT:
10107       finish_continue_stmt ();
10108       break;
10109
10110     case SWITCH_STMT:
10111       stmt = begin_switch_stmt ();
10112       tmp = RECUR (SWITCH_STMT_COND (t));
10113       finish_switch_cond (tmp, stmt);
10114       RECUR (SWITCH_STMT_BODY (t));
10115       finish_switch_stmt (stmt);
10116       break;
10117
10118     case CASE_LABEL_EXPR:
10119       finish_case_label (RECUR (CASE_LOW (t)),
10120                          RECUR (CASE_HIGH (t)));
10121       break;
10122
10123     case LABEL_EXPR:
10124       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10125       break;
10126
10127     case GOTO_EXPR:
10128       tmp = GOTO_DESTINATION (t);
10129       if (TREE_CODE (tmp) != LABEL_DECL)
10130         /* Computed goto's must be tsubst'd into.  On the other hand,
10131            non-computed gotos must not be; the identifier in question
10132            will have no binding.  */
10133         tmp = RECUR (tmp);
10134       else
10135         tmp = DECL_NAME (tmp);
10136       finish_goto_stmt (tmp);
10137       break;
10138
10139     case ASM_EXPR:
10140       tmp = finish_asm_stmt
10141         (ASM_VOLATILE_P (t),
10142          RECUR (ASM_STRING (t)),
10143          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10144          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10145          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10146       {
10147         tree asm_expr = tmp;
10148         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10149           asm_expr = TREE_OPERAND (asm_expr, 0);
10150         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10151       }
10152       break;
10153
10154     case TRY_BLOCK:
10155       if (CLEANUP_P (t))
10156         {
10157           stmt = begin_try_block ();
10158           RECUR (TRY_STMTS (t));
10159           finish_cleanup_try_block (stmt);
10160           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10161         }
10162       else
10163         {
10164           tree compound_stmt = NULL_TREE;
10165
10166           if (FN_TRY_BLOCK_P (t))
10167             stmt = begin_function_try_block (&compound_stmt);
10168           else
10169             stmt = begin_try_block ();
10170
10171           RECUR (TRY_STMTS (t));
10172
10173           if (FN_TRY_BLOCK_P (t))
10174             finish_function_try_block (stmt);
10175           else
10176             finish_try_block (stmt);
10177
10178           RECUR (TRY_HANDLERS (t));
10179           if (FN_TRY_BLOCK_P (t))
10180             finish_function_handler_sequence (stmt, compound_stmt);
10181           else
10182             finish_handler_sequence (stmt);
10183         }
10184       break;
10185
10186     case HANDLER:
10187       {
10188         tree decl = HANDLER_PARMS (t);
10189
10190         if (decl)
10191           {
10192             decl = tsubst (decl, args, complain, in_decl);
10193             /* Prevent instantiate_decl from trying to instantiate
10194                this variable.  We've already done all that needs to be
10195                done.  */
10196             if (decl != error_mark_node)
10197               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10198           }
10199         stmt = begin_handler ();
10200         finish_handler_parms (decl, stmt);
10201         RECUR (HANDLER_BODY (t));
10202         finish_handler (stmt);
10203       }
10204       break;
10205
10206     case TAG_DEFN:
10207       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10208       break;
10209
10210     case STATIC_ASSERT:
10211       {
10212         tree condition = 
10213           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10214                        args,
10215                        complain, in_decl,
10216                        /*integral_constant_expression_p=*/true);
10217         finish_static_assert (condition,
10218                               STATIC_ASSERT_MESSAGE (t),
10219                               STATIC_ASSERT_SOURCE_LOCATION (t),
10220                               /*member_p=*/false);
10221       }
10222       break;
10223
10224     case OMP_PARALLEL:
10225       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10226                                 args, complain, in_decl);
10227       stmt = begin_omp_parallel ();
10228       RECUR (OMP_PARALLEL_BODY (t));
10229       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10230         = OMP_PARALLEL_COMBINED (t);
10231       break;
10232
10233     case OMP_FOR:
10234       {
10235         tree clauses, decl, init, cond, incr, body, pre_body;
10236
10237         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10238                                       args, complain, in_decl);
10239         init = OMP_FOR_INIT (t);
10240         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10241         decl = RECUR (TREE_OPERAND (init, 0));
10242         init = RECUR (TREE_OPERAND (init, 1));
10243         cond = RECUR (OMP_FOR_COND (t));
10244         incr = RECUR (OMP_FOR_INCR (t));
10245
10246         stmt = begin_omp_structured_block ();
10247
10248         pre_body = push_stmt_list ();
10249         RECUR (OMP_FOR_PRE_BODY (t));
10250         pre_body = pop_stmt_list (pre_body);
10251
10252         body = push_stmt_list ();
10253         RECUR (OMP_FOR_BODY (t));
10254         body = pop_stmt_list (body);
10255
10256         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10257                             pre_body);
10258         if (t)
10259           OMP_FOR_CLAUSES (t) = clauses;
10260
10261         add_stmt (finish_omp_structured_block (stmt));
10262       }
10263       break;
10264
10265     case OMP_SECTIONS:
10266     case OMP_SINGLE:
10267       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10268       stmt = push_stmt_list ();
10269       RECUR (OMP_BODY (t));
10270       stmt = pop_stmt_list (stmt);
10271
10272       t = copy_node (t);
10273       OMP_BODY (t) = stmt;
10274       OMP_CLAUSES (t) = tmp;
10275       add_stmt (t);
10276       break;
10277
10278     case OMP_SECTION:
10279     case OMP_CRITICAL:
10280     case OMP_MASTER:
10281     case OMP_ORDERED:
10282       stmt = push_stmt_list ();
10283       RECUR (OMP_BODY (t));
10284       stmt = pop_stmt_list (stmt);
10285
10286       t = copy_node (t);
10287       OMP_BODY (t) = stmt;
10288       add_stmt (t);
10289       break;
10290
10291     case OMP_ATOMIC:
10292       if (OMP_ATOMIC_DEPENDENT_P (t))
10293         {
10294           tree op1 = TREE_OPERAND (t, 1);
10295           tree lhs = RECUR (TREE_OPERAND (op1, 0));
10296           tree rhs = RECUR (TREE_OPERAND (op1, 1));
10297           finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10298         }
10299       break;
10300
10301     case EXPR_PACK_EXPANSION:
10302       error ("invalid use of pack expansion expression");
10303       return error_mark_node;
10304
10305     case NONTYPE_ARGUMENT_PACK:
10306       error ("use %<...%> to expand argument pack");
10307       return error_mark_node;
10308
10309     default:
10310       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10311
10312       return tsubst_copy_and_build (t, args, complain, in_decl,
10313                                     /*function_p=*/false,
10314                                     integral_constant_expression_p);
10315     }
10316
10317   return NULL_TREE;
10318 #undef RECUR
10319 }
10320
10321 /* T is a postfix-expression that is not being used in a function
10322    call.  Return the substituted version of T.  */
10323
10324 static tree
10325 tsubst_non_call_postfix_expression (tree t, tree args,
10326                                     tsubst_flags_t complain,
10327                                     tree in_decl)
10328 {
10329   if (TREE_CODE (t) == SCOPE_REF)
10330     t = tsubst_qualified_id (t, args, complain, in_decl,
10331                              /*done=*/false, /*address_p=*/false);
10332   else
10333     t = tsubst_copy_and_build (t, args, complain, in_decl,
10334                                /*function_p=*/false,
10335                                /*integral_constant_expression_p=*/false);
10336
10337   return t;
10338 }
10339
10340 /* Like tsubst but deals with expressions and performs semantic
10341    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10342
10343 tree
10344 tsubst_copy_and_build (tree t,
10345                        tree args,
10346                        tsubst_flags_t complain,
10347                        tree in_decl,
10348                        bool function_p,
10349                        bool integral_constant_expression_p)
10350 {
10351 #define RECUR(NODE)                                             \
10352   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10353                          /*function_p=*/false,                  \
10354                          integral_constant_expression_p)
10355
10356   tree op1;
10357
10358   if (t == NULL_TREE || t == error_mark_node)
10359     return t;
10360
10361   switch (TREE_CODE (t))
10362     {
10363     case USING_DECL:
10364       t = DECL_NAME (t);
10365       /* Fall through.  */
10366     case IDENTIFIER_NODE:
10367       {
10368         tree decl;
10369         cp_id_kind idk;
10370         bool non_integral_constant_expression_p;
10371         const char *error_msg;
10372
10373         if (IDENTIFIER_TYPENAME_P (t))
10374           {
10375             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10376             t = mangle_conv_op_name_for_type (new_type);
10377           }
10378
10379         /* Look up the name.  */
10380         decl = lookup_name (t);
10381
10382         /* By convention, expressions use ERROR_MARK_NODE to indicate
10383            failure, not NULL_TREE.  */
10384         if (decl == NULL_TREE)
10385           decl = error_mark_node;
10386
10387         decl = finish_id_expression (t, decl, NULL_TREE,
10388                                      &idk,
10389                                      integral_constant_expression_p,
10390                                      /*allow_non_integral_constant_expression_p=*/false,
10391                                      &non_integral_constant_expression_p,
10392                                      /*template_p=*/false,
10393                                      /*done=*/true,
10394                                      /*address_p=*/false,
10395                                      /*template_arg_p=*/false,
10396                                      &error_msg);
10397         if (error_msg)
10398           error (error_msg);
10399         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10400           decl = unqualified_name_lookup_error (decl);
10401         return decl;
10402       }
10403
10404     case TEMPLATE_ID_EXPR:
10405       {
10406         tree object;
10407         tree template = RECUR (TREE_OPERAND (t, 0));
10408         tree targs = TREE_OPERAND (t, 1);
10409
10410         if (targs)
10411           targs = tsubst_template_args (targs, args, complain, in_decl);
10412
10413         if (TREE_CODE (template) == COMPONENT_REF)
10414           {
10415             object = TREE_OPERAND (template, 0);
10416             template = TREE_OPERAND (template, 1);
10417           }
10418         else
10419           object = NULL_TREE;
10420         template = lookup_template_function (template, targs);
10421
10422         if (object)
10423           return build3 (COMPONENT_REF, TREE_TYPE (template),
10424                          object, template, NULL_TREE);
10425         else
10426           return baselink_for_fns (template);
10427       }
10428
10429     case INDIRECT_REF:
10430       {
10431         tree r = RECUR (TREE_OPERAND (t, 0));
10432
10433         if (REFERENCE_REF_P (t))
10434           {
10435             /* A type conversion to reference type will be enclosed in
10436                such an indirect ref, but the substitution of the cast
10437                will have also added such an indirect ref.  */
10438             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10439               r = convert_from_reference (r);
10440           }
10441         else
10442           r = build_x_indirect_ref (r, "unary *");
10443         return r;
10444       }
10445
10446     case NOP_EXPR:
10447       return build_nop
10448         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10449          RECUR (TREE_OPERAND (t, 0)));
10450
10451     case CAST_EXPR:
10452     case REINTERPRET_CAST_EXPR:
10453     case CONST_CAST_EXPR:
10454     case DYNAMIC_CAST_EXPR:
10455     case STATIC_CAST_EXPR:
10456       {
10457         tree type;
10458         tree op;
10459
10460         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10461         if (integral_constant_expression_p
10462             && !cast_valid_in_integral_constant_expression_p (type))
10463           {
10464             error ("a cast to a type other than an integral or "
10465                    "enumeration type cannot appear in a constant-expression");
10466             return error_mark_node; 
10467           }
10468
10469         op = RECUR (TREE_OPERAND (t, 0));
10470
10471         switch (TREE_CODE (t))
10472           {
10473           case CAST_EXPR:
10474             return build_functional_cast (type, op);
10475           case REINTERPRET_CAST_EXPR:
10476             return build_reinterpret_cast (type, op);
10477           case CONST_CAST_EXPR:
10478             return build_const_cast (type, op);
10479           case DYNAMIC_CAST_EXPR:
10480             return build_dynamic_cast (type, op);
10481           case STATIC_CAST_EXPR:
10482             return build_static_cast (type, op);
10483           default:
10484             gcc_unreachable ();
10485           }
10486       }
10487
10488     case POSTDECREMENT_EXPR:
10489     case POSTINCREMENT_EXPR:
10490       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10491                                                 args, complain, in_decl);
10492       return build_x_unary_op (TREE_CODE (t), op1);
10493
10494     case PREDECREMENT_EXPR:
10495     case PREINCREMENT_EXPR:
10496     case NEGATE_EXPR:
10497     case BIT_NOT_EXPR:
10498     case ABS_EXPR:
10499     case TRUTH_NOT_EXPR:
10500     case UNARY_PLUS_EXPR:  /* Unary + */
10501     case REALPART_EXPR:
10502     case IMAGPART_EXPR:
10503       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10504
10505     case ADDR_EXPR:
10506       op1 = TREE_OPERAND (t, 0);
10507       if (TREE_CODE (op1) == SCOPE_REF)
10508         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10509                                    /*done=*/true, /*address_p=*/true);
10510       else
10511         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10512                                                   in_decl);
10513       if (TREE_CODE (op1) == LABEL_DECL)
10514         return finish_label_address_expr (DECL_NAME (op1));
10515       return build_x_unary_op (ADDR_EXPR, op1);
10516
10517     case PLUS_EXPR:
10518     case MINUS_EXPR:
10519     case MULT_EXPR:
10520     case TRUNC_DIV_EXPR:
10521     case CEIL_DIV_EXPR:
10522     case FLOOR_DIV_EXPR:
10523     case ROUND_DIV_EXPR:
10524     case EXACT_DIV_EXPR:
10525     case BIT_AND_EXPR:
10526     case BIT_IOR_EXPR:
10527     case BIT_XOR_EXPR:
10528     case TRUNC_MOD_EXPR:
10529     case FLOOR_MOD_EXPR:
10530     case TRUTH_ANDIF_EXPR:
10531     case TRUTH_ORIF_EXPR:
10532     case TRUTH_AND_EXPR:
10533     case TRUTH_OR_EXPR:
10534     case RSHIFT_EXPR:
10535     case LSHIFT_EXPR:
10536     case RROTATE_EXPR:
10537     case LROTATE_EXPR:
10538     case EQ_EXPR:
10539     case NE_EXPR:
10540     case MAX_EXPR:
10541     case MIN_EXPR:
10542     case LE_EXPR:
10543     case GE_EXPR:
10544     case LT_EXPR:
10545     case GT_EXPR:
10546     case MEMBER_REF:
10547     case DOTSTAR_EXPR:
10548       return build_x_binary_op
10549         (TREE_CODE (t),
10550          RECUR (TREE_OPERAND (t, 0)),
10551          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10552           ? ERROR_MARK
10553           : TREE_CODE (TREE_OPERAND (t, 0))),
10554          RECUR (TREE_OPERAND (t, 1)),
10555          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10556           ? ERROR_MARK
10557           : TREE_CODE (TREE_OPERAND (t, 1))),
10558          /*overloaded_p=*/NULL);
10559
10560     case SCOPE_REF:
10561       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10562                                   /*address_p=*/false);
10563     case ARRAY_REF:
10564       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10565                                                 args, complain, in_decl);
10566       return build_x_binary_op (ARRAY_REF, op1,
10567                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10568                                  ? ERROR_MARK
10569                                  : TREE_CODE (TREE_OPERAND (t, 0))),
10570                                 RECUR (TREE_OPERAND (t, 1)),
10571                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10572                                  ? ERROR_MARK
10573                                  : TREE_CODE (TREE_OPERAND (t, 1))),
10574                                 /*overloaded_p=*/NULL);
10575
10576     case SIZEOF_EXPR:
10577       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10578         {
10579           /* We only want to compute the number of arguments.  */
10580           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10581                                                 complain, in_decl);
10582           if (expanded == error_mark_node)
10583             return error_mark_node;
10584           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10585         }
10586       /* Fall through */
10587       
10588     case ALIGNOF_EXPR:
10589       op1 = TREE_OPERAND (t, 0);
10590       if (!args)
10591         {
10592           /* When there are no ARGS, we are trying to evaluate a
10593              non-dependent expression from the parser.  Trying to do
10594              the substitutions may not work.  */
10595           if (!TYPE_P (op1))
10596             op1 = TREE_TYPE (op1);
10597         }
10598       else
10599         {
10600           ++skip_evaluation;
10601           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10602                                        /*function_p=*/false,
10603                                        /*integral_constant_expression_p=*/false);
10604           --skip_evaluation;
10605         }
10606       if (TYPE_P (op1))
10607         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10608       else
10609         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10610
10611     case MODOP_EXPR:
10612       {
10613         tree r = build_x_modify_expr
10614           (RECUR (TREE_OPERAND (t, 0)),
10615            TREE_CODE (TREE_OPERAND (t, 1)),
10616            RECUR (TREE_OPERAND (t, 2)));
10617         /* TREE_NO_WARNING must be set if either the expression was
10618            parenthesized or it uses an operator such as >>= rather
10619            than plain assignment.  In the former case, it was already
10620            set and must be copied.  In the latter case,
10621            build_x_modify_expr sets it and it must not be reset
10622            here.  */
10623         if (TREE_NO_WARNING (t))
10624           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10625         return r;
10626       }
10627
10628     case ARROW_EXPR:
10629       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10630                                                 args, complain, in_decl);
10631       /* Remember that there was a reference to this entity.  */
10632       if (DECL_P (op1))
10633         mark_used (op1);
10634       return build_x_arrow (op1);
10635
10636     case NEW_EXPR:
10637       {
10638         tree init = RECUR (TREE_OPERAND (t, 3));
10639
10640         if (TREE_OPERAND (t, 3) && !init)
10641           /* If there was an initializer in the the original tree, but
10642              it instantiated to an empty list, then we should pass on
10643              VOID_ZERO_NODE to tell build_new that it was an empty
10644              initializer () rather than no initializer.  This can only
10645              happen when the initializer is a pack expansion whose
10646              parameter packs are of length zero.  */
10647           init = void_zero_node;
10648
10649         return build_new
10650           (RECUR (TREE_OPERAND (t, 0)),
10651            RECUR (TREE_OPERAND (t, 1)),
10652            RECUR (TREE_OPERAND (t, 2)),
10653            init,
10654            NEW_EXPR_USE_GLOBAL (t));
10655       }
10656
10657     case DELETE_EXPR:
10658      return delete_sanity
10659        (RECUR (TREE_OPERAND (t, 0)),
10660         RECUR (TREE_OPERAND (t, 1)),
10661         DELETE_EXPR_USE_VEC (t),
10662         DELETE_EXPR_USE_GLOBAL (t));
10663
10664     case COMPOUND_EXPR:
10665       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10666                                     RECUR (TREE_OPERAND (t, 1)));
10667
10668     case CALL_EXPR:
10669       {
10670         tree function;
10671         tree call_args;
10672         bool qualified_p;
10673         bool koenig_p;
10674
10675         function = CALL_EXPR_FN (t);
10676         /* When we parsed the expression,  we determined whether or
10677            not Koenig lookup should be performed.  */
10678         koenig_p = KOENIG_LOOKUP_P (t);
10679         if (TREE_CODE (function) == SCOPE_REF)
10680           {
10681             qualified_p = true;
10682             function = tsubst_qualified_id (function, args, complain, in_decl,
10683                                             /*done=*/false,
10684                                             /*address_p=*/false);
10685           }
10686         else
10687           {
10688             if (TREE_CODE (function) == COMPONENT_REF)
10689               {
10690                 tree op = TREE_OPERAND (function, 1);
10691
10692                 qualified_p = (TREE_CODE (op) == SCOPE_REF
10693                                || (BASELINK_P (op)
10694                                    && BASELINK_QUALIFIED_P (op)));
10695               }
10696             else
10697               qualified_p = false;
10698
10699             function = tsubst_copy_and_build (function, args, complain,
10700                                               in_decl,
10701                                               !qualified_p,
10702                                               integral_constant_expression_p);
10703
10704             if (BASELINK_P (function))
10705               qualified_p = true;
10706           }
10707
10708         /* FIXME:  Rewrite this so as not to construct an arglist.  */
10709         call_args = RECUR (CALL_EXPR_ARGS (t));
10710
10711         /* We do not perform argument-dependent lookup if normal
10712            lookup finds a non-function, in accordance with the
10713            expected resolution of DR 218.  */
10714         if (koenig_p
10715             && ((is_overloaded_fn (function)
10716                  /* If lookup found a member function, the Koenig lookup is
10717                     not appropriate, even if an unqualified-name was used
10718                     to denote the function.  */
10719                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10720                 || TREE_CODE (function) == IDENTIFIER_NODE))
10721           function = perform_koenig_lookup (function, call_args);
10722
10723         if (TREE_CODE (function) == IDENTIFIER_NODE)
10724           {
10725             unqualified_name_lookup_error (function);
10726             return error_mark_node;
10727           }
10728
10729         /* Remember that there was a reference to this entity.  */
10730         if (DECL_P (function))
10731           mark_used (function);
10732
10733         if (TREE_CODE (function) == OFFSET_REF)
10734           return build_offset_ref_call_from_tree (function, call_args);
10735         if (TREE_CODE (function) == COMPONENT_REF)
10736           {
10737             if (!BASELINK_P (TREE_OPERAND (function, 1)))
10738               return finish_call_expr (function, call_args,
10739                                        /*disallow_virtual=*/false,
10740                                        /*koenig_p=*/false);
10741             else
10742               return (build_new_method_call
10743                       (TREE_OPERAND (function, 0),
10744                        TREE_OPERAND (function, 1),
10745                        call_args, NULL_TREE,
10746                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10747                        /*fn_p=*/NULL));
10748           }
10749         return finish_call_expr (function, call_args,
10750                                  /*disallow_virtual=*/qualified_p,
10751                                  koenig_p);
10752       }
10753
10754     case COND_EXPR:
10755       return build_x_conditional_expr
10756         (RECUR (TREE_OPERAND (t, 0)),
10757          RECUR (TREE_OPERAND (t, 1)),
10758          RECUR (TREE_OPERAND (t, 2)));
10759
10760     case PSEUDO_DTOR_EXPR:
10761       return finish_pseudo_destructor_expr
10762         (RECUR (TREE_OPERAND (t, 0)),
10763          RECUR (TREE_OPERAND (t, 1)),
10764          RECUR (TREE_OPERAND (t, 2)));
10765
10766     case TREE_LIST:
10767       {
10768         tree purpose, value, chain;
10769
10770         if (t == void_list_node)
10771           return t;
10772
10773         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10774             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10775           {
10776             /* We have pack expansions, so expand those and
10777                create a new list out of it.  */
10778             tree purposevec = NULL_TREE;
10779             tree valuevec = NULL_TREE;
10780             tree chain;
10781             int i, len = -1;
10782
10783             /* Expand the argument expressions.  */
10784             if (TREE_PURPOSE (t))
10785               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10786                                                  complain, in_decl);
10787             if (TREE_VALUE (t))
10788               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10789                                                complain, in_decl);
10790
10791             /* Build the rest of the list.  */
10792             chain = TREE_CHAIN (t);
10793             if (chain && chain != void_type_node)
10794               chain = RECUR (chain);
10795
10796             /* Determine the number of arguments.  */
10797             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10798               {
10799                 len = TREE_VEC_LENGTH (purposevec);
10800                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10801               }
10802             else if (TREE_CODE (valuevec) == TREE_VEC)
10803               len = TREE_VEC_LENGTH (valuevec);
10804             else
10805               {
10806                 /* Since we only performed a partial substitution into
10807                    the argument pack, we only return a single list
10808                    node.  */
10809                 if (purposevec == TREE_PURPOSE (t)
10810                     && valuevec == TREE_VALUE (t)
10811                     && chain == TREE_CHAIN (t))
10812                   return t;
10813
10814                 return tree_cons (purposevec, valuevec, chain);
10815               }
10816             
10817             /* Convert the argument vectors into a TREE_LIST */
10818             i = len;
10819             while (i > 0)
10820               {
10821                 /* Grab the Ith values.  */
10822                 i--;
10823                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
10824                                      : NULL_TREE;
10825                 value 
10826                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
10827                              : NULL_TREE;
10828
10829                 /* Build the list (backwards).  */
10830                 chain = tree_cons (purpose, value, chain);
10831               }
10832
10833             return chain;
10834           }
10835
10836         purpose = TREE_PURPOSE (t);
10837         if (purpose)
10838           purpose = RECUR (purpose);
10839         value = TREE_VALUE (t);
10840         if (value)
10841           value = RECUR (value);
10842         chain = TREE_CHAIN (t);
10843         if (chain && chain != void_type_node)
10844           chain = RECUR (chain);
10845         if (purpose == TREE_PURPOSE (t)
10846             && value == TREE_VALUE (t)
10847             && chain == TREE_CHAIN (t))
10848           return t;
10849         return tree_cons (purpose, value, chain);
10850       }
10851
10852     case COMPONENT_REF:
10853       {
10854         tree object;
10855         tree object_type;
10856         tree member;
10857
10858         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10859                                                      args, complain, in_decl);
10860         /* Remember that there was a reference to this entity.  */
10861         if (DECL_P (object))
10862           mark_used (object);
10863         object_type = TREE_TYPE (object);
10864
10865         member = TREE_OPERAND (t, 1);
10866         if (BASELINK_P (member))
10867           member = tsubst_baselink (member,
10868                                     non_reference (TREE_TYPE (object)),
10869                                     args, complain, in_decl);
10870         else
10871           member = tsubst_copy (member, args, complain, in_decl);
10872         if (member == error_mark_node)
10873           return error_mark_node;
10874
10875         if (object_type && !CLASS_TYPE_P (object_type))
10876           {
10877             if (TREE_CODE (member) == BIT_NOT_EXPR)
10878               return finish_pseudo_destructor_expr (object,
10879                                                     NULL_TREE,
10880                                                     object_type);
10881             else if (TREE_CODE (member) == SCOPE_REF
10882                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10883               return finish_pseudo_destructor_expr (object,
10884                                                     object,
10885                                                     object_type);
10886           }
10887         else if (TREE_CODE (member) == SCOPE_REF
10888                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10889           {
10890             tree tmpl;
10891             tree args;
10892
10893             /* Lookup the template functions now that we know what the
10894                scope is.  */
10895             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10896             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10897             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10898                                             /*is_type_p=*/false,
10899                                             /*complain=*/false);
10900             if (BASELINK_P (member))
10901               {
10902                 BASELINK_FUNCTIONS (member)
10903                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10904                               args);
10905                 member = (adjust_result_of_qualified_name_lookup
10906                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
10907                            object_type));
10908               }
10909             else
10910               {
10911                 qualified_name_lookup_error (object_type, tmpl, member);
10912                 return error_mark_node;
10913               }
10914           }
10915         else if (TREE_CODE (member) == SCOPE_REF
10916                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10917                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10918           {
10919             if (complain & tf_error)
10920               {
10921                 if (TYPE_P (TREE_OPERAND (member, 0)))
10922                   error ("%qT is not a class or namespace",
10923                          TREE_OPERAND (member, 0));
10924                 else
10925                   error ("%qD is not a class or namespace",
10926                          TREE_OPERAND (member, 0));
10927               }
10928             return error_mark_node;
10929           }
10930         else if (TREE_CODE (member) == FIELD_DECL)
10931           return finish_non_static_data_member (member, object, NULL_TREE);
10932
10933         return finish_class_member_access_expr (object, member,
10934                                                 /*template_p=*/false);
10935       }
10936
10937     case THROW_EXPR:
10938       return build_throw
10939         (RECUR (TREE_OPERAND (t, 0)));
10940
10941     case CONSTRUCTOR:
10942       {
10943         VEC(constructor_elt,gc) *n;
10944         constructor_elt *ce;
10945         unsigned HOST_WIDE_INT idx;
10946         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10947         bool process_index_p;
10948         int newlen;
10949         bool need_copy_p = false;
10950
10951         if (type == error_mark_node)
10952           return error_mark_node;
10953
10954         /* digest_init will do the wrong thing if we let it.  */
10955         if (type && TYPE_PTRMEMFUNC_P (type))
10956           return t;
10957
10958         /* We do not want to process the index of aggregate
10959            initializers as they are identifier nodes which will be
10960            looked up by digest_init.  */
10961         process_index_p = !(type && IS_AGGR_TYPE (type));
10962
10963         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
10964         newlen = VEC_length (constructor_elt, n);
10965         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10966           {
10967             if (ce->index && process_index_p)
10968               ce->index = RECUR (ce->index);
10969
10970             if (PACK_EXPANSION_P (ce->value))
10971               {
10972                 /* Substitute into the pack expansion.  */
10973                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10974                                                   in_decl);
10975
10976                 if (ce->value == error_mark_node)
10977                   ;
10978                 else if (TREE_VEC_LENGTH (ce->value) == 1)
10979                   /* Just move the argument into place.  */
10980                   ce->value = TREE_VEC_ELT (ce->value, 0);
10981                 else
10982                   {
10983                     /* Update the length of the final CONSTRUCTOR
10984                        arguments vector, and note that we will need to
10985                        copy.*/
10986                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10987                     need_copy_p = true;
10988                   }
10989               }
10990             else
10991               ce->value = RECUR (ce->value);
10992           }
10993
10994         if (need_copy_p)
10995           {
10996             VEC(constructor_elt,gc) *old_n = n;
10997
10998             n = VEC_alloc (constructor_elt, gc, newlen);
10999             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11000                  idx++)
11001               {
11002                 if (TREE_CODE (ce->value) == TREE_VEC)
11003                   {
11004                     int i, len = TREE_VEC_LENGTH (ce->value);
11005                     for (i = 0; i < len; ++i)
11006                       CONSTRUCTOR_APPEND_ELT (n, 0,
11007                                               TREE_VEC_ELT (ce->value, i));
11008                   }
11009                 else
11010                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11011               }
11012           }
11013
11014         if (TREE_HAS_CONSTRUCTOR (t))
11015           return finish_compound_literal (type, n);
11016
11017         return build_constructor (NULL_TREE, n);
11018       }
11019
11020     case TYPEID_EXPR:
11021       {
11022         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11023         if (TYPE_P (operand_0))
11024           return get_typeid (operand_0);
11025         return build_typeid (operand_0);
11026       }
11027
11028     case VAR_DECL:
11029       if (!args)
11030         return t;
11031       /* Fall through */
11032
11033     case PARM_DECL:
11034       {
11035         tree r = tsubst_copy (t, args, complain, in_decl);
11036
11037         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11038           /* If the original type was a reference, we'll be wrapped in
11039              the appropriate INDIRECT_REF.  */
11040           r = convert_from_reference (r);
11041         return r;
11042       }
11043
11044     case VA_ARG_EXPR:
11045       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11046                              tsubst_copy (TREE_TYPE (t), args, complain,
11047                                           in_decl));
11048
11049     case OFFSETOF_EXPR:
11050       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11051
11052     case TRAIT_EXPR:
11053       {
11054         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11055                                   complain, in_decl);
11056
11057         tree type2 = TRAIT_EXPR_TYPE2 (t);
11058         if (type2)
11059           type2 = tsubst_copy (type2, args, complain, in_decl);
11060         
11061         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11062       }
11063
11064     case STMT_EXPR:
11065       {
11066         tree old_stmt_expr = cur_stmt_expr;
11067         tree stmt_expr = begin_stmt_expr ();
11068
11069         cur_stmt_expr = stmt_expr;
11070         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11071                      integral_constant_expression_p);
11072         stmt_expr = finish_stmt_expr (stmt_expr, false);
11073         cur_stmt_expr = old_stmt_expr;
11074
11075         return stmt_expr;
11076       }
11077
11078     case CONST_DECL:
11079       t = tsubst_copy (t, args, complain, in_decl);
11080       /* As in finish_id_expression, we resolve enumeration constants
11081          to their underlying values.  */
11082       if (TREE_CODE (t) == CONST_DECL)
11083         {
11084           used_types_insert (TREE_TYPE (t));
11085           return DECL_INITIAL (t);
11086         }
11087       return t;
11088
11089     default:
11090       /* Handle Objective-C++ constructs, if appropriate.  */
11091       {
11092         tree subst
11093           = objcp_tsubst_copy_and_build (t, args, complain,
11094                                          in_decl, /*function_p=*/false);
11095         if (subst)
11096           return subst;
11097       }
11098       return tsubst_copy (t, args, complain, in_decl);
11099     }
11100
11101 #undef RECUR
11102 }
11103
11104 /* Verify that the instantiated ARGS are valid. For type arguments,
11105    make sure that the type's linkage is ok. For non-type arguments,
11106    make sure they are constants if they are integral or enumerations.
11107    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11108
11109 static bool
11110 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11111 {
11112   int ix, len = DECL_NTPARMS (tmpl);
11113   bool result = false;
11114
11115   for (ix = 0; ix != len; ix++)
11116     {
11117       tree t = TREE_VEC_ELT (args, ix);
11118
11119       if (TYPE_P (t))
11120         {
11121           /* [basic.link]: A name with no linkage (notably, the name
11122              of a class or enumeration declared in a local scope)
11123              shall not be used to declare an entity with linkage.
11124              This implies that names with no linkage cannot be used as
11125              template arguments.  */
11126           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11127
11128           if (nt)
11129             {
11130               /* DR 488 makes use of a type with no linkage cause
11131                  type deduction to fail.  */
11132               if (complain & tf_error)
11133                 {
11134                   if (TYPE_ANONYMOUS_P (nt))
11135                     error ("%qT is/uses anonymous type", t);
11136                   else
11137                     error ("template argument for %qD uses local type %qT",
11138                            tmpl, t);
11139                 }
11140               result = true;
11141             }
11142           /* In order to avoid all sorts of complications, we do not
11143              allow variably-modified types as template arguments.  */
11144           else if (variably_modified_type_p (t, NULL_TREE))
11145             {
11146               if (complain & tf_error)
11147                 error ("%qT is a variably modified type", t);
11148               result = true;
11149             }
11150         }
11151       /* A non-type argument of integral or enumerated type must be a
11152          constant.  */
11153       else if (TREE_TYPE (t)
11154                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11155                && !TREE_CONSTANT (t))
11156         {
11157           if (complain & tf_error)
11158             error ("integral expression %qE is not constant", t);
11159           result = true;
11160         }
11161     }
11162   if (result && (complain & tf_error))
11163     error ("  trying to instantiate %qD", tmpl);
11164   return result;
11165 }
11166
11167 /* Instantiate the indicated variable or function template TMPL with
11168    the template arguments in TARG_PTR.  */
11169
11170 tree
11171 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11172 {
11173   tree fndecl;
11174   tree gen_tmpl;
11175   tree spec;
11176   HOST_WIDE_INT saved_processing_template_decl;
11177
11178   if (tmpl == error_mark_node)
11179     return error_mark_node;
11180
11181   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11182
11183   /* If this function is a clone, handle it specially.  */
11184   if (DECL_CLONED_FUNCTION_P (tmpl))
11185     {
11186       tree spec;
11187       tree clone;
11188
11189       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11190                                    complain);
11191       if (spec == error_mark_node)
11192         return error_mark_node;
11193
11194       /* Look for the clone.  */
11195       FOR_EACH_CLONE (clone, spec)
11196         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11197           return clone;
11198       /* We should always have found the clone by now.  */
11199       gcc_unreachable ();
11200       return NULL_TREE;
11201     }
11202
11203   /* Check to see if we already have this specialization.  */
11204   spec = retrieve_specialization (tmpl, targ_ptr,
11205                                   /*class_specializations_p=*/false);
11206   if (spec != NULL_TREE)
11207     return spec;
11208
11209   gen_tmpl = most_general_template (tmpl);
11210   if (tmpl != gen_tmpl)
11211     {
11212       /* The TMPL is a partial instantiation.  To get a full set of
11213          arguments we must add the arguments used to perform the
11214          partial instantiation.  */
11215       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11216                                               targ_ptr);
11217
11218       /* Check to see if we already have this specialization.  */
11219       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11220                                       /*class_specializations_p=*/false);
11221       if (spec != NULL_TREE)
11222         return spec;
11223     }
11224
11225   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11226                                complain))
11227     return error_mark_node;
11228
11229   /* We are building a FUNCTION_DECL, during which the access of its
11230      parameters and return types have to be checked.  However this
11231      FUNCTION_DECL which is the desired context for access checking
11232      is not built yet.  We solve this chicken-and-egg problem by
11233      deferring all checks until we have the FUNCTION_DECL.  */
11234   push_deferring_access_checks (dk_deferred);
11235
11236   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11237      (because, for example, we have encountered a non-dependent
11238      function call in the body of a template function and must now
11239      determine which of several overloaded functions will be called),
11240      within the instantiation itself we are not processing a
11241      template.  */  
11242   saved_processing_template_decl = processing_template_decl;
11243   processing_template_decl = 0;
11244   /* Substitute template parameters to obtain the specialization.  */
11245   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11246                    targ_ptr, complain, gen_tmpl);
11247   processing_template_decl = saved_processing_template_decl;
11248   if (fndecl == error_mark_node)
11249     return error_mark_node;
11250
11251   /* Now we know the specialization, compute access previously
11252      deferred.  */
11253   push_access_scope (fndecl);
11254   perform_deferred_access_checks ();
11255   pop_access_scope (fndecl);
11256   pop_deferring_access_checks ();
11257
11258   /* The DECL_TI_TEMPLATE should always be the immediate parent
11259      template, not the most general template.  */
11260   DECL_TI_TEMPLATE (fndecl) = tmpl;
11261
11262   /* If we've just instantiated the main entry point for a function,
11263      instantiate all the alternate entry points as well.  We do this
11264      by cloning the instantiation of the main entry point, not by
11265      instantiating the template clones.  */
11266   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11267     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11268
11269   return fndecl;
11270 }
11271
11272 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11273    arguments that are being used when calling it.  TARGS is a vector
11274    into which the deduced template arguments are placed.
11275
11276    Return zero for success, 2 for an incomplete match that doesn't resolve
11277    all the types, and 1 for complete failure.  An error message will be
11278    printed only for an incomplete match.
11279
11280    If FN is a conversion operator, or we are trying to produce a specific
11281    specialization, RETURN_TYPE is the return type desired.
11282
11283    The EXPLICIT_TARGS are explicit template arguments provided via a
11284    template-id.
11285
11286    The parameter STRICT is one of:
11287
11288    DEDUCE_CALL:
11289      We are deducing arguments for a function call, as in
11290      [temp.deduct.call].
11291
11292    DEDUCE_CONV:
11293      We are deducing arguments for a conversion function, as in
11294      [temp.deduct.conv].
11295
11296    DEDUCE_EXACT:
11297      We are deducing arguments when doing an explicit instantiation
11298      as in [temp.explicit], when determining an explicit specialization
11299      as in [temp.expl.spec], or when taking the address of a function
11300      template, as in [temp.deduct.funcaddr].  */
11301
11302 int
11303 fn_type_unification (tree fn,
11304                      tree explicit_targs,
11305                      tree targs,
11306                      tree args,
11307                      tree return_type,
11308                      unification_kind_t strict,
11309                      int flags)
11310 {
11311   tree parms;
11312   tree fntype;
11313   int result;
11314   bool incomplete_argument_packs_p = false;
11315
11316   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11317
11318   fntype = TREE_TYPE (fn);
11319   if (explicit_targs)
11320     {
11321       /* [temp.deduct]
11322
11323          The specified template arguments must match the template
11324          parameters in kind (i.e., type, nontype, template), and there
11325          must not be more arguments than there are parameters;
11326          otherwise type deduction fails.
11327
11328          Nontype arguments must match the types of the corresponding
11329          nontype template parameters, or must be convertible to the
11330          types of the corresponding nontype parameters as specified in
11331          _temp.arg.nontype_, otherwise type deduction fails.
11332
11333          All references in the function type of the function template
11334          to the corresponding template parameters are replaced by the
11335          specified template argument values.  If a substitution in a
11336          template parameter or in the function type of the function
11337          template results in an invalid type, type deduction fails.  */
11338       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11339       int i, len = TREE_VEC_LENGTH (tparms);
11340       tree converted_args;
11341       bool incomplete = false;
11342
11343       if (explicit_targs == error_mark_node)
11344         return 1;
11345
11346       converted_args
11347         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11348                                   /*require_all_args=*/false,
11349                                   /*use_default_args=*/false));
11350       if (converted_args == error_mark_node)
11351         return 1;
11352
11353       /* Substitute the explicit args into the function type.  This is
11354          necessary so that, for instance, explicitly declared function
11355          arguments can match null pointed constants.  If we were given
11356          an incomplete set of explicit args, we must not do semantic
11357          processing during substitution as we could create partial
11358          instantiations.  */
11359       for (i = 0; i < len; i++)
11360         {
11361           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11362           bool parameter_pack = false;
11363
11364           /* Dig out the actual parm.  */
11365           if (TREE_CODE (parm) == TYPE_DECL
11366               || TREE_CODE (parm) == TEMPLATE_DECL)
11367             {
11368               parm = TREE_TYPE (parm);
11369               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11370             }
11371           else if (TREE_CODE (parm) == PARM_DECL)
11372             {
11373               parm = DECL_INITIAL (parm);
11374               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11375             }
11376
11377           if (parameter_pack)
11378             {
11379               int level, idx;
11380               tree targ;
11381               template_parm_level_and_index (parm, &level, &idx);
11382
11383               /* Mark the argument pack as "incomplete". We could
11384                  still deduce more arguments during unification.  */
11385               targ = TMPL_ARG (converted_args, level, idx);
11386               if (targ)
11387                 {
11388                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11389                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11390                     = ARGUMENT_PACK_ARGS (targ);
11391                 }
11392
11393               /* We have some incomplete argument packs.  */
11394               incomplete_argument_packs_p = true;
11395             }
11396         }
11397
11398       if (incomplete_argument_packs_p)
11399         /* Any substitution is guaranteed to be incomplete if there
11400            are incomplete argument packs, because we can still deduce
11401            more arguments.  */
11402         incomplete = 1;
11403       else
11404         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11405
11406       processing_template_decl += incomplete;
11407       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11408       processing_template_decl -= incomplete;
11409
11410       if (fntype == error_mark_node)
11411         return 1;
11412
11413       /* Place the explicitly specified arguments in TARGS.  */
11414       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11415         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11416     }
11417
11418   /* Never do unification on the 'this' parameter.  */
11419   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11420
11421   if (return_type)
11422     {
11423       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11424       args = tree_cons (NULL_TREE, return_type, args);
11425     }
11426
11427   /* We allow incomplete unification without an error message here
11428      because the standard doesn't seem to explicitly prohibit it.  Our
11429      callers must be ready to deal with unification failures in any
11430      event.  */
11431   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11432                                   targs, parms, args, /*subr=*/0,
11433                                   strict, flags);
11434
11435   if (result == 0 && incomplete_argument_packs_p)
11436     {
11437       int i, len = NUM_TMPL_ARGS (targs);
11438
11439       /* Clear the "incomplete" flags on all argument packs.  */
11440       for (i = 0; i < len; i++)
11441         {
11442           tree arg = TREE_VEC_ELT (targs, i);
11443           if (ARGUMENT_PACK_P (arg))
11444             {
11445               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11446               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11447             }
11448         }
11449     }
11450
11451   if (result == 0)
11452     /* All is well so far.  Now, check:
11453
11454        [temp.deduct]
11455
11456        When all template arguments have been deduced, all uses of
11457        template parameters in nondeduced contexts are replaced with
11458        the corresponding deduced argument values.  If the
11459        substitution results in an invalid type, as described above,
11460        type deduction fails.  */
11461     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11462         == error_mark_node)
11463       return 1;
11464
11465   return result;
11466 }
11467
11468 /* Adjust types before performing type deduction, as described in
11469    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
11470    sections are symmetric.  PARM is the type of a function parameter
11471    or the return type of the conversion function.  ARG is the type of
11472    the argument passed to the call, or the type of the value
11473    initialized with the result of the conversion function.
11474    ARG_EXPR is the original argument expression, which may be null.  */
11475
11476 static int
11477 maybe_adjust_types_for_deduction (unification_kind_t strict,
11478                                   tree* parm,
11479                                   tree* arg,
11480                                   tree arg_expr)
11481 {
11482   int result = 0;
11483
11484   switch (strict)
11485     {
11486     case DEDUCE_CALL:
11487       break;
11488
11489     case DEDUCE_CONV:
11490       {
11491         /* Swap PARM and ARG throughout the remainder of this
11492            function; the handling is precisely symmetric since PARM
11493            will initialize ARG rather than vice versa.  */
11494         tree* temp = parm;
11495         parm = arg;
11496         arg = temp;
11497         break;
11498       }
11499
11500     case DEDUCE_EXACT:
11501       /* There is nothing to do in this case.  */
11502       return 0;
11503
11504     default:
11505       gcc_unreachable ();
11506     }
11507
11508   if (TREE_CODE (*parm) != REFERENCE_TYPE)
11509     {
11510       /* [temp.deduct.call]
11511
11512          If P is not a reference type:
11513
11514          --If A is an array type, the pointer type produced by the
11515          array-to-pointer standard conversion (_conv.array_) is
11516          used in place of A for type deduction; otherwise,
11517
11518          --If A is a function type, the pointer type produced by
11519          the function-to-pointer standard conversion
11520          (_conv.func_) is used in place of A for type deduction;
11521          otherwise,
11522
11523          --If A is a cv-qualified type, the top level
11524          cv-qualifiers of A's type are ignored for type
11525          deduction.  */
11526       if (TREE_CODE (*arg) == ARRAY_TYPE)
11527         *arg = build_pointer_type (TREE_TYPE (*arg));
11528       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11529         *arg = build_pointer_type (*arg);
11530       else
11531         *arg = TYPE_MAIN_VARIANT (*arg);
11532     }
11533
11534   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11535      of the form T&&, where T is a template parameter, and the argument
11536      is an lvalue, T is deduced as A& */
11537   if (TREE_CODE (*parm) == REFERENCE_TYPE
11538       && TYPE_REF_IS_RVALUE (*parm)
11539       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11540       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11541       && arg_expr && real_lvalue_p (arg_expr))
11542     *arg = build_reference_type (*arg);
11543
11544   /* [temp.deduct.call]
11545
11546      If P is a cv-qualified type, the top level cv-qualifiers
11547      of P's type are ignored for type deduction.  If P is a
11548      reference type, the type referred to by P is used for
11549      type deduction.  */
11550   *parm = TYPE_MAIN_VARIANT (*parm);
11551   if (TREE_CODE (*parm) == REFERENCE_TYPE)
11552     {
11553       *parm = TREE_TYPE (*parm);
11554       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11555     }
11556
11557   /* DR 322. For conversion deduction, remove a reference type on parm
11558      too (which has been swapped into ARG).  */
11559   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11560     *arg = TREE_TYPE (*arg);
11561
11562   return result;
11563 }
11564
11565 /* Most parms like fn_type_unification.
11566
11567    If SUBR is 1, we're being called recursively (to unify the
11568    arguments of a function or method parameter of a function
11569    template). */
11570
11571 static int
11572 type_unification_real (tree tparms,
11573                        tree targs,
11574                        tree xparms,
11575                        tree xargs,
11576                        int subr,
11577                        unification_kind_t strict,
11578                        int flags)
11579 {
11580   tree parm, arg, arg_expr;
11581   int i;
11582   int ntparms = TREE_VEC_LENGTH (tparms);
11583   int sub_strict;
11584   int saw_undeduced = 0;
11585   tree parms, args;
11586
11587   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11588   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11589   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11590   gcc_assert (ntparms > 0);
11591
11592   switch (strict)
11593     {
11594     case DEDUCE_CALL:
11595       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11596                     | UNIFY_ALLOW_DERIVED);
11597       break;
11598
11599     case DEDUCE_CONV:
11600       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11601       break;
11602
11603     case DEDUCE_EXACT:
11604       sub_strict = UNIFY_ALLOW_NONE;
11605       break;
11606
11607     default:
11608       gcc_unreachable ();
11609     }
11610
11611  again:
11612   parms = xparms;
11613   args = xargs;
11614
11615   while (parms && parms != void_list_node
11616          && args && args != void_list_node)
11617     {
11618       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11619         break;
11620
11621       parm = TREE_VALUE (parms);
11622       parms = TREE_CHAIN (parms);
11623       arg = TREE_VALUE (args);
11624       args = TREE_CHAIN (args);
11625       arg_expr = NULL;
11626
11627       if (arg == error_mark_node)
11628         return 1;
11629       if (arg == unknown_type_node)
11630         /* We can't deduce anything from this, but we might get all the
11631            template args from other function args.  */
11632         continue;
11633
11634       /* Conversions will be performed on a function argument that
11635          corresponds with a function parameter that contains only
11636          non-deducible template parameters and explicitly specified
11637          template parameters.  */
11638       if (!uses_template_parms (parm))
11639         {
11640           tree type;
11641
11642           if (!TYPE_P (arg))
11643             type = TREE_TYPE (arg);
11644           else
11645             type = arg;
11646
11647           if (same_type_p (parm, type))
11648             continue;
11649           if (strict != DEDUCE_EXACT
11650               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11651                                   flags))
11652             continue;
11653
11654           return 1;
11655         }
11656
11657       if (!TYPE_P (arg))
11658         {
11659           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11660           if (type_unknown_p (arg))
11661             {
11662               /* [temp.deduct.type] 
11663
11664                  A template-argument can be deduced from a pointer to
11665                  function or pointer to member function argument if
11666                  the set of overloaded functions does not contain
11667                  function templates and at most one of a set of
11668                  overloaded functions provides a unique match.  */
11669               if (resolve_overloaded_unification
11670                   (tparms, targs, parm, arg, strict, sub_strict))
11671                 continue;
11672
11673               return 1;
11674             }
11675           arg_expr = arg;
11676           arg = unlowered_expr_type (arg);
11677           if (arg == error_mark_node)
11678             return 1;
11679         }
11680
11681       {
11682         int arg_strict = sub_strict;
11683
11684         if (!subr)
11685           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11686                                                           arg_expr);
11687
11688         if (unify (tparms, targs, parm, arg, arg_strict))
11689           return 1;
11690       }
11691     }
11692
11693
11694   if (parms 
11695       && parms != void_list_node
11696       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11697     {
11698       /* Unify the remaining arguments with the pack expansion type.  */
11699       tree argvec;
11700       tree parmvec = make_tree_vec (1);
11701       int len = 0;
11702       tree t;
11703
11704       /* Count the number of arguments that remain.  */
11705       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11706         len++;
11707         
11708       /* Allocate a TREE_VEC and copy in all of the arguments */ 
11709       argvec = make_tree_vec (len);
11710       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11711         {
11712           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11713           ++i;
11714         }
11715
11716       /* Copy the parameter into parmvec.  */
11717       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11718       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11719                                 /*call_args_p=*/true, /*subr=*/subr))
11720         return 1;
11721
11722       /* Advance to the end of the list of parameters.  */
11723       parms = TREE_CHAIN (parms);
11724     }
11725
11726   /* Fail if we've reached the end of the parm list, and more args
11727      are present, and the parm list isn't variadic.  */
11728   if (args && args != void_list_node && parms == void_list_node)
11729     return 1;
11730   /* Fail if parms are left and they don't have default values.  */
11731   if (parms && parms != void_list_node
11732       && TREE_PURPOSE (parms) == NULL_TREE)
11733     return 1;
11734
11735   if (!subr)
11736     for (i = 0; i < ntparms; i++)
11737       if (!TREE_VEC_ELT (targs, i))
11738         {
11739           tree tparm;
11740
11741           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11742             continue;
11743
11744           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11745
11746           /* If this is an undeduced nontype parameter that depends on
11747              a type parameter, try another pass; its type may have been
11748              deduced from a later argument than the one from which
11749              this parameter can be deduced.  */
11750           if (TREE_CODE (tparm) == PARM_DECL
11751               && uses_template_parms (TREE_TYPE (tparm))
11752               && !saw_undeduced++)
11753             goto again;
11754
11755           /* Core issue #226 (C++0x) [temp.deduct]:
11756
11757                If a template argument has not been deduced, its
11758                default template argument, if any, is used. 
11759
11760              When we are in C++98 mode, TREE_PURPOSE will either
11761              be NULL_TREE or ERROR_MARK_NODE, so we do not need
11762              to explicitly check cxx_dialect here.  */
11763           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11764             {
11765               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
11766                                  targs, tf_none, NULL_TREE);
11767               if (arg == error_mark_node)
11768                 return 1;
11769               else
11770                 {
11771                   TREE_VEC_ELT (targs, i) = arg;
11772                   continue;
11773                 }
11774             }
11775
11776           /* If the type parameter is a parameter pack, then it will
11777              be deduced to an empty parameter pack.  */
11778           if (template_parameter_pack_p (tparm))
11779             {
11780               tree arg;
11781
11782               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11783                 {
11784                   arg = make_node (NONTYPE_ARGUMENT_PACK);
11785                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11786                   TREE_CONSTANT (arg) = 1;
11787                 }
11788               else
11789                 arg = make_node (TYPE_ARGUMENT_PACK);
11790
11791               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11792
11793               TREE_VEC_ELT (targs, i) = arg;
11794               continue;
11795             }
11796
11797           return 2;
11798         }
11799
11800   return 0;
11801 }
11802
11803 /* Subroutine of type_unification_real.  Args are like the variables
11804    at the call site.  ARG is an overloaded function (or template-id);
11805    we try deducing template args from each of the overloads, and if
11806    only one succeeds, we go with that.  Modifies TARGS and returns
11807    true on success.  */
11808
11809 static bool
11810 resolve_overloaded_unification (tree tparms,
11811                                 tree targs,
11812                                 tree parm,
11813                                 tree arg,
11814                                 unification_kind_t strict,
11815                                 int sub_strict)
11816 {
11817   tree tempargs = copy_node (targs);
11818   int good = 0;
11819   bool addr_p;
11820
11821   if (TREE_CODE (arg) == ADDR_EXPR)
11822     {
11823       arg = TREE_OPERAND (arg, 0);
11824       addr_p = true;
11825     }
11826   else
11827     addr_p = false;
11828
11829   if (TREE_CODE (arg) == COMPONENT_REF)
11830     /* Handle `&x' where `x' is some static or non-static member
11831        function name.  */
11832     arg = TREE_OPERAND (arg, 1);
11833
11834   if (TREE_CODE (arg) == OFFSET_REF)
11835     arg = TREE_OPERAND (arg, 1);
11836
11837   /* Strip baselink information.  */
11838   if (BASELINK_P (arg))
11839     arg = BASELINK_FUNCTIONS (arg);
11840
11841   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11842     {
11843       /* If we got some explicit template args, we need to plug them into
11844          the affected templates before we try to unify, in case the
11845          explicit args will completely resolve the templates in question.  */
11846
11847       tree expl_subargs = TREE_OPERAND (arg, 1);
11848       arg = TREE_OPERAND (arg, 0);
11849
11850       for (; arg; arg = OVL_NEXT (arg))
11851         {
11852           tree fn = OVL_CURRENT (arg);
11853           tree subargs, elem;
11854
11855           if (TREE_CODE (fn) != TEMPLATE_DECL)
11856             continue;
11857
11858           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11859                                   expl_subargs, /*check_ret=*/false);
11860           if (subargs)
11861             {
11862               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11863               good += try_one_overload (tparms, targs, tempargs, parm,
11864                                         elem, strict, sub_strict, addr_p);
11865             }
11866         }
11867     }
11868   else if (TREE_CODE (arg) != OVERLOAD
11869            && TREE_CODE (arg) != FUNCTION_DECL)
11870     /* If ARG is, for example, "(0, &f)" then its type will be unknown
11871        -- but the deduction does not succeed because the expression is
11872        not just the function on its own.  */
11873     return false;
11874   else
11875     for (; arg; arg = OVL_NEXT (arg))
11876       good += try_one_overload (tparms, targs, tempargs, parm,
11877                                 TREE_TYPE (OVL_CURRENT (arg)),
11878                                 strict, sub_strict, addr_p);
11879
11880   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11881      to function or pointer to member function argument if the set of
11882      overloaded functions does not contain function templates and at most
11883      one of a set of overloaded functions provides a unique match.
11884
11885      So if we found multiple possibilities, we return success but don't
11886      deduce anything.  */
11887
11888   if (good == 1)
11889     {
11890       int i = TREE_VEC_LENGTH (targs);
11891       for (; i--; )
11892         if (TREE_VEC_ELT (tempargs, i))
11893           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11894     }
11895   if (good)
11896     return true;
11897
11898   return false;
11899 }
11900
11901 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11902    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
11903    different overloads deduce different arguments for a given parm.
11904    ADDR_P is true if the expression for which deduction is being
11905    performed was of the form "& fn" rather than simply "fn".
11906
11907    Returns 1 on success.  */
11908
11909 static int
11910 try_one_overload (tree tparms,
11911                   tree orig_targs,
11912                   tree targs,
11913                   tree parm,
11914                   tree arg,
11915                   unification_kind_t strict,
11916                   int sub_strict,
11917                   bool addr_p)
11918 {
11919   int nargs;
11920   tree tempargs;
11921   int i;
11922
11923   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11924      to function or pointer to member function argument if the set of
11925      overloaded functions does not contain function templates and at most
11926      one of a set of overloaded functions provides a unique match.
11927
11928      So if this is a template, just return success.  */
11929
11930   if (uses_template_parms (arg))
11931     return 1;
11932
11933   if (TREE_CODE (arg) == METHOD_TYPE)
11934     arg = build_ptrmemfunc_type (build_pointer_type (arg));
11935   else if (addr_p)
11936     arg = build_pointer_type (arg);
11937
11938   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11939
11940   /* We don't copy orig_targs for this because if we have already deduced
11941      some template args from previous args, unify would complain when we
11942      try to deduce a template parameter for the same argument, even though
11943      there isn't really a conflict.  */
11944   nargs = TREE_VEC_LENGTH (targs);
11945   tempargs = make_tree_vec (nargs);
11946
11947   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11948     return 0;
11949
11950   /* First make sure we didn't deduce anything that conflicts with
11951      explicitly specified args.  */
11952   for (i = nargs; i--; )
11953     {
11954       tree elt = TREE_VEC_ELT (tempargs, i);
11955       tree oldelt = TREE_VEC_ELT (orig_targs, i);
11956
11957       if (!elt)
11958         /*NOP*/;
11959       else if (uses_template_parms (elt))
11960         /* Since we're unifying against ourselves, we will fill in
11961            template args used in the function parm list with our own
11962            template parms.  Discard them.  */
11963         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11964       else if (oldelt && !template_args_equal (oldelt, elt))
11965         return 0;
11966     }
11967
11968   for (i = nargs; i--; )
11969     {
11970       tree elt = TREE_VEC_ELT (tempargs, i);
11971
11972       if (elt)
11973         TREE_VEC_ELT (targs, i) = elt;
11974     }
11975
11976   return 1;
11977 }
11978
11979 /* PARM is a template class (perhaps with unbound template
11980    parameters).  ARG is a fully instantiated type.  If ARG can be
11981    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
11982    TARGS are as for unify.  */
11983
11984 static tree
11985 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
11986 {
11987   tree copy_of_targs;
11988
11989   if (!CLASSTYPE_TEMPLATE_INFO (arg)
11990       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
11991           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
11992     return NULL_TREE;
11993
11994   /* We need to make a new template argument vector for the call to
11995      unify.  If we used TARGS, we'd clutter it up with the result of
11996      the attempted unification, even if this class didn't work out.
11997      We also don't want to commit ourselves to all the unifications
11998      we've already done, since unification is supposed to be done on
11999      an argument-by-argument basis.  In other words, consider the
12000      following pathological case:
12001
12002        template <int I, int J, int K>
12003        struct S {};
12004
12005        template <int I, int J>
12006        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12007
12008        template <int I, int J, int K>
12009        void f(S<I, J, K>, S<I, I, I>);
12010
12011        void g() {
12012          S<0, 0, 0> s0;
12013          S<0, 1, 2> s2;
12014
12015          f(s0, s2);
12016        }
12017
12018      Now, by the time we consider the unification involving `s2', we
12019      already know that we must have `f<0, 0, 0>'.  But, even though
12020      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12021      because there are two ways to unify base classes of S<0, 1, 2>
12022      with S<I, I, I>.  If we kept the already deduced knowledge, we
12023      would reject the possibility I=1.  */
12024   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12025
12026   /* If unification failed, we're done.  */
12027   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12028              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12029     return NULL_TREE;
12030
12031   return arg;
12032 }
12033
12034 /* Given a template type PARM and a class type ARG, find the unique
12035    base type in ARG that is an instance of PARM.  We do not examine
12036    ARG itself; only its base-classes.  If there is not exactly one
12037    appropriate base class, return NULL_TREE.  PARM may be the type of
12038    a partial specialization, as well as a plain template type.  Used
12039    by unify.  */
12040
12041 static tree
12042 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12043 {
12044   tree rval = NULL_TREE;
12045   tree binfo;
12046
12047   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
12048
12049   binfo = TYPE_BINFO (complete_type (arg));
12050   if (!binfo)
12051     /* The type could not be completed.  */
12052     return NULL_TREE;
12053
12054   /* Walk in inheritance graph order.  The search order is not
12055      important, and this avoids multiple walks of virtual bases.  */
12056   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12057     {
12058       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12059
12060       if (r)
12061         {
12062           /* If there is more than one satisfactory baseclass, then:
12063
12064                [temp.deduct.call]
12065
12066               If they yield more than one possible deduced A, the type
12067               deduction fails.
12068
12069              applies.  */
12070           if (rval && !same_type_p (r, rval))
12071             return NULL_TREE;
12072
12073           rval = r;
12074         }
12075     }
12076
12077   return rval;
12078 }
12079
12080 /* Returns the level of DECL, which declares a template parameter.  */
12081
12082 static int
12083 template_decl_level (tree decl)
12084 {
12085   switch (TREE_CODE (decl))
12086     {
12087     case TYPE_DECL:
12088     case TEMPLATE_DECL:
12089       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12090
12091     case PARM_DECL:
12092       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12093
12094     default:
12095       gcc_unreachable ();
12096     }
12097   return 0;
12098 }
12099
12100 /* Decide whether ARG can be unified with PARM, considering only the
12101    cv-qualifiers of each type, given STRICT as documented for unify.
12102    Returns nonzero iff the unification is OK on that basis.  */
12103
12104 static int
12105 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12106 {
12107   int arg_quals = cp_type_quals (arg);
12108   int parm_quals = cp_type_quals (parm);
12109
12110   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12111       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12112     {
12113       /*  Although a CVR qualifier is ignored when being applied to a
12114           substituted template parameter ([8.3.2]/1 for example), that
12115           does not apply during deduction [14.8.2.4]/1, (even though
12116           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12117           this).  Except when we're allowing additional CV qualifiers
12118           at the outer level [14.8.2.1]/3,1st bullet.  */
12119       if ((TREE_CODE (arg) == REFERENCE_TYPE
12120            || TREE_CODE (arg) == FUNCTION_TYPE
12121            || TREE_CODE (arg) == METHOD_TYPE)
12122           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12123         return 0;
12124
12125       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12126           && (parm_quals & TYPE_QUAL_RESTRICT))
12127         return 0;
12128     }
12129
12130   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12131       && (arg_quals & parm_quals) != parm_quals)
12132     return 0;
12133
12134   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12135       && (parm_quals & arg_quals) != arg_quals)
12136     return 0;
12137
12138   return 1;
12139 }
12140
12141 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12142 void 
12143 template_parm_level_and_index (tree parm, int* level, int* index)
12144 {
12145   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12146       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12147       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12148     {
12149       *index = TEMPLATE_TYPE_IDX (parm);
12150       *level = TEMPLATE_TYPE_LEVEL (parm);
12151     }
12152   else
12153     {
12154       *index = TEMPLATE_PARM_IDX (parm);
12155       *level = TEMPLATE_PARM_LEVEL (parm);
12156     }
12157 }
12158
12159 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12160    expansion at the end of PACKED_PARMS. Returns 0 if the type
12161    deduction succeeds, 1 otherwise. STRICT is the same as in
12162    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12163    call argument list. We'll need to adjust the arguments to make them
12164    types. SUBR tells us if this is from a recursive call to
12165    type_unification_real.  */
12166 int
12167 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12168                       tree packed_args, int strict, bool call_args_p,
12169                       bool subr)
12170 {
12171   tree parm 
12172     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12173   tree pattern = PACK_EXPANSION_PATTERN (parm);
12174   tree pack, packs = NULL_TREE;
12175   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12176   int len = TREE_VEC_LENGTH (packed_args);
12177
12178   /* Determine the parameter packs we will be deducing from the
12179      pattern, and record their current deductions.  */
12180   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12181        pack; pack = TREE_CHAIN (pack))
12182     {
12183       tree parm_pack = TREE_VALUE (pack);
12184       int idx, level;
12185
12186       /* Determine the index and level of this parameter pack.  */
12187       template_parm_level_and_index (parm_pack, &level, &idx);
12188
12189       /* Keep track of the parameter packs and their corresponding
12190          argument packs.  */
12191       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12192       TREE_TYPE (packs) = make_tree_vec (len - start);
12193     }
12194   
12195   /* Loop through all of the arguments that have not yet been
12196      unified and unify each with the pattern.  */
12197   for (i = start; i < len; i++)
12198     {
12199       tree parm = pattern;
12200
12201       /* For each parameter pack, clear out the deduced value so that
12202          we can deduce it again.  */
12203       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12204         {
12205           int idx, level;
12206           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12207
12208           TMPL_ARG (targs, level, idx) = NULL_TREE;
12209         }
12210
12211       /* Unify the pattern with the current argument.  */
12212       {
12213         tree arg = TREE_VEC_ELT (packed_args, i);
12214         int arg_strict = strict;
12215         bool skip_arg_p = false;
12216
12217         if (call_args_p)
12218           {
12219             int sub_strict;
12220
12221             /* This mirrors what we do in type_unification_real.  */
12222             switch (strict)
12223               {
12224               case DEDUCE_CALL:
12225                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12226                               | UNIFY_ALLOW_MORE_CV_QUAL
12227                               | UNIFY_ALLOW_DERIVED);
12228                 break;
12229                 
12230               case DEDUCE_CONV:
12231                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12232                 break;
12233                 
12234               case DEDUCE_EXACT:
12235                 sub_strict = UNIFY_ALLOW_NONE;
12236                 break;
12237                 
12238               default:
12239                 gcc_unreachable ();
12240               }
12241
12242             if (!TYPE_P (arg))
12243               {
12244                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12245                 if (type_unknown_p (arg))
12246                   {
12247                     /* [temp.deduct.type] A template-argument can be
12248                        deduced from a pointer to function or pointer
12249                        to member function argument if the set of
12250                        overloaded functions does not contain function
12251                        templates and at most one of a set of
12252                        overloaded functions provides a unique
12253                        match.  */
12254
12255                     if (resolve_overloaded_unification
12256                         (tparms, targs, parm, arg, strict, sub_strict)
12257                         != 0)
12258                       return 1;
12259                     skip_arg_p = true;
12260                   }
12261
12262                 if (!skip_arg_p)
12263                   {
12264                     arg = TREE_TYPE (arg);
12265                     if (arg == error_mark_node)
12266                       return 1;
12267                   }
12268               }
12269       
12270             arg_strict = sub_strict;
12271
12272             if (!subr)
12273               arg_strict |= 
12274                 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12275           }
12276
12277         if (!skip_arg_p)
12278           {
12279             if (unify (tparms, targs, parm, arg, arg_strict))
12280               return 1;
12281           }
12282       }
12283
12284       /* For each parameter pack, collect the deduced value.  */
12285       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12286         {
12287           int idx, level;
12288           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12289
12290           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12291             TMPL_ARG (targs, level, idx);
12292         }
12293     }
12294
12295   /* Verify that the results of unification with the parameter packs
12296      produce results consistent with what we've seen before, and make
12297      the deduced argument packs available.  */
12298   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12299     {
12300       tree old_pack = TREE_VALUE (pack);
12301       tree new_args = TREE_TYPE (pack);
12302
12303       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12304         {
12305           /* Prepend the explicit arguments onto NEW_ARGS.  */
12306           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12307           tree old_args = new_args;
12308           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12309           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12310
12311           /* Copy the explicit arguments.  */
12312           new_args = make_tree_vec (len);
12313           for (i = 0; i < explicit_len; i++)
12314             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12315
12316           /* Copy the deduced arguments.  */
12317           for (; i < len; i++)
12318             TREE_VEC_ELT (new_args, i) =
12319               TREE_VEC_ELT (old_args, i - explicit_len);
12320         }
12321
12322       if (!old_pack)
12323         {
12324           tree result;
12325           int idx, level;
12326           
12327           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12328
12329           /* Build the deduced *_ARGUMENT_PACK.  */
12330           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12331             {
12332               result = make_node (NONTYPE_ARGUMENT_PACK);
12333               TREE_TYPE (result) = 
12334                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12335               TREE_CONSTANT (result) = 1;
12336             }
12337           else
12338             result = make_node (TYPE_ARGUMENT_PACK);
12339
12340           SET_ARGUMENT_PACK_ARGS (result, new_args);
12341
12342           /* Note the deduced argument packs for this parameter
12343              pack.  */
12344           TMPL_ARG (targs, level, idx) = result;
12345         }
12346       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12347                && (ARGUMENT_PACK_ARGS (old_pack) 
12348                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12349         {
12350           /* We only had the explicitly-provided arguments before, but
12351              now we have a complete set of arguments.  */
12352           int idx, level;
12353           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12354           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12355
12356           /* Keep the original deduced argument pack.  */
12357           TMPL_ARG (targs, level, idx) = old_pack;
12358
12359           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12360           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12361           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12362         }
12363       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12364                                     new_args))
12365         /* Inconsistent unification of this parameter pack.  */
12366         return 1;
12367       else
12368         {
12369           int idx, level;
12370           
12371           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12372
12373           /* Keep the original deduced argument pack.  */
12374           TMPL_ARG (targs, level, idx) = old_pack;
12375         }
12376     }
12377
12378   return 0;
12379 }
12380
12381 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12382    set of template parameters to a template.  TARGS is the bindings
12383    for those template parameters, as determined thus far; TARGS may
12384    include template arguments for outer levels of template parameters
12385    as well.  PARM is a parameter to a template function, or a
12386    subcomponent of that parameter; ARG is the corresponding argument.
12387    This function attempts to match PARM with ARG in a manner
12388    consistent with the existing assignments in TARGS.  If more values
12389    are deduced, then TARGS is updated.
12390
12391    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12392    parameter STRICT is a bitwise or of the following flags:
12393
12394      UNIFY_ALLOW_NONE:
12395        Require an exact match between PARM and ARG.
12396      UNIFY_ALLOW_MORE_CV_QUAL:
12397        Allow the deduced ARG to be more cv-qualified (by qualification
12398        conversion) than ARG.
12399      UNIFY_ALLOW_LESS_CV_QUAL:
12400        Allow the deduced ARG to be less cv-qualified than ARG.
12401      UNIFY_ALLOW_DERIVED:
12402        Allow the deduced ARG to be a template base class of ARG,
12403        or a pointer to a template base class of the type pointed to by
12404        ARG.
12405      UNIFY_ALLOW_INTEGER:
12406        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
12407        case for more information.
12408      UNIFY_ALLOW_OUTER_LEVEL:
12409        This is the outermost level of a deduction. Used to determine validity
12410        of qualification conversions. A valid qualification conversion must
12411        have const qualified pointers leading up to the inner type which
12412        requires additional CV quals, except at the outer level, where const
12413        is not required [conv.qual]. It would be normal to set this flag in
12414        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12415      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12416        This is the outermost level of a deduction, and PARM can be more CV
12417        qualified at this point.
12418      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12419        This is the outermost level of a deduction, and PARM can be less CV
12420        qualified at this point.  */
12421
12422 static int
12423 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12424 {
12425   int idx;
12426   tree targ;
12427   tree tparm;
12428   int strict_in = strict;
12429
12430   /* I don't think this will do the right thing with respect to types.
12431      But the only case I've seen it in so far has been array bounds, where
12432      signedness is the only information lost, and I think that will be
12433      okay.  */
12434   while (TREE_CODE (parm) == NOP_EXPR)
12435     parm = TREE_OPERAND (parm, 0);
12436
12437   if (arg == error_mark_node)
12438     return 1;
12439   if (arg == unknown_type_node)
12440     /* We can't deduce anything from this, but we might get all the
12441        template args from other function args.  */
12442     return 0;
12443
12444   /* If PARM uses template parameters, then we can't bail out here,
12445      even if ARG == PARM, since we won't record unifications for the
12446      template parameters.  We might need them if we're trying to
12447      figure out which of two things is more specialized.  */
12448   if (arg == parm && !uses_template_parms (parm))
12449     return 0;
12450
12451   /* Immediately reject some pairs that won't unify because of
12452      cv-qualification mismatches.  */
12453   if (TREE_CODE (arg) == TREE_CODE (parm)
12454       && TYPE_P (arg)
12455       /* It is the elements of the array which hold the cv quals of an array
12456          type, and the elements might be template type parms. We'll check
12457          when we recurse.  */
12458       && TREE_CODE (arg) != ARRAY_TYPE
12459       /* We check the cv-qualifiers when unifying with template type
12460          parameters below.  We want to allow ARG `const T' to unify with
12461          PARM `T' for example, when computing which of two templates
12462          is more specialized, for example.  */
12463       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12464       && !check_cv_quals_for_unify (strict_in, arg, parm))
12465     return 1;
12466
12467   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12468       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12469     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12470   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12471   strict &= ~UNIFY_ALLOW_DERIVED;
12472   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12473   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12474
12475   switch (TREE_CODE (parm))
12476     {
12477     case TYPENAME_TYPE:
12478     case SCOPE_REF:
12479     case UNBOUND_CLASS_TEMPLATE:
12480       /* In a type which contains a nested-name-specifier, template
12481          argument values cannot be deduced for template parameters used
12482          within the nested-name-specifier.  */
12483       return 0;
12484
12485     case TEMPLATE_TYPE_PARM:
12486     case TEMPLATE_TEMPLATE_PARM:
12487     case BOUND_TEMPLATE_TEMPLATE_PARM:
12488       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12489       if (tparm == error_mark_node)
12490         return 1;
12491
12492       if (TEMPLATE_TYPE_LEVEL (parm)
12493           != template_decl_level (tparm))
12494         /* The PARM is not one we're trying to unify.  Just check
12495            to see if it matches ARG.  */
12496         return (TREE_CODE (arg) == TREE_CODE (parm)
12497                 && same_type_p (parm, arg)) ? 0 : 1;
12498       idx = TEMPLATE_TYPE_IDX (parm);
12499       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12500       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12501
12502       /* Check for mixed types and values.  */
12503       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12504            && TREE_CODE (tparm) != TYPE_DECL)
12505           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12506               && TREE_CODE (tparm) != TEMPLATE_DECL))
12507         return 1;
12508
12509       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12510         {
12511           /* ARG must be constructed from a template class or a template
12512              template parameter.  */
12513           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12514               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12515             return 1;
12516
12517           {
12518             tree parmvec = TYPE_TI_ARGS (parm);
12519             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12520             tree argtmplvec
12521               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12522             int i;
12523
12524             /* The resolution to DR150 makes clear that default
12525                arguments for an N-argument may not be used to bind T
12526                to a template template parameter with fewer than N
12527                parameters.  It is not safe to permit the binding of
12528                default arguments as an extension, as that may change
12529                the meaning of a conforming program.  Consider:
12530
12531                   struct Dense { static const unsigned int dim = 1; };
12532
12533                   template <template <typename> class View,
12534                             typename Block>
12535                   void operator+(float, View<Block> const&);
12536
12537                   template <typename Block,
12538                             unsigned int Dim = Block::dim>
12539                   struct Lvalue_proxy { operator float() const; };
12540
12541                   void
12542                   test_1d (void) {
12543                     Lvalue_proxy<Dense> p;
12544                     float b;
12545                     b + p;
12546                   }
12547
12548               Here, if Lvalue_proxy is permitted to bind to View, then
12549               the global operator+ will be used; if they are not, the
12550               Lvalue_proxy will be converted to float.  */
12551             if (coerce_template_parms (argtmplvec, parmvec,
12552                                        TYPE_TI_TEMPLATE (parm),
12553                                        tf_none,
12554                                        /*require_all_args=*/true,
12555                                        /*use_default_args=*/false)
12556                 == error_mark_node)
12557               return 1;
12558
12559             /* Deduce arguments T, i from TT<T> or TT<i>.
12560                We check each element of PARMVEC and ARGVEC individually
12561                rather than the whole TREE_VEC since they can have
12562                different number of elements.  */
12563
12564             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12565               {
12566                 if (unify (tparms, targs,
12567                            TREE_VEC_ELT (parmvec, i),
12568                            TREE_VEC_ELT (argvec, i),
12569                            UNIFY_ALLOW_NONE))
12570                   return 1;
12571               }
12572           }
12573           arg = TYPE_TI_TEMPLATE (arg);
12574
12575           /* Fall through to deduce template name.  */
12576         }
12577
12578       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12579           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12580         {
12581           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
12582
12583           /* Simple cases: Value already set, does match or doesn't.  */
12584           if (targ != NULL_TREE && template_args_equal (targ, arg))
12585             return 0;
12586           else if (targ)
12587             return 1;
12588         }
12589       else
12590         {
12591           /* If PARM is `const T' and ARG is only `int', we don't have
12592              a match unless we are allowing additional qualification.
12593              If ARG is `const int' and PARM is just `T' that's OK;
12594              that binds `const int' to `T'.  */
12595           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12596                                          arg, parm))
12597             return 1;
12598
12599           /* Consider the case where ARG is `const volatile int' and
12600              PARM is `const T'.  Then, T should be `volatile int'.  */
12601           arg = cp_build_qualified_type_real
12602             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12603           if (arg == error_mark_node)
12604             return 1;
12605
12606           /* Simple cases: Value already set, does match or doesn't.  */
12607           if (targ != NULL_TREE && same_type_p (targ, arg))
12608             return 0;
12609           else if (targ)
12610             return 1;
12611
12612           /* Make sure that ARG is not a variable-sized array.  (Note
12613              that were talking about variable-sized arrays (like
12614              `int[n]'), rather than arrays of unknown size (like
12615              `int[]').)  We'll get very confused by such a type since
12616              the bound of the array will not be computable in an
12617              instantiation.  Besides, such types are not allowed in
12618              ISO C++, so we can do as we please here.  */
12619           if (variably_modified_type_p (arg, NULL_TREE))
12620             return 1;
12621         }
12622
12623       /* If ARG is a parameter pack or an expansion, we cannot unify
12624          against it unless PARM is also a parameter pack.  */
12625       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12626           && !template_parameter_pack_p (parm))
12627         return 1;
12628
12629       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12630       return 0;
12631
12632     case TEMPLATE_PARM_INDEX:
12633       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12634       if (tparm == error_mark_node)
12635         return 1;
12636
12637       if (TEMPLATE_PARM_LEVEL (parm)
12638           != template_decl_level (tparm))
12639         /* The PARM is not one we're trying to unify.  Just check
12640            to see if it matches ARG.  */
12641         return !(TREE_CODE (arg) == TREE_CODE (parm)
12642                  && cp_tree_equal (parm, arg));
12643
12644       idx = TEMPLATE_PARM_IDX (parm);
12645       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12646
12647       if (targ)
12648         return !cp_tree_equal (targ, arg);
12649
12650       /* [temp.deduct.type] If, in the declaration of a function template
12651          with a non-type template-parameter, the non-type
12652          template-parameter is used in an expression in the function
12653          parameter-list and, if the corresponding template-argument is
12654          deduced, the template-argument type shall match the type of the
12655          template-parameter exactly, except that a template-argument
12656          deduced from an array bound may be of any integral type.
12657          The non-type parameter might use already deduced type parameters.  */
12658       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12659       if (!TREE_TYPE (arg))
12660         /* Template-parameter dependent expression.  Just accept it for now.
12661            It will later be processed in convert_template_argument.  */
12662         ;
12663       else if (same_type_p (TREE_TYPE (arg), tparm))
12664         /* OK */;
12665       else if ((strict & UNIFY_ALLOW_INTEGER)
12666                && (TREE_CODE (tparm) == INTEGER_TYPE
12667                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
12668         /* Convert the ARG to the type of PARM; the deduced non-type
12669            template argument must exactly match the types of the
12670            corresponding parameter.  */
12671         arg = fold (build_nop (TREE_TYPE (parm), arg));
12672       else if (uses_template_parms (tparm))
12673         /* We haven't deduced the type of this parameter yet.  Try again
12674            later.  */
12675         return 0;
12676       else
12677         return 1;
12678
12679       /* If ARG is a parameter pack or an expansion, we cannot unify
12680          against it unless PARM is also a parameter pack.  */
12681       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12682           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12683         return 1;
12684
12685       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12686       return 0;
12687
12688     case PTRMEM_CST:
12689      {
12690         /* A pointer-to-member constant can be unified only with
12691          another constant.  */
12692       if (TREE_CODE (arg) != PTRMEM_CST)
12693         return 1;
12694
12695       /* Just unify the class member. It would be useless (and possibly
12696          wrong, depending on the strict flags) to unify also
12697          PTRMEM_CST_CLASS, because we want to be sure that both parm and
12698          arg refer to the same variable, even if through different
12699          classes. For instance:
12700
12701          struct A { int x; };
12702          struct B : A { };
12703
12704          Unification of &A::x and &B::x must succeed.  */
12705       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12706                     PTRMEM_CST_MEMBER (arg), strict);
12707      }
12708
12709     case POINTER_TYPE:
12710       {
12711         if (TREE_CODE (arg) != POINTER_TYPE)
12712           return 1;
12713
12714         /* [temp.deduct.call]
12715
12716            A can be another pointer or pointer to member type that can
12717            be converted to the deduced A via a qualification
12718            conversion (_conv.qual_).
12719
12720            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12721            This will allow for additional cv-qualification of the
12722            pointed-to types if appropriate.  */
12723
12724         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12725           /* The derived-to-base conversion only persists through one
12726              level of pointers.  */
12727           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12728
12729         return unify (tparms, targs, TREE_TYPE (parm),
12730                       TREE_TYPE (arg), strict);
12731       }
12732
12733     case REFERENCE_TYPE:
12734       if (TREE_CODE (arg) != REFERENCE_TYPE)
12735         return 1;
12736       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12737                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12738
12739     case ARRAY_TYPE:
12740       if (TREE_CODE (arg) != ARRAY_TYPE)
12741         return 1;
12742       if ((TYPE_DOMAIN (parm) == NULL_TREE)
12743           != (TYPE_DOMAIN (arg) == NULL_TREE))
12744         return 1;
12745       if (TYPE_DOMAIN (parm) != NULL_TREE)
12746         {
12747           tree parm_max;
12748           tree arg_max;
12749           bool parm_cst;
12750           bool arg_cst;
12751
12752           /* Our representation of array types uses "N - 1" as the
12753              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12754              not an integer constant.  We cannot unify arbitrarily
12755              complex expressions, so we eliminate the MINUS_EXPRs
12756              here.  */
12757           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12758           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12759           if (!parm_cst)
12760             {
12761               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12762               parm_max = TREE_OPERAND (parm_max, 0);
12763             }
12764           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12765           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12766           if (!arg_cst)
12767             {
12768               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12769                  trying to unify the type of a variable with the type
12770                  of a template parameter.  For example:
12771
12772                    template <unsigned int N>
12773                    void f (char (&) [N]);
12774                    int g(); 
12775                    void h(int i) {
12776                      char a[g(i)];
12777                      f(a); 
12778                    }
12779
12780                 Here, the type of the ARG will be "int [g(i)]", and
12781                 may be a SAVE_EXPR, etc.  */
12782               if (TREE_CODE (arg_max) != MINUS_EXPR)
12783                 return 1;
12784               arg_max = TREE_OPERAND (arg_max, 0);
12785             }
12786
12787           /* If only one of the bounds used a MINUS_EXPR, compensate
12788              by adding one to the other bound.  */
12789           if (parm_cst && !arg_cst)
12790             parm_max = fold_build2 (PLUS_EXPR,
12791                                     integer_type_node,
12792                                     parm_max,
12793                                     integer_one_node);
12794           else if (arg_cst && !parm_cst)
12795             arg_max = fold_build2 (PLUS_EXPR,
12796                                    integer_type_node,
12797                                    arg_max,
12798                                    integer_one_node);
12799
12800           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12801             return 1;
12802         }
12803       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12804                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12805
12806     case REAL_TYPE:
12807     case COMPLEX_TYPE:
12808     case VECTOR_TYPE:
12809     case INTEGER_TYPE:
12810     case BOOLEAN_TYPE:
12811     case ENUMERAL_TYPE:
12812     case VOID_TYPE:
12813       if (TREE_CODE (arg) != TREE_CODE (parm))
12814         return 1;
12815
12816       /* We have already checked cv-qualification at the top of the
12817          function.  */
12818       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12819         return 1;
12820
12821       /* As far as unification is concerned, this wins.  Later checks
12822          will invalidate it if necessary.  */
12823       return 0;
12824
12825       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
12826       /* Type INTEGER_CST can come from ordinary constant template args.  */
12827     case INTEGER_CST:
12828       while (TREE_CODE (arg) == NOP_EXPR)
12829         arg = TREE_OPERAND (arg, 0);
12830
12831       if (TREE_CODE (arg) != INTEGER_CST)
12832         return 1;
12833       return !tree_int_cst_equal (parm, arg);
12834
12835     case TREE_VEC:
12836       {
12837         int i;
12838         if (TREE_CODE (arg) != TREE_VEC)
12839           return 1;
12840         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12841           return 1;
12842         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12843           if (unify (tparms, targs,
12844                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12845                      UNIFY_ALLOW_NONE))
12846             return 1;
12847         return 0;
12848       }
12849
12850     case RECORD_TYPE:
12851     case UNION_TYPE:
12852       if (TREE_CODE (arg) != TREE_CODE (parm))
12853         return 1;
12854
12855       if (TYPE_PTRMEMFUNC_P (parm))
12856         {
12857           if (!TYPE_PTRMEMFUNC_P (arg))
12858             return 1;
12859
12860           return unify (tparms, targs,
12861                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
12862                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
12863                         strict);
12864         }
12865
12866       if (CLASSTYPE_TEMPLATE_INFO (parm))
12867         {
12868           tree t = NULL_TREE;
12869
12870           if (strict_in & UNIFY_ALLOW_DERIVED)
12871             {
12872               /* First, we try to unify the PARM and ARG directly.  */
12873               t = try_class_unification (tparms, targs,
12874                                          parm, arg);
12875
12876               if (!t)
12877                 {
12878                   /* Fallback to the special case allowed in
12879                      [temp.deduct.call]:
12880
12881                        If P is a class, and P has the form
12882                        template-id, then A can be a derived class of
12883                        the deduced A.  Likewise, if P is a pointer to
12884                        a class of the form template-id, A can be a
12885                        pointer to a derived class pointed to by the
12886                        deduced A.  */
12887                   t = get_template_base (tparms, targs, parm, arg);
12888
12889                   if (!t)
12890                     return 1;
12891                 }
12892             }
12893           else if (CLASSTYPE_TEMPLATE_INFO (arg)
12894                    && (CLASSTYPE_TI_TEMPLATE (parm)
12895                        == CLASSTYPE_TI_TEMPLATE (arg)))
12896             /* Perhaps PARM is something like S<U> and ARG is S<int>.
12897                Then, we should unify `int' and `U'.  */
12898             t = arg;
12899           else
12900             /* There's no chance of unification succeeding.  */
12901             return 1;
12902
12903           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12904                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12905         }
12906       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12907         return 1;
12908       return 0;
12909
12910     case METHOD_TYPE:
12911     case FUNCTION_TYPE:
12912       if (TREE_CODE (arg) != TREE_CODE (parm))
12913         return 1;
12914
12915       /* CV qualifications for methods can never be deduced, they must
12916          match exactly.  We need to check them explicitly here,
12917          because type_unification_real treats them as any other
12918          cvqualified parameter.  */
12919       if (TREE_CODE (parm) == METHOD_TYPE
12920           && (!check_cv_quals_for_unify
12921               (UNIFY_ALLOW_NONE,
12922                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12923                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12924         return 1;
12925
12926       if (unify (tparms, targs, TREE_TYPE (parm),
12927                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12928         return 1;
12929       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12930                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12931                                     LOOKUP_NORMAL);
12932
12933     case OFFSET_TYPE:
12934       /* Unify a pointer to member with a pointer to member function, which
12935          deduces the type of the member as a function type. */
12936       if (TYPE_PTRMEMFUNC_P (arg))
12937         {
12938           tree method_type;
12939           tree fntype;
12940           cp_cv_quals cv_quals;
12941
12942           /* Check top-level cv qualifiers */
12943           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12944             return 1;
12945
12946           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12947                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12948             return 1;
12949
12950           /* Determine the type of the function we are unifying against. */
12951           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12952           fntype =
12953             build_function_type (TREE_TYPE (method_type),
12954                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12955
12956           /* Extract the cv-qualifiers of the member function from the
12957              implicit object parameter and place them on the function
12958              type to be restored later. */
12959           cv_quals =
12960             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12961           fntype = build_qualified_type (fntype, cv_quals);
12962           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12963         }
12964
12965       if (TREE_CODE (arg) != OFFSET_TYPE)
12966         return 1;
12967       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12968                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
12969         return 1;
12970       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12971                     strict);
12972
12973     case CONST_DECL:
12974       if (DECL_TEMPLATE_PARM_P (parm))
12975         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
12976       if (arg != integral_constant_value (parm))
12977         return 1;
12978       return 0;
12979
12980     case FIELD_DECL:
12981     case TEMPLATE_DECL:
12982       /* Matched cases are handled by the ARG == PARM test above.  */
12983       return 1;
12984
12985     case TYPE_ARGUMENT_PACK:
12986     case NONTYPE_ARGUMENT_PACK:
12987       {
12988         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12989         tree packed_args = ARGUMENT_PACK_ARGS (arg);
12990         int i, len = TREE_VEC_LENGTH (packed_parms);
12991         int argslen = TREE_VEC_LENGTH (packed_args);
12992         int parm_variadic_p = 0;
12993
12994         /* Check if the parameters end in a pack, making them variadic.  */
12995         if (len > 0 
12996             && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12997           parm_variadic_p = 1;
12998
12999         /* If we don't have enough arguments to satisfy the parameters
13000            (not counting the pack expression at the end), or we have
13001            too many arguments for a parameter list that doesn't end in
13002            a pack expression, we can't unify.  */
13003         if (argslen < (len - parm_variadic_p)
13004             || (argslen > len && !parm_variadic_p))
13005           return 1;
13006
13007         /* Unify all of the parameters that precede the (optional)
13008            pack expression.  */
13009         for (i = 0; i < len - parm_variadic_p; ++i)
13010           {
13011             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13012                        TREE_VEC_ELT (packed_args, i), strict))
13013               return 1;
13014           }
13015
13016         if (parm_variadic_p)
13017           return unify_pack_expansion (tparms, targs, 
13018                                        packed_parms, packed_args,
13019                                        strict, /*call_args_p=*/false,
13020                                        /*subr=*/false);
13021         return 0;
13022       }
13023
13024       break;
13025
13026     case TYPEOF_TYPE:
13027     case DECLTYPE_TYPE:
13028       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13029          nodes.  */
13030       return 0;
13031
13032     default:
13033       gcc_assert (EXPR_P (parm));
13034
13035       /* We must be looking at an expression.  This can happen with
13036          something like:
13037
13038            template <int I>
13039            void foo(S<I>, S<I + 2>);
13040
13041          This is a "nondeduced context":
13042
13043            [deduct.type]
13044
13045            The nondeduced contexts are:
13046
13047            --A type that is a template-id in which one or more of
13048              the template-arguments is an expression that references
13049              a template-parameter.
13050
13051          In these cases, we assume deduction succeeded, but don't
13052          actually infer any unifications.  */
13053
13054       if (!uses_template_parms (parm)
13055           && !template_args_equal (parm, arg))
13056         return 1;
13057       else
13058         return 0;
13059     }
13060 }
13061 \f
13062 /* Note that DECL can be defined in this translation unit, if
13063    required.  */
13064
13065 static void
13066 mark_definable (tree decl)
13067 {
13068   tree clone;
13069   DECL_NOT_REALLY_EXTERN (decl) = 1;
13070   FOR_EACH_CLONE (clone, decl)
13071     DECL_NOT_REALLY_EXTERN (clone) = 1;
13072 }
13073
13074 /* Called if RESULT is explicitly instantiated, or is a member of an
13075    explicitly instantiated class.  */
13076
13077 void
13078 mark_decl_instantiated (tree result, int extern_p)
13079 {
13080   SET_DECL_EXPLICIT_INSTANTIATION (result);
13081
13082   /* If this entity has already been written out, it's too late to
13083      make any modifications.  */
13084   if (TREE_ASM_WRITTEN (result))
13085     return;
13086
13087   if (TREE_CODE (result) != FUNCTION_DECL)
13088     /* The TREE_PUBLIC flag for function declarations will have been
13089        set correctly by tsubst.  */
13090     TREE_PUBLIC (result) = 1;
13091
13092   /* This might have been set by an earlier implicit instantiation.  */
13093   DECL_COMDAT (result) = 0;
13094
13095   if (extern_p)
13096     DECL_NOT_REALLY_EXTERN (result) = 0;
13097   else
13098     {
13099       mark_definable (result);
13100       /* Always make artificials weak.  */
13101       if (DECL_ARTIFICIAL (result) && flag_weak)
13102         comdat_linkage (result);
13103       /* For WIN32 we also want to put explicit instantiations in
13104          linkonce sections.  */
13105       else if (TREE_PUBLIC (result))
13106         maybe_make_one_only (result);
13107     }
13108
13109   /* If EXTERN_P, then this function will not be emitted -- unless
13110      followed by an explicit instantiation, at which point its linkage
13111      will be adjusted.  If !EXTERN_P, then this function will be
13112      emitted here.  In neither circumstance do we want
13113      import_export_decl to adjust the linkage.  */
13114   DECL_INTERFACE_KNOWN (result) = 1;
13115 }
13116
13117 /* Given two function templates PAT1 and PAT2, return:
13118
13119    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13120    -1 if PAT2 is more specialized than PAT1.
13121    0 if neither is more specialized.
13122
13123    LEN indicates the number of parameters we should consider
13124    (defaulted parameters should not be considered).
13125
13126    The 1998 std underspecified function template partial ordering, and
13127    DR214 addresses the issue.  We take pairs of arguments, one from
13128    each of the templates, and deduce them against each other.  One of
13129    the templates will be more specialized if all the *other*
13130    template's arguments deduce against its arguments and at least one
13131    of its arguments *does* *not* deduce against the other template's
13132    corresponding argument.  Deduction is done as for class templates.
13133    The arguments used in deduction have reference and top level cv
13134    qualifiers removed.  Iff both arguments were originally reference
13135    types *and* deduction succeeds in both directions, the template
13136    with the more cv-qualified argument wins for that pairing (if
13137    neither is more cv-qualified, they both are equal).  Unlike regular
13138    deduction, after all the arguments have been deduced in this way,
13139    we do *not* verify the deduced template argument values can be
13140    substituted into non-deduced contexts, nor do we have to verify
13141    that all template arguments have been deduced.  */
13142
13143 int
13144 more_specialized_fn (tree pat1, tree pat2, int len)
13145 {
13146   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13147   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13148   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13149   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13150   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13151   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13152   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13153   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13154   int better1 = 0;
13155   int better2 = 0;
13156
13157   /* Remove the this parameter from non-static member functions.  If
13158      one is a non-static member function and the other is not a static
13159      member function, remove the first parameter from that function
13160      also.  This situation occurs for operator functions where we
13161      locate both a member function (with this pointer) and non-member
13162      operator (with explicit first operand).  */
13163   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13164     {
13165       len--; /* LEN is the number of significant arguments for DECL1 */
13166       args1 = TREE_CHAIN (args1);
13167       if (!DECL_STATIC_FUNCTION_P (decl2))
13168         args2 = TREE_CHAIN (args2);
13169     }
13170   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13171     {
13172       args2 = TREE_CHAIN (args2);
13173       if (!DECL_STATIC_FUNCTION_P (decl1))
13174         {
13175           len--;
13176           args1 = TREE_CHAIN (args1);
13177         }
13178     }
13179
13180   /* If only one is a conversion operator, they are unordered.  */
13181   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13182     return 0;
13183
13184   /* Consider the return type for a conversion function */
13185   if (DECL_CONV_FN_P (decl1))
13186     {
13187       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13188       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13189       len++;
13190     }
13191
13192   processing_template_decl++;
13193
13194   while (len--)
13195     {
13196       tree arg1 = TREE_VALUE (args1);
13197       tree arg2 = TREE_VALUE (args2);
13198       int deduce1, deduce2;
13199       int quals1 = -1;
13200       int quals2 = -1;
13201
13202       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13203           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13204         {
13205           /* When both arguments are pack expansions, we need only
13206              unify the patterns themselves.  */
13207           arg1 = PACK_EXPANSION_PATTERN (arg1);
13208           arg2 = PACK_EXPANSION_PATTERN (arg2);
13209
13210           /* This is the last comparison we need to do.  */
13211           len = 0;
13212         }
13213
13214       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13215         {
13216           arg1 = TREE_TYPE (arg1);
13217           quals1 = cp_type_quals (arg1);
13218         }
13219
13220       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13221         {
13222           arg2 = TREE_TYPE (arg2);
13223           quals2 = cp_type_quals (arg2);
13224         }
13225
13226       if ((quals1 < 0) != (quals2 < 0))
13227         {
13228           /* Only of the args is a reference, see if we should apply
13229              array/function pointer decay to it.  This is not part of
13230              DR214, but is, IMHO, consistent with the deduction rules
13231              for the function call itself, and with our earlier
13232              implementation of the underspecified partial ordering
13233              rules.  (nathan).  */
13234           if (quals1 >= 0)
13235             {
13236               switch (TREE_CODE (arg1))
13237                 {
13238                 case ARRAY_TYPE:
13239                   arg1 = TREE_TYPE (arg1);
13240                   /* FALLTHROUGH. */
13241                 case FUNCTION_TYPE:
13242                   arg1 = build_pointer_type (arg1);
13243                   break;
13244
13245                 default:
13246                   break;
13247                 }
13248             }
13249           else
13250             {
13251               switch (TREE_CODE (arg2))
13252                 {
13253                 case ARRAY_TYPE:
13254                   arg2 = TREE_TYPE (arg2);
13255                   /* FALLTHROUGH. */
13256                 case FUNCTION_TYPE:
13257                   arg2 = build_pointer_type (arg2);
13258                   break;
13259
13260                 default:
13261                   break;
13262                 }
13263             }
13264         }
13265
13266       arg1 = TYPE_MAIN_VARIANT (arg1);
13267       arg2 = TYPE_MAIN_VARIANT (arg2);
13268
13269       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13270         {
13271           int i, len2 = list_length (args2);
13272           tree parmvec = make_tree_vec (1);
13273           tree argvec = make_tree_vec (len2);
13274           tree ta = args2;
13275
13276           /* Setup the parameter vector, which contains only ARG1.  */
13277           TREE_VEC_ELT (parmvec, 0) = arg1;
13278
13279           /* Setup the argument vector, which contains the remaining
13280              arguments.  */
13281           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13282             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13283
13284           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13285                                            argvec, UNIFY_ALLOW_NONE, 
13286                                            /*call_args_p=*/false, 
13287                                            /*subr=*/0);
13288
13289           /* We cannot deduce in the other direction, because ARG1 is
13290              a pack expansion but ARG2 is not.  */
13291           deduce2 = 0;
13292         }
13293       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13294         {
13295           int i, len1 = list_length (args1);
13296           tree parmvec = make_tree_vec (1);
13297           tree argvec = make_tree_vec (len1);
13298           tree ta = args1;
13299
13300           /* Setup the parameter vector, which contains only ARG1.  */
13301           TREE_VEC_ELT (parmvec, 0) = arg2;
13302
13303           /* Setup the argument vector, which contains the remaining
13304              arguments.  */
13305           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13306             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13307
13308           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13309                                            argvec, UNIFY_ALLOW_NONE, 
13310                                            /*call_args_p=*/false, 
13311                                            /*subr=*/0);
13312
13313           /* We cannot deduce in the other direction, because ARG2 is
13314              a pack expansion but ARG1 is not.*/
13315           deduce1 = 0;
13316         }
13317
13318       else
13319         {
13320           /* The normal case, where neither argument is a pack
13321              expansion.  */
13322           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13323           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13324         }
13325
13326       if (!deduce1)
13327         better2 = -1;
13328       if (!deduce2)
13329         better1 = -1;
13330       if (better1 < 0 && better2 < 0)
13331         /* We've failed to deduce something in either direction.
13332            These must be unordered.  */
13333         break;
13334
13335       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13336         {
13337           /* Deduces in both directions, see if quals can
13338              disambiguate.  Pretend the worse one failed to deduce. */
13339           if ((quals1 & quals2) == quals2)
13340             deduce1 = 0;
13341           if ((quals1 & quals2) == quals1)
13342             deduce2 = 0;
13343         }
13344       if (deduce1 && !deduce2 && !better2)
13345         better2 = 1;
13346       if (deduce2 && !deduce1 && !better1)
13347         better1 = 1;
13348
13349       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13350           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13351         /* We have already processed all of the arguments in our
13352            handing of the pack expansion type.  */
13353         len = 0;
13354
13355       args1 = TREE_CHAIN (args1);
13356       args2 = TREE_CHAIN (args2);
13357     }
13358
13359   processing_template_decl--;
13360
13361   /* All things being equal, if the next argument is a pack expansion
13362      for one function but not for the other, prefer the
13363      non-variadic function.  */
13364   if ((better1 > 0) - (better2 > 0) == 0
13365       && args1 && TREE_VALUE (args1)
13366       && args2 && TREE_VALUE (args2))
13367     {
13368       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13369         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13370       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13371         return 1;
13372     }
13373
13374   return (better1 > 0) - (better2 > 0);
13375 }
13376
13377 /* Determine which of two partial specializations is more specialized.
13378
13379    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13380    to the first partial specialization.  The TREE_VALUE is the
13381    innermost set of template parameters for the partial
13382    specialization.  PAT2 is similar, but for the second template.
13383
13384    Return 1 if the first partial specialization is more specialized;
13385    -1 if the second is more specialized; 0 if neither is more
13386    specialized.
13387
13388    See [temp.class.order] for information about determining which of
13389    two templates is more specialized.  */
13390
13391 static int
13392 more_specialized_class (tree pat1, tree pat2)
13393 {
13394   tree targs;
13395   tree tmpl1, tmpl2;
13396   int winner = 0;
13397   bool any_deductions = false;
13398
13399   tmpl1 = TREE_TYPE (pat1);
13400   tmpl2 = TREE_TYPE (pat2);
13401
13402   /* Just like what happens for functions, if we are ordering between
13403      different class template specializations, we may encounter dependent
13404      types in the arguments, and we need our dependency check functions
13405      to behave correctly.  */
13406   ++processing_template_decl;
13407   targs = get_class_bindings (TREE_VALUE (pat1),
13408                               CLASSTYPE_TI_ARGS (tmpl1),
13409                               CLASSTYPE_TI_ARGS (tmpl2));
13410   if (targs)
13411     {
13412       --winner;
13413       any_deductions = true;
13414     }
13415
13416   targs = get_class_bindings (TREE_VALUE (pat2),
13417                               CLASSTYPE_TI_ARGS (tmpl2),
13418                               CLASSTYPE_TI_ARGS (tmpl1));
13419   if (targs)
13420     {
13421       ++winner;
13422       any_deductions = true;
13423     }
13424   --processing_template_decl;
13425
13426   /* In the case of a tie where at least one of the class templates
13427      has a parameter pack at the end, the template with the most
13428      non-packed parameters wins.  */
13429   if (winner == 0
13430       && any_deductions
13431       && (template_args_variadic_p (TREE_PURPOSE (pat1))
13432           || template_args_variadic_p (TREE_PURPOSE (pat2))))
13433     {
13434       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13435       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13436       int len1 = TREE_VEC_LENGTH (args1);
13437       int len2 = TREE_VEC_LENGTH (args2);
13438
13439       /* We don't count the pack expansion at the end.  */
13440       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13441         --len1;
13442       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13443         --len2;
13444
13445       if (len1 > len2)
13446         return 1;
13447       else if (len1 < len2)
13448         return -1;
13449     }
13450
13451   return winner;
13452 }
13453
13454 /* Return the template arguments that will produce the function signature
13455    DECL from the function template FN, with the explicit template
13456    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
13457    also match.  Return NULL_TREE if no satisfactory arguments could be
13458    found.  */
13459
13460 static tree
13461 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13462 {
13463   int ntparms = DECL_NTPARMS (fn);
13464   tree targs = make_tree_vec (ntparms);
13465   tree decl_type;
13466   tree decl_arg_types;
13467
13468   /* Substitute the explicit template arguments into the type of DECL.
13469      The call to fn_type_unification will handle substitution into the
13470      FN.  */
13471   decl_type = TREE_TYPE (decl);
13472   if (explicit_args && uses_template_parms (decl_type))
13473     {
13474       tree tmpl;
13475       tree converted_args;
13476
13477       if (DECL_TEMPLATE_INFO (decl))
13478         tmpl = DECL_TI_TEMPLATE (decl);
13479       else
13480         /* We can get here for some invalid specializations.  */
13481         return NULL_TREE;
13482
13483       converted_args
13484         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13485                                  explicit_args, NULL_TREE,
13486                                  tf_none,
13487                                  /*require_all_args=*/false,
13488                                  /*use_default_args=*/false);
13489       if (converted_args == error_mark_node)
13490         return NULL_TREE;
13491
13492       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13493       if (decl_type == error_mark_node)
13494         return NULL_TREE;
13495     }
13496
13497   /* Never do unification on the 'this' parameter.  */
13498   decl_arg_types = skip_artificial_parms_for (decl, 
13499                                               TYPE_ARG_TYPES (decl_type));
13500
13501   if (fn_type_unification (fn, explicit_args, targs,
13502                            decl_arg_types,
13503                            (check_rettype || DECL_CONV_FN_P (fn)
13504                             ? TREE_TYPE (decl_type) : NULL_TREE),
13505                            DEDUCE_EXACT, LOOKUP_NORMAL))
13506     return NULL_TREE;
13507
13508   return targs;
13509 }
13510
13511 /* Return the innermost template arguments that, when applied to a
13512    template specialization whose innermost template parameters are
13513    TPARMS, and whose specialization arguments are PARMS, yield the
13514    ARGS.
13515
13516    For example, suppose we have:
13517
13518      template <class T, class U> struct S {};
13519      template <class T> struct S<T*, int> {};
13520
13521    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
13522    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13523    int}.  The resulting vector will be {double}, indicating that `T'
13524    is bound to `double'.  */
13525
13526 static tree
13527 get_class_bindings (tree tparms, tree spec_args, tree args)
13528 {
13529   int i, ntparms = TREE_VEC_LENGTH (tparms);
13530   tree deduced_args;
13531   tree innermost_deduced_args;
13532
13533   innermost_deduced_args = make_tree_vec (ntparms);
13534   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13535     {
13536       deduced_args = copy_node (args);
13537       SET_TMPL_ARGS_LEVEL (deduced_args,
13538                            TMPL_ARGS_DEPTH (deduced_args),
13539                            innermost_deduced_args);
13540     }
13541   else
13542     deduced_args = innermost_deduced_args;
13543
13544   if (unify (tparms, deduced_args,
13545              INNERMOST_TEMPLATE_ARGS (spec_args),
13546              INNERMOST_TEMPLATE_ARGS (args),
13547              UNIFY_ALLOW_NONE))
13548     return NULL_TREE;
13549
13550   for (i =  0; i < ntparms; ++i)
13551     if (! TREE_VEC_ELT (innermost_deduced_args, i))
13552       return NULL_TREE;
13553
13554   /* Verify that nondeduced template arguments agree with the type
13555      obtained from argument deduction.
13556
13557      For example:
13558
13559        struct A { typedef int X; };
13560        template <class T, class U> struct C {};
13561        template <class T> struct C<T, typename T::X> {};
13562
13563      Then with the instantiation `C<A, int>', we can deduce that
13564      `T' is `A' but unify () does not check whether `typename T::X'
13565      is `int'.  */
13566   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13567   if (spec_args == error_mark_node
13568       /* We only need to check the innermost arguments; the other
13569          arguments will always agree.  */
13570       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13571                               INNERMOST_TEMPLATE_ARGS (args)))
13572     return NULL_TREE;
13573
13574   return deduced_args;
13575 }
13576
13577 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
13578    Return the TREE_LIST node with the most specialized template, if
13579    any.  If there is no most specialized template, the error_mark_node
13580    is returned.
13581
13582    Note that this function does not look at, or modify, the
13583    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
13584    returned is one of the elements of INSTANTIATIONS, callers may
13585    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13586    and retrieve it from the value returned.  */
13587
13588 tree
13589 most_specialized_instantiation (tree templates)
13590 {
13591   tree fn, champ;
13592
13593   ++processing_template_decl;
13594
13595   champ = templates;
13596   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13597     {
13598       int fate = 0;
13599
13600       if (get_bindings (TREE_VALUE (champ),
13601                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13602                         NULL_TREE, /*check_ret=*/false))
13603         fate--;
13604
13605       if (get_bindings (TREE_VALUE (fn),
13606                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13607                         NULL_TREE, /*check_ret=*/false))
13608         fate++;
13609
13610       if (fate == -1)
13611         champ = fn;
13612       else if (!fate)
13613         {
13614           /* Equally specialized, move to next function.  If there
13615              is no next function, nothing's most specialized.  */
13616           fn = TREE_CHAIN (fn);
13617           champ = fn;
13618           if (!fn)
13619             break;
13620         }
13621     }
13622
13623   if (champ)
13624     /* Now verify that champ is better than everything earlier in the
13625        instantiation list.  */
13626     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13627       if (get_bindings (TREE_VALUE (champ),
13628                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13629                         NULL_TREE, /*check_ret=*/false)
13630           || !get_bindings (TREE_VALUE (fn),
13631                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13632                             NULL_TREE, /*check_ret=*/false))
13633         {
13634           champ = NULL_TREE;
13635           break;
13636         }
13637
13638   processing_template_decl--;
13639
13640   if (!champ)
13641     return error_mark_node;
13642
13643   return champ;
13644 }
13645
13646 /* If DECL is a specialization of some template, return the most
13647    general such template.  Otherwise, returns NULL_TREE.
13648
13649    For example, given:
13650
13651      template <class T> struct S { template <class U> void f(U); };
13652
13653    if TMPL is `template <class U> void S<int>::f(U)' this will return
13654    the full template.  This function will not trace past partial
13655    specializations, however.  For example, given in addition:
13656
13657      template <class T> struct S<T*> { template <class U> void f(U); };
13658
13659    if TMPL is `template <class U> void S<int*>::f(U)' this will return
13660    `template <class T> template <class U> S<T*>::f(U)'.  */
13661
13662 tree
13663 most_general_template (tree decl)
13664 {
13665   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13666      an immediate specialization.  */
13667   if (TREE_CODE (decl) == FUNCTION_DECL)
13668     {
13669       if (DECL_TEMPLATE_INFO (decl)) {
13670         decl = DECL_TI_TEMPLATE (decl);
13671
13672         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13673            template friend.  */
13674         if (TREE_CODE (decl) != TEMPLATE_DECL)
13675           return NULL_TREE;
13676       } else
13677         return NULL_TREE;
13678     }
13679
13680   /* Look for more and more general templates.  */
13681   while (DECL_TEMPLATE_INFO (decl))
13682     {
13683       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13684          (See cp-tree.h for details.)  */
13685       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13686         break;
13687
13688       if (CLASS_TYPE_P (TREE_TYPE (decl))
13689           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13690         break;
13691
13692       /* Stop if we run into an explicitly specialized class template.  */
13693       if (!DECL_NAMESPACE_SCOPE_P (decl)
13694           && DECL_CONTEXT (decl)
13695           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13696         break;
13697
13698       decl = DECL_TI_TEMPLATE (decl);
13699     }
13700
13701   return decl;
13702 }
13703
13704 /* Return the most specialized of the class template partial
13705    specializations of TMPL which can produce TYPE, a specialization of
13706    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
13707    a _TYPE node corresponding to the partial specialization, while the
13708    TREE_PURPOSE is the set of template arguments that must be
13709    substituted into the TREE_TYPE in order to generate TYPE.
13710
13711    If the choice of partial specialization is ambiguous, a diagnostic
13712    is issued, and the error_mark_node is returned.  If there are no
13713    partial specializations of TMPL matching TYPE, then NULL_TREE is
13714    returned.  */
13715
13716 static tree
13717 most_specialized_class (tree type, tree tmpl)
13718 {
13719   tree list = NULL_TREE;
13720   tree t;
13721   tree champ;
13722   int fate;
13723   bool ambiguous_p;
13724   tree args;
13725   tree outer_args = NULL_TREE;
13726
13727   tmpl = most_general_template (tmpl);
13728   args = CLASSTYPE_TI_ARGS (type);
13729
13730   /* For determining which partial specialization to use, only the
13731      innermost args are interesting.  */
13732   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13733     {
13734       outer_args = strip_innermost_template_args (args, 1);
13735       args = INNERMOST_TEMPLATE_ARGS (args);
13736     }
13737
13738   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13739     {
13740       tree partial_spec_args;
13741       tree spec_args;
13742       tree parms = TREE_VALUE (t);
13743
13744       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13745       if (outer_args)
13746         {
13747           int i;
13748
13749           ++processing_template_decl;
13750
13751           /* Discard the outer levels of args, and then substitute in the
13752              template args from the enclosing class.  */
13753           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
13754           partial_spec_args = tsubst_template_args
13755             (partial_spec_args, outer_args, tf_none, NULL_TREE);
13756
13757           /* PARMS already refers to just the innermost parms, but the
13758              template parms in partial_spec_args had their levels lowered
13759              by tsubst, so we need to do the same for the parm list.  We
13760              can't just tsubst the TREE_VEC itself, as tsubst wants to
13761              treat a TREE_VEC as an argument vector.  */
13762           parms = copy_node (parms);
13763           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
13764             TREE_VEC_ELT (parms, i) =
13765               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
13766
13767           --processing_template_decl;
13768         }
13769       spec_args = get_class_bindings (parms,
13770                                       partial_spec_args,
13771                                       args);
13772       if (spec_args)
13773         {
13774           if (outer_args)
13775             spec_args = add_to_template_args (outer_args, spec_args);
13776           list = tree_cons (spec_args, TREE_VALUE (t), list);
13777           TREE_TYPE (list) = TREE_TYPE (t);
13778         }
13779     }
13780
13781   if (! list)
13782     return NULL_TREE;
13783
13784   ambiguous_p = false;
13785   t = list;
13786   champ = t;
13787   t = TREE_CHAIN (t);
13788   for (; t; t = TREE_CHAIN (t))
13789     {
13790       fate = more_specialized_class (champ, t);
13791       if (fate == 1)
13792         ;
13793       else
13794         {
13795           if (fate == 0)
13796             {
13797               t = TREE_CHAIN (t);
13798               if (! t)
13799                 {
13800                   ambiguous_p = true;
13801                   break;
13802                 }
13803             }
13804           champ = t;
13805         }
13806     }
13807
13808   if (!ambiguous_p)
13809     for (t = list; t && t != champ; t = TREE_CHAIN (t))
13810       {
13811         fate = more_specialized_class (champ, t);
13812         if (fate != 1)
13813           {
13814             ambiguous_p = true;
13815             break;
13816           }
13817       }
13818
13819   if (ambiguous_p)
13820     {
13821       const char *str = "candidates are:";
13822       error ("ambiguous class template instantiation for %q#T", type);
13823       for (t = list; t; t = TREE_CHAIN (t))
13824         {
13825           error ("%s %+#T", str, TREE_TYPE (t));
13826           str = "               ";
13827         }
13828       return error_mark_node;
13829     }
13830
13831   return champ;
13832 }
13833
13834 /* Explicitly instantiate DECL.  */
13835
13836 void
13837 do_decl_instantiation (tree decl, tree storage)
13838 {
13839   tree result = NULL_TREE;
13840   int extern_p = 0;
13841
13842   if (!decl || decl == error_mark_node)
13843     /* An error occurred, for which grokdeclarator has already issued
13844        an appropriate message.  */
13845     return;
13846   else if (! DECL_LANG_SPECIFIC (decl))
13847     {
13848       error ("explicit instantiation of non-template %q#D", decl);
13849       return;
13850     }
13851   else if (TREE_CODE (decl) == VAR_DECL)
13852     {
13853       /* There is an asymmetry here in the way VAR_DECLs and
13854          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
13855          the latter, the DECL we get back will be marked as a
13856          template instantiation, and the appropriate
13857          DECL_TEMPLATE_INFO will be set up.  This does not happen for
13858          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
13859          should handle VAR_DECLs as it currently handles
13860          FUNCTION_DECLs.  */
13861       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13862       if (!result || TREE_CODE (result) != VAR_DECL)
13863         {
13864           error ("no matching template for %qD found", decl);
13865           return;
13866         }
13867       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13868         {
13869           error ("type %qT for explicit instantiation %qD does not match "
13870                  "declared type %qT", TREE_TYPE (result), decl,
13871                  TREE_TYPE (decl));
13872           return;
13873         }
13874     }
13875   else if (TREE_CODE (decl) != FUNCTION_DECL)
13876     {
13877       error ("explicit instantiation of %q#D", decl);
13878       return;
13879     }
13880   else
13881     result = decl;
13882
13883   /* Check for various error cases.  Note that if the explicit
13884      instantiation is valid the RESULT will currently be marked as an
13885      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13886      until we get here.  */
13887
13888   if (DECL_TEMPLATE_SPECIALIZATION (result))
13889     {
13890       /* DR 259 [temp.spec].
13891
13892          Both an explicit instantiation and a declaration of an explicit
13893          specialization shall not appear in a program unless the explicit
13894          instantiation follows a declaration of the explicit specialization.
13895
13896          For a given set of template parameters, if an explicit
13897          instantiation of a template appears after a declaration of an
13898          explicit specialization for that template, the explicit
13899          instantiation has no effect.  */
13900       return;
13901     }
13902   else if (DECL_EXPLICIT_INSTANTIATION (result))
13903     {
13904       /* [temp.spec]
13905
13906          No program shall explicitly instantiate any template more
13907          than once.
13908
13909          We check DECL_NOT_REALLY_EXTERN so as not to complain when
13910          the first instantiation was `extern' and the second is not,
13911          and EXTERN_P for the opposite case.  */
13912       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13913         pedwarn ("duplicate explicit instantiation of %q#D", result);
13914       /* If an "extern" explicit instantiation follows an ordinary
13915          explicit instantiation, the template is instantiated.  */
13916       if (extern_p)
13917         return;
13918     }
13919   else if (!DECL_IMPLICIT_INSTANTIATION (result))
13920     {
13921       error ("no matching template for %qD found", result);
13922       return;
13923     }
13924   else if (!DECL_TEMPLATE_INFO (result))
13925     {
13926       pedwarn ("explicit instantiation of non-template %q#D", result);
13927       return;
13928     }
13929
13930   if (storage == NULL_TREE)
13931     ;
13932   else if (storage == ridpointers[(int) RID_EXTERN])
13933     {
13934       if (pedantic && !in_system_header)
13935         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13936                  "instantiations");
13937       extern_p = 1;
13938     }
13939   else
13940     error ("storage class %qD applied to template instantiation", storage);
13941
13942   check_explicit_instantiation_namespace (result);
13943   mark_decl_instantiated (result, extern_p);
13944   if (! extern_p)
13945     instantiate_decl (result, /*defer_ok=*/1,
13946                       /*expl_inst_class_mem_p=*/false);
13947 }
13948
13949 static void
13950 mark_class_instantiated (tree t, int extern_p)
13951 {
13952   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
13953   SET_CLASSTYPE_INTERFACE_KNOWN (t);
13954   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
13955   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13956   if (! extern_p)
13957     {
13958       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13959       rest_of_type_compilation (t, 1);
13960     }
13961 }
13962
13963 /* Called from do_type_instantiation through binding_table_foreach to
13964    do recursive instantiation for the type bound in ENTRY.  */
13965 static void
13966 bt_instantiate_type_proc (binding_entry entry, void *data)
13967 {
13968   tree storage = *(tree *) data;
13969
13970   if (IS_AGGR_TYPE (entry->type)
13971       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13972     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13973 }
13974
13975 /* Called from do_type_instantiation to instantiate a member
13976    (a member function or a static member variable) of an
13977    explicitly instantiated class template.  */
13978 static void
13979 instantiate_class_member (tree decl, int extern_p)
13980 {
13981   mark_decl_instantiated (decl, extern_p);
13982   if (! extern_p)
13983     instantiate_decl (decl, /*defer_ok=*/1,
13984                       /*expl_inst_class_mem_p=*/true);
13985 }
13986
13987 /* Perform an explicit instantiation of template class T.  STORAGE, if
13988    non-null, is the RID for extern, inline or static.  COMPLAIN is
13989    nonzero if this is called from the parser, zero if called recursively,
13990    since the standard is unclear (as detailed below).  */
13991
13992 void
13993 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
13994 {
13995   int extern_p = 0;
13996   int nomem_p = 0;
13997   int static_p = 0;
13998   int previous_instantiation_extern_p = 0;
13999
14000   if (TREE_CODE (t) == TYPE_DECL)
14001     t = TREE_TYPE (t);
14002
14003   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14004     {
14005       error ("explicit instantiation of non-template type %qT", t);
14006       return;
14007     }
14008
14009   complete_type (t);
14010
14011   if (!COMPLETE_TYPE_P (t))
14012     {
14013       if (complain & tf_error)
14014         error ("explicit instantiation of %q#T before definition of template",
14015                t);
14016       return;
14017     }
14018
14019   if (storage != NULL_TREE)
14020     {
14021       if (pedantic && !in_system_header)
14022         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14023                 storage);
14024
14025       if (storage == ridpointers[(int) RID_INLINE])
14026         nomem_p = 1;
14027       else if (storage == ridpointers[(int) RID_EXTERN])
14028         extern_p = 1;
14029       else if (storage == ridpointers[(int) RID_STATIC])
14030         static_p = 1;
14031       else
14032         {
14033           error ("storage class %qD applied to template instantiation",
14034                  storage);
14035           extern_p = 0;
14036         }
14037     }
14038
14039   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14040     {
14041       /* DR 259 [temp.spec].
14042
14043          Both an explicit instantiation and a declaration of an explicit
14044          specialization shall not appear in a program unless the explicit
14045          instantiation follows a declaration of the explicit specialization.
14046
14047          For a given set of template parameters, if an explicit
14048          instantiation of a template appears after a declaration of an
14049          explicit specialization for that template, the explicit
14050          instantiation has no effect.  */
14051       return;
14052     }
14053   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14054     {
14055       /* [temp.spec]
14056
14057          No program shall explicitly instantiate any template more
14058          than once.
14059
14060          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14061          instantiation was `extern'.  If EXTERN_P then the second is.
14062          These cases are OK.  */
14063       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14064
14065       if (!previous_instantiation_extern_p && !extern_p
14066           && (complain & tf_error))
14067         pedwarn ("duplicate explicit instantiation of %q#T", t);
14068
14069       /* If we've already instantiated the template, just return now.  */
14070       if (!CLASSTYPE_INTERFACE_ONLY (t))
14071         return;
14072     }
14073
14074   check_explicit_instantiation_namespace (TYPE_NAME (t));
14075   mark_class_instantiated (t, extern_p);
14076
14077   if (nomem_p)
14078     return;
14079
14080   {
14081     tree tmp;
14082
14083     /* In contrast to implicit instantiation, where only the
14084        declarations, and not the definitions, of members are
14085        instantiated, we have here:
14086
14087          [temp.explicit]
14088
14089          The explicit instantiation of a class template specialization
14090          implies the instantiation of all of its members not
14091          previously explicitly specialized in the translation unit
14092          containing the explicit instantiation.
14093
14094        Of course, we can't instantiate member template classes, since
14095        we don't have any arguments for them.  Note that the standard
14096        is unclear on whether the instantiation of the members are
14097        *explicit* instantiations or not.  However, the most natural
14098        interpretation is that it should be an explicit instantiation.  */
14099
14100     if (! static_p)
14101       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14102         if (TREE_CODE (tmp) == FUNCTION_DECL
14103             && DECL_TEMPLATE_INSTANTIATION (tmp))
14104           instantiate_class_member (tmp, extern_p);
14105
14106     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14107       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14108         instantiate_class_member (tmp, extern_p);
14109
14110     if (CLASSTYPE_NESTED_UTDS (t))
14111       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14112                              bt_instantiate_type_proc, &storage);
14113   }
14114 }
14115
14116 /* Given a function DECL, which is a specialization of TMPL, modify
14117    DECL to be a re-instantiation of TMPL with the same template
14118    arguments.  TMPL should be the template into which tsubst'ing
14119    should occur for DECL, not the most general template.
14120
14121    One reason for doing this is a scenario like this:
14122
14123      template <class T>
14124      void f(const T&, int i);
14125
14126      void g() { f(3, 7); }
14127
14128      template <class T>
14129      void f(const T& t, const int i) { }
14130
14131    Note that when the template is first instantiated, with
14132    instantiate_template, the resulting DECL will have no name for the
14133    first parameter, and the wrong type for the second.  So, when we go
14134    to instantiate the DECL, we regenerate it.  */
14135
14136 static void
14137 regenerate_decl_from_template (tree decl, tree tmpl)
14138 {
14139   /* The arguments used to instantiate DECL, from the most general
14140      template.  */
14141   tree args;
14142   tree code_pattern;
14143
14144   args = DECL_TI_ARGS (decl);
14145   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14146
14147   /* Make sure that we can see identifiers, and compute access
14148      correctly.  */
14149   push_access_scope (decl);
14150
14151   if (TREE_CODE (decl) == FUNCTION_DECL)
14152     {
14153       tree decl_parm;
14154       tree pattern_parm;
14155       tree specs;
14156       int args_depth;
14157       int parms_depth;
14158
14159       args_depth = TMPL_ARGS_DEPTH (args);
14160       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14161       if (args_depth > parms_depth)
14162         args = get_innermost_template_args (args, parms_depth);
14163
14164       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14165                                               args, tf_error, NULL_TREE);
14166       if (specs)
14167         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14168                                                     specs);
14169
14170       /* Merge parameter declarations.  */
14171       decl_parm = skip_artificial_parms_for (decl,
14172                                              DECL_ARGUMENTS (decl));
14173       pattern_parm
14174         = skip_artificial_parms_for (code_pattern,
14175                                      DECL_ARGUMENTS (code_pattern));
14176       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14177         {
14178           tree parm_type;
14179           tree attributes;
14180           
14181           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14182             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14183           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14184                               NULL_TREE);
14185           parm_type = type_decays_to (parm_type);
14186           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14187             TREE_TYPE (decl_parm) = parm_type;
14188           attributes = DECL_ATTRIBUTES (pattern_parm);
14189           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14190             {
14191               DECL_ATTRIBUTES (decl_parm) = attributes;
14192               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14193             }
14194           decl_parm = TREE_CHAIN (decl_parm);
14195           pattern_parm = TREE_CHAIN (pattern_parm);
14196         }
14197       /* Merge any parameters that match with the function parameter
14198          pack.  */
14199       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14200         {
14201           int i, len;
14202           tree expanded_types;
14203           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14204              the parameters in this function parameter pack.  */
14205           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14206                                                  args, tf_error, NULL_TREE);
14207           len = TREE_VEC_LENGTH (expanded_types);
14208           for (i = 0; i < len; i++)
14209             {
14210               tree parm_type;
14211               tree attributes;
14212           
14213               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14214                 /* Rename the parameter to include the index.  */
14215                 DECL_NAME (decl_parm) = 
14216                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14217               parm_type = TREE_VEC_ELT (expanded_types, i);
14218               parm_type = type_decays_to (parm_type);
14219               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14220                 TREE_TYPE (decl_parm) = parm_type;
14221               attributes = DECL_ATTRIBUTES (pattern_parm);
14222               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14223                 {
14224                   DECL_ATTRIBUTES (decl_parm) = attributes;
14225                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14226                 }
14227               decl_parm = TREE_CHAIN (decl_parm);
14228             }
14229         }
14230       /* Merge additional specifiers from the CODE_PATTERN.  */
14231       if (DECL_DECLARED_INLINE_P (code_pattern)
14232           && !DECL_DECLARED_INLINE_P (decl))
14233         DECL_DECLARED_INLINE_P (decl) = 1;
14234       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14235         DECL_INLINE (decl) = 1;
14236     }
14237   else if (TREE_CODE (decl) == VAR_DECL)
14238     DECL_INITIAL (decl) =
14239       tsubst_expr (DECL_INITIAL (code_pattern), args,
14240                    tf_error, DECL_TI_TEMPLATE (decl),
14241                    /*integral_constant_expression_p=*/false);
14242   else
14243     gcc_unreachable ();
14244
14245   pop_access_scope (decl);
14246 }
14247
14248 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14249    substituted to get DECL.  */
14250
14251 tree
14252 template_for_substitution (tree decl)
14253 {
14254   tree tmpl = DECL_TI_TEMPLATE (decl);
14255
14256   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14257      for the instantiation.  This is not always the most general
14258      template.  Consider, for example:
14259
14260         template <class T>
14261         struct S { template <class U> void f();
14262                    template <> void f<int>(); };
14263
14264      and an instantiation of S<double>::f<int>.  We want TD to be the
14265      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14266   while (/* An instantiation cannot have a definition, so we need a
14267             more general template.  */
14268          DECL_TEMPLATE_INSTANTIATION (tmpl)
14269            /* We must also deal with friend templates.  Given:
14270
14271                 template <class T> struct S {
14272                   template <class U> friend void f() {};
14273                 };
14274
14275               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14276               so far as the language is concerned, but that's still
14277               where we get the pattern for the instantiation from.  On
14278               other hand, if the definition comes outside the class, say:
14279
14280                 template <class T> struct S {
14281                   template <class U> friend void f();
14282                 };
14283                 template <class U> friend void f() {}
14284
14285               we don't need to look any further.  That's what the check for
14286               DECL_INITIAL is for.  */
14287           || (TREE_CODE (decl) == FUNCTION_DECL
14288               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14289               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14290     {
14291       /* The present template, TD, should not be a definition.  If it
14292          were a definition, we should be using it!  Note that we
14293          cannot restructure the loop to just keep going until we find
14294          a template with a definition, since that might go too far if
14295          a specialization was declared, but not defined.  */
14296       gcc_assert (TREE_CODE (decl) != VAR_DECL
14297                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14298
14299       /* Fetch the more general template.  */
14300       tmpl = DECL_TI_TEMPLATE (tmpl);
14301     }
14302
14303   return tmpl;
14304 }
14305
14306 /* Produce the definition of D, a _DECL generated from a template.  If
14307    DEFER_OK is nonzero, then we don't have to actually do the
14308    instantiation now; we just have to do it sometime.  Normally it is
14309    an error if this is an explicit instantiation but D is undefined.
14310    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14311    explicitly instantiated class template.  */
14312
14313 tree
14314 instantiate_decl (tree d, int defer_ok,
14315                   bool expl_inst_class_mem_p)
14316 {
14317   tree tmpl = DECL_TI_TEMPLATE (d);
14318   tree gen_args;
14319   tree args;
14320   tree td;
14321   tree code_pattern;
14322   tree spec;
14323   tree gen_tmpl;
14324   bool pattern_defined;
14325   int need_push;
14326   location_t saved_loc = input_location;
14327   int saved_in_system_header = in_system_header;
14328   bool external_p;
14329
14330   /* This function should only be used to instantiate templates for
14331      functions and static member variables.  */
14332   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14333               || TREE_CODE (d) == VAR_DECL);
14334
14335   /* Variables are never deferred; if instantiation is required, they
14336      are instantiated right away.  That allows for better code in the
14337      case that an expression refers to the value of the variable --
14338      if the variable has a constant value the referring expression can
14339      take advantage of that fact.  */
14340   if (TREE_CODE (d) == VAR_DECL)
14341     defer_ok = 0;
14342
14343   /* Don't instantiate cloned functions.  Instead, instantiate the
14344      functions they cloned.  */
14345   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14346     d = DECL_CLONED_FUNCTION (d);
14347
14348   if (DECL_TEMPLATE_INSTANTIATED (d))
14349     /* D has already been instantiated.  It might seem reasonable to
14350        check whether or not D is an explicit instantiation, and, if so,
14351        stop here.  But when an explicit instantiation is deferred
14352        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14353        is set, even though we still need to do the instantiation.  */
14354     return d;
14355
14356   /* If we already have a specialization of this declaration, then
14357      there's no reason to instantiate it.  Note that
14358      retrieve_specialization gives us both instantiations and
14359      specializations, so we must explicitly check
14360      DECL_TEMPLATE_SPECIALIZATION.  */
14361   gen_tmpl = most_general_template (tmpl);
14362   gen_args = DECL_TI_ARGS (d);
14363   spec = retrieve_specialization (gen_tmpl, gen_args,
14364                                   /*class_specializations_p=*/false);
14365   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14366     return spec;
14367
14368   /* This needs to happen before any tsubsting.  */
14369   if (! push_tinst_level (d))
14370     return d;
14371
14372   timevar_push (TV_PARSE);
14373
14374   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14375      for the instantiation.  */
14376   td = template_for_substitution (d);
14377   code_pattern = DECL_TEMPLATE_RESULT (td);
14378
14379   /* We should never be trying to instantiate a member of a class
14380      template or partial specialization.  */
14381   gcc_assert (d != code_pattern);
14382
14383   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14384       || DECL_TEMPLATE_SPECIALIZATION (td))
14385     /* In the case of a friend template whose definition is provided
14386        outside the class, we may have too many arguments.  Drop the
14387        ones we don't need.  The same is true for specializations.  */
14388     args = get_innermost_template_args
14389       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
14390   else
14391     args = gen_args;
14392
14393   if (TREE_CODE (d) == FUNCTION_DECL)
14394     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14395   else
14396     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14397
14398   /* We may be in the middle of deferred access check.  Disable it now.  */
14399   push_deferring_access_checks (dk_no_deferred);
14400
14401   /* Unless an explicit instantiation directive has already determined
14402      the linkage of D, remember that a definition is available for
14403      this entity.  */
14404   if (pattern_defined
14405       && !DECL_INTERFACE_KNOWN (d)
14406       && !DECL_NOT_REALLY_EXTERN (d))
14407     mark_definable (d);
14408
14409   input_location = DECL_SOURCE_LOCATION (d);
14410   in_system_header = DECL_IN_SYSTEM_HEADER (d);
14411
14412   /* If D is a member of an explicitly instantiated class template,
14413      and no definition is available, treat it like an implicit
14414      instantiation.  */
14415   if (!pattern_defined && expl_inst_class_mem_p
14416       && DECL_EXPLICIT_INSTANTIATION (d))
14417     {
14418       DECL_NOT_REALLY_EXTERN (d) = 0;
14419       DECL_INTERFACE_KNOWN (d) = 0;
14420       SET_DECL_IMPLICIT_INSTANTIATION (d);
14421     }
14422
14423   if (!defer_ok)
14424     {
14425       /* Recheck the substitutions to obtain any warning messages
14426          about ignoring cv qualifiers.  */
14427       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14428       tree type = TREE_TYPE (gen);
14429
14430       /* Make sure that we can see identifiers, and compute access
14431          correctly.  D is already the target FUNCTION_DECL with the
14432          right context.  */
14433       push_access_scope (d);
14434
14435       if (TREE_CODE (gen) == FUNCTION_DECL)
14436         {
14437           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14438           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14439                                           d);
14440           /* Don't simply tsubst the function type, as that will give
14441              duplicate warnings about poor parameter qualifications.
14442              The function arguments are the same as the decl_arguments
14443              without the top level cv qualifiers.  */
14444           type = TREE_TYPE (type);
14445         }
14446       tsubst (type, gen_args, tf_warning_or_error, d);
14447
14448       pop_access_scope (d);
14449     }
14450
14451   /* Check to see whether we know that this template will be
14452      instantiated in some other file, as with "extern template"
14453      extension.  */
14454   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14455   /* In general, we do not instantiate such templates...  */
14456   if (external_p
14457       /* ... but we instantiate inline functions so that we can inline
14458          them and ... */
14459       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14460       /* ... we instantiate static data members whose values are
14461          needed in integral constant expressions.  */
14462       && ! (TREE_CODE (d) == VAR_DECL
14463             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14464     goto out;
14465   /* Defer all other templates, unless we have been explicitly
14466      forbidden from doing so.  */
14467   if (/* If there is no definition, we cannot instantiate the
14468          template.  */
14469       ! pattern_defined
14470       /* If it's OK to postpone instantiation, do so.  */
14471       || defer_ok
14472       /* If this is a static data member that will be defined
14473          elsewhere, we don't want to instantiate the entire data
14474          member, but we do want to instantiate the initializer so that
14475          we can substitute that elsewhere.  */
14476       || (external_p && TREE_CODE (d) == VAR_DECL))
14477     {
14478       /* The definition of the static data member is now required so
14479          we must substitute the initializer.  */
14480       if (TREE_CODE (d) == VAR_DECL
14481           && !DECL_INITIAL (d)
14482           && DECL_INITIAL (code_pattern))
14483         {
14484           tree ns;
14485           tree init;
14486
14487           ns = decl_namespace_context (d);
14488           push_nested_namespace (ns);
14489           push_nested_class (DECL_CONTEXT (d));
14490           init = tsubst_expr (DECL_INITIAL (code_pattern),
14491                               args,
14492                               tf_warning_or_error, NULL_TREE,
14493                               /*integral_constant_expression_p=*/false);
14494           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14495                           /*asmspec_tree=*/NULL_TREE,
14496                           LOOKUP_ONLYCONVERTING);
14497           pop_nested_class ();
14498           pop_nested_namespace (ns);
14499         }
14500
14501       /* We restore the source position here because it's used by
14502          add_pending_template.  */
14503       input_location = saved_loc;
14504
14505       if (at_eof && !pattern_defined
14506           && DECL_EXPLICIT_INSTANTIATION (d))
14507         /* [temp.explicit]
14508
14509            The definition of a non-exported function template, a
14510            non-exported member function template, or a non-exported
14511            member function or static data member of a class template
14512            shall be present in every translation unit in which it is
14513            explicitly instantiated.  */
14514         pedwarn
14515           ("explicit instantiation of %qD but no definition available", d);
14516
14517       /* ??? Historically, we have instantiated inline functions, even
14518          when marked as "extern template".  */
14519       if (!(external_p && TREE_CODE (d) == VAR_DECL))
14520         add_pending_template (d);
14521       goto out;
14522     }
14523   /* Tell the repository that D is available in this translation unit
14524      -- and see if it is supposed to be instantiated here.  */
14525   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14526     {
14527       /* In a PCH file, despite the fact that the repository hasn't
14528          requested instantiation in the PCH it is still possible that
14529          an instantiation will be required in a file that includes the
14530          PCH.  */
14531       if (pch_file)
14532         add_pending_template (d);
14533       /* Instantiate inline functions so that the inliner can do its
14534          job, even though we'll not be emitting a copy of this
14535          function.  */
14536       if (!(TREE_CODE (d) == FUNCTION_DECL
14537             && flag_inline_trees
14538             && DECL_DECLARED_INLINE_P (d)))
14539         goto out;
14540     }
14541
14542   need_push = !cfun || !global_bindings_p ();
14543   if (need_push)
14544     push_to_top_level ();
14545
14546   /* Mark D as instantiated so that recursive calls to
14547      instantiate_decl do not try to instantiate it again.  */
14548   DECL_TEMPLATE_INSTANTIATED (d) = 1;
14549
14550   /* Regenerate the declaration in case the template has been modified
14551      by a subsequent redeclaration.  */
14552   regenerate_decl_from_template (d, td);
14553
14554   /* We already set the file and line above.  Reset them now in case
14555      they changed as a result of calling regenerate_decl_from_template.  */
14556   input_location = DECL_SOURCE_LOCATION (d);
14557
14558   if (TREE_CODE (d) == VAR_DECL)
14559     {
14560       tree init;
14561
14562       /* Clear out DECL_RTL; whatever was there before may not be right
14563          since we've reset the type of the declaration.  */
14564       SET_DECL_RTL (d, NULL_RTX);
14565       DECL_IN_AGGR_P (d) = 0;
14566
14567       /* The initializer is placed in DECL_INITIAL by
14568          regenerate_decl_from_template.  Pull it out so that
14569          finish_decl can process it.  */
14570       init = DECL_INITIAL (d);
14571       DECL_INITIAL (d) = NULL_TREE;
14572       DECL_INITIALIZED_P (d) = 0;
14573
14574       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14575          initializer.  That function will defer actual emission until
14576          we have a chance to determine linkage.  */
14577       DECL_EXTERNAL (d) = 0;
14578
14579       /* Enter the scope of D so that access-checking works correctly.  */
14580       push_nested_class (DECL_CONTEXT (d));
14581       finish_decl (d, init, NULL_TREE);
14582       pop_nested_class ();
14583     }
14584   else if (TREE_CODE (d) == FUNCTION_DECL)
14585     {
14586       htab_t saved_local_specializations;
14587       tree subst_decl;
14588       tree tmpl_parm;
14589       tree spec_parm;
14590
14591       /* Save away the current list, in case we are instantiating one
14592          template from within the body of another.  */
14593       saved_local_specializations = local_specializations;
14594
14595       /* Set up the list of local specializations.  */
14596       local_specializations = htab_create (37,
14597                                            hash_local_specialization,
14598                                            eq_local_specializations,
14599                                            NULL);
14600
14601       /* Set up context.  */
14602       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14603
14604       /* Create substitution entries for the parameters.  */
14605       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14606       tmpl_parm = DECL_ARGUMENTS (subst_decl);
14607       spec_parm = DECL_ARGUMENTS (d);
14608       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14609         {
14610           register_local_specialization (spec_parm, tmpl_parm);
14611           spec_parm = skip_artificial_parms_for (d, spec_parm);
14612           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14613         }
14614       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14615         {
14616           register_local_specialization (spec_parm, tmpl_parm);
14617           tmpl_parm = TREE_CHAIN (tmpl_parm);
14618           spec_parm = TREE_CHAIN (spec_parm);
14619         }
14620       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14621         {
14622           /* Collect all of the extra "packed" parameters into an
14623              argument pack.  */
14624           tree parmvec;
14625           tree parmtypevec;
14626           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14627           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14628           int i, len = 0;
14629           tree t;
14630           
14631           /* Count how many parameters remain.  */
14632           for (t = spec_parm; t; t = TREE_CHAIN (t))
14633             len++;
14634
14635           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
14636           parmvec = make_tree_vec (len);
14637           parmtypevec = make_tree_vec (len);
14638           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14639             {
14640               TREE_VEC_ELT (parmvec, i) = spec_parm;
14641               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14642             }
14643
14644           /* Build the argument packs.  */
14645           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14646           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14647           TREE_TYPE (argpack) = argtypepack;
14648           
14649           /* Register the (value) argument pack as a specialization of
14650              TMPL_PARM, then move on.  */
14651           register_local_specialization (argpack, tmpl_parm);
14652           tmpl_parm = TREE_CHAIN (tmpl_parm);
14653         }
14654       gcc_assert (!spec_parm);
14655
14656       /* Substitute into the body of the function.  */
14657       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14658                    tf_warning_or_error, tmpl,
14659                    /*integral_constant_expression_p=*/false);
14660
14661       /* Set the current input_location to the end of the function
14662          so that finish_function knows where we are.  */
14663       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
14664
14665       /* We don't need the local specializations any more.  */
14666       htab_delete (local_specializations);
14667       local_specializations = saved_local_specializations;
14668
14669       /* Finish the function.  */
14670       d = finish_function (0);
14671       expand_or_defer_fn (d);
14672     }
14673
14674   /* We're not deferring instantiation any more.  */
14675   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14676
14677   if (need_push)
14678     pop_from_top_level ();
14679
14680 out:
14681   input_location = saved_loc;
14682   in_system_header = saved_in_system_header;
14683   pop_deferring_access_checks ();
14684   pop_tinst_level ();
14685
14686   timevar_pop (TV_PARSE);
14687
14688   return d;
14689 }
14690
14691 /* Run through the list of templates that we wish we could
14692    instantiate, and instantiate any we can.  RETRIES is the
14693    number of times we retry pending template instantiation.  */
14694
14695 void
14696 instantiate_pending_templates (int retries)
14697 {
14698   int reconsider;
14699   location_t saved_loc = input_location;
14700   int saved_in_system_header = in_system_header;
14701
14702   /* Instantiating templates may trigger vtable generation.  This in turn
14703      may require further template instantiations.  We place a limit here
14704      to avoid infinite loop.  */
14705   if (pending_templates && retries >= max_tinst_depth)
14706     {
14707       tree decl = pending_templates->tinst->decl;
14708
14709       error ("template instantiation depth exceeds maximum of %d"
14710              " instantiating %q+D, possibly from virtual table generation"
14711              " (use -ftemplate-depth-NN to increase the maximum)",
14712              max_tinst_depth, decl);
14713       if (TREE_CODE (decl) == FUNCTION_DECL)
14714         /* Pretend that we defined it.  */
14715         DECL_INITIAL (decl) = error_mark_node;
14716       return;
14717     }
14718
14719   do
14720     {
14721       struct pending_template **t = &pending_templates;
14722       struct pending_template *last = NULL;
14723       reconsider = 0;
14724       while (*t)
14725         {
14726           tree instantiation = reopen_tinst_level ((*t)->tinst);
14727           bool complete = false;
14728
14729           if (TYPE_P (instantiation))
14730             {
14731               tree fn;
14732
14733               if (!COMPLETE_TYPE_P (instantiation))
14734                 {
14735                   instantiate_class_template (instantiation);
14736                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14737                     for (fn = TYPE_METHODS (instantiation);
14738                          fn;
14739                          fn = TREE_CHAIN (fn))
14740                       if (! DECL_ARTIFICIAL (fn))
14741                         instantiate_decl (fn,
14742                                           /*defer_ok=*/0,
14743                                           /*expl_inst_class_mem_p=*/false);
14744                   if (COMPLETE_TYPE_P (instantiation))
14745                     reconsider = 1;
14746                 }
14747
14748               complete = COMPLETE_TYPE_P (instantiation);
14749             }
14750           else
14751             {
14752               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14753                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14754                 {
14755                   instantiation
14756                     = instantiate_decl (instantiation,
14757                                         /*defer_ok=*/0,
14758                                         /*expl_inst_class_mem_p=*/false);
14759                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14760                     reconsider = 1;
14761                 }
14762
14763               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14764                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
14765             }
14766
14767           if (complete)
14768             /* If INSTANTIATION has been instantiated, then we don't
14769                need to consider it again in the future.  */
14770             *t = (*t)->next;
14771           else
14772             {
14773               last = *t;
14774               t = &(*t)->next;
14775             }
14776           tinst_depth = 0;
14777           current_tinst_level = NULL;
14778         }
14779       last_pending_template = last;
14780     }
14781   while (reconsider);
14782
14783   input_location = saved_loc;
14784   in_system_header = saved_in_system_header;
14785 }
14786
14787 /* Substitute ARGVEC into T, which is a list of initializers for
14788    either base class or a non-static data member.  The TREE_PURPOSEs
14789    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
14790    instantiate_decl.  */
14791
14792 static tree
14793 tsubst_initializer_list (tree t, tree argvec)
14794 {
14795   tree inits = NULL_TREE;
14796
14797   for (; t; t = TREE_CHAIN (t))
14798     {
14799       tree decl;
14800       tree init;
14801       tree expanded_bases = NULL_TREE;
14802       tree expanded_arguments = NULL_TREE;
14803       int i, len = 1;
14804
14805       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14806         {
14807           tree expr;
14808           tree arg;
14809
14810           /* Expand the base class expansion type into separate base
14811              classes.  */
14812           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14813                                                  tf_warning_or_error,
14814                                                  NULL_TREE);
14815           if (expanded_bases == error_mark_node)
14816             continue;
14817           
14818           /* We'll be building separate TREE_LISTs of arguments for
14819              each base.  */
14820           len = TREE_VEC_LENGTH (expanded_bases);
14821           expanded_arguments = make_tree_vec (len);
14822           for (i = 0; i < len; i++)
14823             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14824
14825           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14826              expand each argument in the TREE_VALUE of t.  */
14827           expr = make_node (EXPR_PACK_EXPANSION);
14828           PACK_EXPANSION_PARAMETER_PACKS (expr) =
14829             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14830
14831           /* Substitute parameter packs into each argument in the
14832              TREE_LIST.  */
14833           in_base_initializer = 1;
14834           for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14835             {
14836               tree expanded_exprs;
14837
14838               /* Expand the argument.  */
14839               SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14840               expanded_exprs = tsubst_pack_expansion (expr, argvec,
14841                                                       tf_warning_or_error,
14842                                                       NULL_TREE);
14843
14844               /* Prepend each of the expanded expressions to the
14845                  corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
14846               for (i = 0; i < len; i++)
14847                 {
14848                   TREE_VEC_ELT (expanded_arguments, i) = 
14849                     tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14850                                TREE_VEC_ELT (expanded_arguments, i));
14851                 }
14852             }
14853           in_base_initializer = 0;
14854
14855           /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14856              since we built them backwards.  */
14857           for (i = 0; i < len; i++)
14858             {
14859               TREE_VEC_ELT (expanded_arguments, i) = 
14860                 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14861             }
14862         }
14863
14864       for (i = 0; i < len; ++i)
14865         {
14866           if (expanded_bases)
14867             {
14868               decl = TREE_VEC_ELT (expanded_bases, i);
14869               decl = expand_member_init (decl);
14870               init = TREE_VEC_ELT (expanded_arguments, i);
14871             }
14872           else
14873             {
14874               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
14875                                   tf_warning_or_error, NULL_TREE);
14876
14877               decl = expand_member_init (decl);
14878               if (decl && !DECL_P (decl))
14879                 in_base_initializer = 1;
14880
14881               init = tsubst_expr (TREE_VALUE (t), argvec, 
14882                                   tf_warning_or_error, NULL_TREE,
14883                                   /*integral_constant_expression_p=*/false);
14884               in_base_initializer = 0;
14885             }
14886
14887           if (decl)
14888             {
14889               init = build_tree_list (decl, init);
14890               TREE_CHAIN (init) = inits;
14891               inits = init;
14892             }
14893         }
14894     }
14895   return inits;
14896 }
14897
14898 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
14899
14900 static void
14901 set_current_access_from_decl (tree decl)
14902 {
14903   if (TREE_PRIVATE (decl))
14904     current_access_specifier = access_private_node;
14905   else if (TREE_PROTECTED (decl))
14906     current_access_specifier = access_protected_node;
14907   else
14908     current_access_specifier = access_public_node;
14909 }
14910
14911 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
14912    is the instantiation (which should have been created with
14913    start_enum) and ARGS are the template arguments to use.  */
14914
14915 static void
14916 tsubst_enum (tree tag, tree newtag, tree args)
14917 {
14918   tree e;
14919
14920   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14921     {
14922       tree value;
14923       tree decl;
14924
14925       decl = TREE_VALUE (e);
14926       /* Note that in a template enum, the TREE_VALUE is the
14927          CONST_DECL, not the corresponding INTEGER_CST.  */
14928       value = tsubst_expr (DECL_INITIAL (decl),
14929                            args, tf_warning_or_error, NULL_TREE,
14930                            /*integral_constant_expression_p=*/true);
14931
14932       /* Give this enumeration constant the correct access.  */
14933       set_current_access_from_decl (decl);
14934
14935       /* Actually build the enumerator itself.  */
14936       build_enumerator (DECL_NAME (decl), value, newtag);
14937     }
14938
14939   finish_enum (newtag);
14940   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14941     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14942 }
14943
14944 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
14945    its type -- but without substituting the innermost set of template
14946    arguments.  So, innermost set of template parameters will appear in
14947    the type.  */
14948
14949 tree
14950 get_mostly_instantiated_function_type (tree decl)
14951 {
14952   tree fn_type;
14953   tree tmpl;
14954   tree targs;
14955   tree tparms;
14956   int parm_depth;
14957
14958   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14959   targs = DECL_TI_ARGS (decl);
14960   tparms = DECL_TEMPLATE_PARMS (tmpl);
14961   parm_depth = TMPL_PARMS_DEPTH (tparms);
14962
14963   /* There should be as many levels of arguments as there are levels
14964      of parameters.  */
14965   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
14966
14967   fn_type = TREE_TYPE (tmpl);
14968
14969   if (parm_depth == 1)
14970     /* No substitution is necessary.  */
14971     ;
14972   else
14973     {
14974       int i, save_access_control;
14975       tree partial_args;
14976
14977       /* Replace the innermost level of the TARGS with NULL_TREEs to
14978          let tsubst know not to substitute for those parameters.  */
14979       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14980       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14981         SET_TMPL_ARGS_LEVEL (partial_args, i,
14982                              TMPL_ARGS_LEVEL (targs, i));
14983       SET_TMPL_ARGS_LEVEL (partial_args,
14984                            TMPL_ARGS_DEPTH (targs),
14985                            make_tree_vec (DECL_NTPARMS (tmpl)));
14986
14987       /* Disable access control as this function is used only during
14988          name-mangling.  */
14989       save_access_control = flag_access_control;
14990       flag_access_control = 0;
14991
14992       ++processing_template_decl;
14993       /* Now, do the (partial) substitution to figure out the
14994          appropriate function type.  */
14995       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
14996       --processing_template_decl;
14997
14998       /* Substitute into the template parameters to obtain the real
14999          innermost set of parameters.  This step is important if the
15000          innermost set of template parameters contains value
15001          parameters whose types depend on outer template parameters.  */
15002       TREE_VEC_LENGTH (partial_args)--;
15003       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15004
15005       flag_access_control = save_access_control;
15006     }
15007
15008   return fn_type;
15009 }
15010
15011 /* Return truthvalue if we're processing a template different from
15012    the last one involved in diagnostics.  */
15013 int
15014 problematic_instantiation_changed (void)
15015 {
15016   return last_template_error_tick != tinst_level_tick;
15017 }
15018
15019 /* Remember current template involved in diagnostics.  */
15020 void
15021 record_last_problematic_instantiation (void)
15022 {
15023   last_template_error_tick = tinst_level_tick;
15024 }
15025
15026 struct tinst_level *
15027 current_instantiation (void)
15028 {
15029   return current_tinst_level;
15030 }
15031
15032 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15033    type. Return zero for ok, nonzero for disallowed. Issue error and
15034    warning messages under control of COMPLAIN.  */
15035
15036 static int
15037 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15038 {
15039   if (INTEGRAL_TYPE_P (type))
15040     return 0;
15041   else if (POINTER_TYPE_P (type))
15042     return 0;
15043   else if (TYPE_PTR_TO_MEMBER_P (type))
15044     return 0;
15045   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15046     return 0;
15047   else if (TREE_CODE (type) == TYPENAME_TYPE)
15048     return 0;
15049
15050   if (complain & tf_error)
15051     error ("%q#T is not a valid type for a template constant parameter", type);
15052   return 1;
15053 }
15054
15055 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15056    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15057
15058 static bool
15059 dependent_type_p_r (tree type)
15060 {
15061   tree scope;
15062
15063   /* [temp.dep.type]
15064
15065      A type is dependent if it is:
15066
15067      -- a template parameter. Template template parameters are types
15068         for us (since TYPE_P holds true for them) so we handle
15069         them here.  */
15070   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15071       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15072     return true;
15073   /* -- a qualified-id with a nested-name-specifier which contains a
15074         class-name that names a dependent type or whose unqualified-id
15075         names a dependent type.  */
15076   if (TREE_CODE (type) == TYPENAME_TYPE)
15077     return true;
15078   /* -- a cv-qualified type where the cv-unqualified type is
15079         dependent.  */
15080   type = TYPE_MAIN_VARIANT (type);
15081   /* -- a compound type constructed from any dependent type.  */
15082   if (TYPE_PTR_TO_MEMBER_P (type))
15083     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15084             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15085                                            (type)));
15086   else if (TREE_CODE (type) == POINTER_TYPE
15087            || TREE_CODE (type) == REFERENCE_TYPE)
15088     return dependent_type_p (TREE_TYPE (type));
15089   else if (TREE_CODE (type) == FUNCTION_TYPE
15090            || TREE_CODE (type) == METHOD_TYPE)
15091     {
15092       tree arg_type;
15093
15094       if (dependent_type_p (TREE_TYPE (type)))
15095         return true;
15096       for (arg_type = TYPE_ARG_TYPES (type);
15097            arg_type;
15098            arg_type = TREE_CHAIN (arg_type))
15099         if (dependent_type_p (TREE_VALUE (arg_type)))
15100           return true;
15101       return false;
15102     }
15103   /* -- an array type constructed from any dependent type or whose
15104         size is specified by a constant expression that is
15105         value-dependent.  */
15106   if (TREE_CODE (type) == ARRAY_TYPE)
15107     {
15108       if (TYPE_DOMAIN (type)
15109           && ((value_dependent_expression_p
15110                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
15111               || (type_dependent_expression_p
15112                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
15113         return true;
15114       return dependent_type_p (TREE_TYPE (type));
15115     }
15116
15117   /* -- a template-id in which either the template name is a template
15118      parameter ...  */
15119   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15120     return true;
15121   /* ... or any of the template arguments is a dependent type or
15122         an expression that is type-dependent or value-dependent.  */
15123   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15124            && (any_dependent_template_arguments_p
15125                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15126     return true;
15127
15128   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15129      argument of the `typeof' expression is not type-dependent, then
15130      it should already been have resolved.  */
15131   if (TREE_CODE (type) == TYPEOF_TYPE
15132       || TREE_CODE (type) == DECLTYPE_TYPE)
15133     return true;
15134
15135   /* A template argument pack is dependent if any of its packed
15136      arguments are.  */
15137   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15138     {
15139       tree args = ARGUMENT_PACK_ARGS (type);
15140       int i, len = TREE_VEC_LENGTH (args);
15141       for (i = 0; i < len; ++i)
15142         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15143           return true;
15144     }
15145
15146   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15147      be template parameters.  */
15148   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15149     return true;
15150
15151   /* The standard does not specifically mention types that are local
15152      to template functions or local classes, but they should be
15153      considered dependent too.  For example:
15154
15155        template <int I> void f() {
15156          enum E { a = I };
15157          S<sizeof (E)> s;
15158        }
15159
15160      The size of `E' cannot be known until the value of `I' has been
15161      determined.  Therefore, `E' must be considered dependent.  */
15162   scope = TYPE_CONTEXT (type);
15163   if (scope && TYPE_P (scope))
15164     return dependent_type_p (scope);
15165   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15166     return type_dependent_expression_p (scope);
15167
15168   /* Other types are non-dependent.  */
15169   return false;
15170 }
15171
15172 /* Returns TRUE if TYPE is dependent, in the sense of
15173    [temp.dep.type].  */
15174
15175 bool
15176 dependent_type_p (tree type)
15177 {
15178   /* If there are no template parameters in scope, then there can't be
15179      any dependent types.  */
15180   if (!processing_template_decl)
15181     {
15182       /* If we are not processing a template, then nobody should be
15183          providing us with a dependent type.  */
15184       gcc_assert (type);
15185       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15186       return false;
15187     }
15188
15189   /* If the type is NULL, we have not computed a type for the entity
15190      in question; in that case, the type is dependent.  */
15191   if (!type)
15192     return true;
15193
15194   /* Erroneous types can be considered non-dependent.  */
15195   if (type == error_mark_node)
15196     return false;
15197
15198   /* If we have not already computed the appropriate value for TYPE,
15199      do so now.  */
15200   if (!TYPE_DEPENDENT_P_VALID (type))
15201     {
15202       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15203       TYPE_DEPENDENT_P_VALID (type) = 1;
15204     }
15205
15206   return TYPE_DEPENDENT_P (type);
15207 }
15208
15209 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15210
15211 static bool
15212 dependent_scope_ref_p (tree expression, bool criterion (tree))
15213 {
15214   tree scope;
15215   tree name;
15216
15217   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15218
15219   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15220     return true;
15221
15222   scope = TREE_OPERAND (expression, 0);
15223   name = TREE_OPERAND (expression, 1);
15224
15225   /* [temp.dep.expr]
15226
15227      An id-expression is type-dependent if it contains a
15228      nested-name-specifier that contains a class-name that names a
15229      dependent type.  */
15230   /* The suggested resolution to Core Issue 2 implies that if the
15231      qualifying type is the current class, then we must peek
15232      inside it.  */
15233   if (DECL_P (name)
15234       && currently_open_class (scope)
15235       && !criterion (name))
15236     return false;
15237   if (dependent_type_p (scope))
15238     return true;
15239
15240   return false;
15241 }
15242
15243 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15244    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15245    expression.  */
15246
15247 bool
15248 value_dependent_expression_p (tree expression)
15249 {
15250   if (!processing_template_decl)
15251     return false;
15252
15253   /* A name declared with a dependent type.  */
15254   if (DECL_P (expression) && type_dependent_expression_p (expression))
15255     return true;
15256
15257   switch (TREE_CODE (expression))
15258     {
15259     case IDENTIFIER_NODE:
15260       /* A name that has not been looked up -- must be dependent.  */
15261       return true;
15262
15263     case TEMPLATE_PARM_INDEX:
15264       /* A non-type template parm.  */
15265       return true;
15266
15267     case CONST_DECL:
15268       /* A non-type template parm.  */
15269       if (DECL_TEMPLATE_PARM_P (expression))
15270         return true;
15271       return false;
15272
15273     case VAR_DECL:
15274        /* A constant with integral or enumeration type and is initialized
15275           with an expression that is value-dependent.  */
15276       if (DECL_INITIAL (expression)
15277           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15278           && value_dependent_expression_p (DECL_INITIAL (expression)))
15279         return true;
15280       return false;
15281
15282     case DYNAMIC_CAST_EXPR:
15283     case STATIC_CAST_EXPR:
15284     case CONST_CAST_EXPR:
15285     case REINTERPRET_CAST_EXPR:
15286     case CAST_EXPR:
15287       /* These expressions are value-dependent if the type to which
15288          the cast occurs is dependent or the expression being casted
15289          is value-dependent.  */
15290       {
15291         tree type = TREE_TYPE (expression);
15292
15293         if (dependent_type_p (type))
15294           return true;
15295
15296         /* A functional cast has a list of operands.  */
15297         expression = TREE_OPERAND (expression, 0);
15298         if (!expression)
15299           {
15300             /* If there are no operands, it must be an expression such
15301                as "int()". This should not happen for aggregate types
15302                because it would form non-constant expressions.  */
15303             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15304
15305             return false;
15306           }
15307
15308         if (TREE_CODE (expression) == TREE_LIST)
15309           return any_value_dependent_elements_p (expression);
15310
15311         return value_dependent_expression_p (expression);
15312       }
15313
15314     case SIZEOF_EXPR:
15315     case ALIGNOF_EXPR:
15316       /* A `sizeof' expression is value-dependent if the operand is
15317          type-dependent or is a pack expansion.  */
15318       expression = TREE_OPERAND (expression, 0);
15319       if (PACK_EXPANSION_P (expression))
15320         return true;
15321       else if (TYPE_P (expression))
15322         return dependent_type_p (expression);
15323       return type_dependent_expression_p (expression);
15324
15325     case SCOPE_REF:
15326       return dependent_scope_ref_p (expression, value_dependent_expression_p);
15327
15328     case COMPONENT_REF:
15329       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15330               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15331
15332     case CALL_EXPR:
15333       /* A CALL_EXPR may appear in a constant expression if it is a
15334          call to a builtin function, e.g., __builtin_constant_p.  All
15335          such calls are value-dependent.  */
15336       return true;
15337
15338     case NONTYPE_ARGUMENT_PACK:
15339       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15340          is value-dependent.  */
15341       {
15342         tree values = ARGUMENT_PACK_ARGS (expression);
15343         int i, len = TREE_VEC_LENGTH (values);
15344         
15345         for (i = 0; i < len; ++i)
15346           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15347             return true;
15348         
15349         return false;
15350       }
15351
15352     case TRAIT_EXPR:
15353       {
15354         tree type2 = TRAIT_EXPR_TYPE2 (expression);
15355         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15356                 || (type2 ? dependent_type_p (type2) : false));
15357       }
15358
15359     case MODOP_EXPR:
15360       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15361               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15362
15363     default:
15364       /* A constant expression is value-dependent if any subexpression is
15365          value-dependent.  */
15366       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15367         {
15368         case tcc_reference:
15369         case tcc_unary:
15370           return (value_dependent_expression_p
15371                   (TREE_OPERAND (expression, 0)));
15372
15373         case tcc_comparison:
15374         case tcc_binary:
15375           return ((value_dependent_expression_p
15376                    (TREE_OPERAND (expression, 0)))
15377                   || (value_dependent_expression_p
15378                       (TREE_OPERAND (expression, 1))));
15379
15380         case tcc_expression:
15381         case tcc_vl_exp:
15382           {
15383             int i;
15384             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15385               /* In some cases, some of the operands may be missing.
15386                  (For example, in the case of PREDECREMENT_EXPR, the
15387                  amount to increment by may be missing.)  That doesn't
15388                  make the expression dependent.  */
15389               if (TREE_OPERAND (expression, i)
15390                   && (value_dependent_expression_p
15391                       (TREE_OPERAND (expression, i))))
15392                 return true;
15393             return false;
15394           }
15395
15396         default:
15397           break;
15398         }
15399     }
15400
15401   /* The expression is not value-dependent.  */
15402   return false;
15403 }
15404
15405 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15406    [temp.dep.expr].  */
15407
15408 bool
15409 type_dependent_expression_p (tree expression)
15410 {
15411   if (!processing_template_decl)
15412     return false;
15413
15414   if (expression == error_mark_node)
15415     return false;
15416
15417   /* An unresolved name is always dependent.  */
15418   if (TREE_CODE (expression) == IDENTIFIER_NODE
15419       || TREE_CODE (expression) == USING_DECL)
15420     return true;
15421
15422   /* Some expression forms are never type-dependent.  */
15423   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15424       || TREE_CODE (expression) == SIZEOF_EXPR
15425       || TREE_CODE (expression) == ALIGNOF_EXPR
15426       || TREE_CODE (expression) == TRAIT_EXPR
15427       || TREE_CODE (expression) == TYPEID_EXPR
15428       || TREE_CODE (expression) == DELETE_EXPR
15429       || TREE_CODE (expression) == VEC_DELETE_EXPR
15430       || TREE_CODE (expression) == THROW_EXPR)
15431     return false;
15432
15433   /* The types of these expressions depends only on the type to which
15434      the cast occurs.  */
15435   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15436       || TREE_CODE (expression) == STATIC_CAST_EXPR
15437       || TREE_CODE (expression) == CONST_CAST_EXPR
15438       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15439       || TREE_CODE (expression) == CAST_EXPR)
15440     return dependent_type_p (TREE_TYPE (expression));
15441
15442   /* The types of these expressions depends only on the type created
15443      by the expression.  */
15444   if (TREE_CODE (expression) == NEW_EXPR
15445       || TREE_CODE (expression) == VEC_NEW_EXPR)
15446     {
15447       /* For NEW_EXPR tree nodes created inside a template, either
15448          the object type itself or a TREE_LIST may appear as the
15449          operand 1.  */
15450       tree type = TREE_OPERAND (expression, 1);
15451       if (TREE_CODE (type) == TREE_LIST)
15452         /* This is an array type.  We need to check array dimensions
15453            as well.  */
15454         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15455                || value_dependent_expression_p
15456                     (TREE_OPERAND (TREE_VALUE (type), 1));
15457       else
15458         return dependent_type_p (type);
15459     }
15460
15461   if (TREE_CODE (expression) == SCOPE_REF
15462       && dependent_scope_ref_p (expression,
15463                                 type_dependent_expression_p))
15464     return true;
15465
15466   if (TREE_CODE (expression) == FUNCTION_DECL
15467       && DECL_LANG_SPECIFIC (expression)
15468       && DECL_TEMPLATE_INFO (expression)
15469       && (any_dependent_template_arguments_p
15470           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15471     return true;
15472
15473   if (TREE_CODE (expression) == TEMPLATE_DECL
15474       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15475     return false;
15476
15477   if (TREE_CODE (expression) == STMT_EXPR)
15478     expression = stmt_expr_value_expr (expression);
15479
15480   if (TREE_TYPE (expression) == unknown_type_node)
15481     {
15482       if (TREE_CODE (expression) == ADDR_EXPR)
15483         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15484       if (TREE_CODE (expression) == COMPONENT_REF
15485           || TREE_CODE (expression) == OFFSET_REF)
15486         {
15487           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15488             return true;
15489           expression = TREE_OPERAND (expression, 1);
15490           if (TREE_CODE (expression) == IDENTIFIER_NODE)
15491             return false;
15492         }
15493       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
15494       if (TREE_CODE (expression) == SCOPE_REF)
15495         return false;
15496
15497       if (TREE_CODE (expression) == BASELINK)
15498         expression = BASELINK_FUNCTIONS (expression);
15499
15500       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15501         {
15502           if (any_dependent_template_arguments_p
15503               (TREE_OPERAND (expression, 1)))
15504             return true;
15505           expression = TREE_OPERAND (expression, 0);
15506         }
15507       gcc_assert (TREE_CODE (expression) == OVERLOAD
15508                   || TREE_CODE (expression) == FUNCTION_DECL);
15509
15510       while (expression)
15511         {
15512           if (type_dependent_expression_p (OVL_CURRENT (expression)))
15513             return true;
15514           expression = OVL_NEXT (expression);
15515         }
15516       return false;
15517     }
15518
15519   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15520
15521   return (dependent_type_p (TREE_TYPE (expression)));
15522 }
15523
15524 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15525    contains a type-dependent expression.  */
15526
15527 bool
15528 any_type_dependent_arguments_p (const_tree args)
15529 {
15530   while (args)
15531     {
15532       tree arg = TREE_VALUE (args);
15533
15534       if (type_dependent_expression_p (arg))
15535         return true;
15536       args = TREE_CHAIN (args);
15537     }
15538   return false;
15539 }
15540
15541 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15542    expressions) contains any value-dependent expressions.  */
15543
15544 bool
15545 any_value_dependent_elements_p (const_tree list)
15546 {
15547   for (; list; list = TREE_CHAIN (list))
15548     if (value_dependent_expression_p (TREE_VALUE (list)))
15549       return true;
15550
15551   return false;
15552 }
15553
15554 /* Returns TRUE if the ARG (a template argument) is dependent.  */
15555
15556 bool
15557 dependent_template_arg_p (tree arg)
15558 {
15559   if (!processing_template_decl)
15560     return false;
15561
15562   if (TREE_CODE (arg) == TEMPLATE_DECL
15563       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15564     return dependent_template_p (arg);
15565   else if (ARGUMENT_PACK_P (arg))
15566     {
15567       tree args = ARGUMENT_PACK_ARGS (arg);
15568       int i, len = TREE_VEC_LENGTH (args);
15569       for (i = 0; i < len; ++i)
15570         {
15571           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15572             return true;
15573         }
15574
15575       return false;
15576     }
15577   else if (TYPE_P (arg))
15578     return dependent_type_p (arg);
15579   else
15580     return (type_dependent_expression_p (arg)
15581             || value_dependent_expression_p (arg));
15582 }
15583
15584 /* Returns true if ARGS (a collection of template arguments) contains
15585    any types that require structural equality testing.  */
15586
15587 bool
15588 any_template_arguments_need_structural_equality_p (tree args)
15589 {
15590   int i;
15591   int j;
15592
15593   if (!args)
15594     return false;
15595   if (args == error_mark_node)
15596     return true;
15597
15598   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15599     {
15600       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15601       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15602         {
15603           tree arg = TREE_VEC_ELT (level, j);
15604           tree packed_args = NULL_TREE;
15605           int k, len = 1;
15606
15607           if (ARGUMENT_PACK_P (arg))
15608             {
15609               /* Look inside the argument pack.  */
15610               packed_args = ARGUMENT_PACK_ARGS (arg);
15611               len = TREE_VEC_LENGTH (packed_args);
15612             }
15613
15614           for (k = 0; k < len; ++k)
15615             {
15616               if (packed_args)
15617                 arg = TREE_VEC_ELT (packed_args, k);
15618
15619               if (error_operand_p (arg))
15620                 return true;
15621               else if (TREE_CODE (arg) == TEMPLATE_DECL
15622                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15623                 continue;
15624               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15625                 return true;
15626               else if (!TYPE_P (arg) && TREE_TYPE (arg)
15627                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15628                 return true;
15629             }
15630         }
15631     }
15632
15633   return false;
15634 }
15635
15636 /* Returns true if ARGS (a collection of template arguments) contains
15637    any dependent arguments.  */
15638
15639 bool
15640 any_dependent_template_arguments_p (const_tree args)
15641 {
15642   int i;
15643   int j;
15644
15645   if (!args)
15646     return false;
15647   if (args == error_mark_node)
15648     return true;
15649
15650   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15651     {
15652       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
15653       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15654         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15655           return true;
15656     }
15657
15658   return false;
15659 }
15660
15661 /* Returns TRUE if the template TMPL is dependent.  */
15662
15663 bool
15664 dependent_template_p (tree tmpl)
15665 {
15666   if (TREE_CODE (tmpl) == OVERLOAD)
15667     {
15668       while (tmpl)
15669         {
15670           if (dependent_template_p (OVL_FUNCTION (tmpl)))
15671             return true;
15672           tmpl = OVL_CHAIN (tmpl);
15673         }
15674       return false;
15675     }
15676
15677   /* Template template parameters are dependent.  */
15678   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15679       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15680     return true;
15681   /* So are names that have not been looked up.  */
15682   if (TREE_CODE (tmpl) == SCOPE_REF
15683       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15684     return true;
15685   /* So are member templates of dependent classes.  */
15686   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15687     return dependent_type_p (DECL_CONTEXT (tmpl));
15688   return false;
15689 }
15690
15691 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
15692
15693 bool
15694 dependent_template_id_p (tree tmpl, tree args)
15695 {
15696   return (dependent_template_p (tmpl)
15697           || any_dependent_template_arguments_p (args));
15698 }
15699
15700 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
15701    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
15702    no such TYPE can be found.  Note that this function peers inside
15703    uninstantiated templates and therefore should be used only in
15704    extremely limited situations.  ONLY_CURRENT_P restricts this
15705    peering to the currently open classes hierarchy (which is required
15706    when comparing types).  */
15707
15708 tree
15709 resolve_typename_type (tree type, bool only_current_p)
15710 {
15711   tree scope;
15712   tree name;
15713   tree decl;
15714   int quals;
15715   tree pushed_scope;
15716   tree result;
15717
15718   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15719
15720   scope = TYPE_CONTEXT (type);
15721   name = TYPE_IDENTIFIER (type);
15722
15723   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15724      it first before we can figure out what NAME refers to.  */
15725   if (TREE_CODE (scope) == TYPENAME_TYPE)
15726     scope = resolve_typename_type (scope, only_current_p);
15727   /* If we don't know what SCOPE refers to, then we cannot resolve the
15728      TYPENAME_TYPE.  */
15729   if (TREE_CODE (scope) == TYPENAME_TYPE)
15730     return type;
15731   /* If the SCOPE is a template type parameter, we have no way of
15732      resolving the name.  */
15733   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15734     return type;
15735   /* If the SCOPE is not the current instantiation, there's no reason
15736      to look inside it.  */
15737   if (only_current_p && !currently_open_class (scope))
15738     return type;
15739   /* If SCOPE isn't the template itself, it will not have a valid
15740      TYPE_FIELDS list.  */
15741   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
15742     /* scope is either the template itself or a compatible instantiation
15743        like X<T>, so look up the name in the original template.  */
15744     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15745   else
15746     /* scope is a partial instantiation, so we can't do the lookup or we
15747        will lose the template arguments.  */
15748     return type;
15749   /* Enter the SCOPE so that name lookup will be resolved as if we
15750      were in the class definition.  In particular, SCOPE will no
15751      longer be considered a dependent type.  */
15752   pushed_scope = push_scope (scope);
15753   /* Look up the declaration.  */
15754   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15755
15756   result = NULL_TREE;
15757   
15758   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15759      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
15760   if (!decl)
15761     /*nop*/;
15762   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15763            && TREE_CODE (decl) == TYPE_DECL)
15764     {
15765       result = TREE_TYPE (decl);
15766       if (result == error_mark_node)
15767         result = NULL_TREE;
15768     }
15769   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15770            && DECL_CLASS_TEMPLATE_P (decl))
15771     {
15772       tree tmpl;
15773       tree args;
15774       /* Obtain the template and the arguments.  */
15775       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15776       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15777       /* Instantiate the template.  */
15778       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15779                                       /*entering_scope=*/0,
15780                                       tf_error | tf_user);
15781       if (result == error_mark_node)
15782         result = NULL_TREE;
15783     }
15784   
15785   /* Leave the SCOPE.  */
15786   if (pushed_scope)
15787     pop_scope (pushed_scope);
15788
15789   /* If we failed to resolve it, return the original typename.  */
15790   if (!result)
15791     return type;
15792   
15793   /* If lookup found a typename type, resolve that too.  */
15794   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
15795     {
15796       /* Ill-formed programs can cause infinite recursion here, so we
15797          must catch that.  */
15798       TYPENAME_IS_RESOLVING_P (type) = 1;
15799       result = resolve_typename_type (result, only_current_p);
15800       TYPENAME_IS_RESOLVING_P (type) = 0;
15801     }
15802   
15803   /* Qualify the resulting type.  */
15804   quals = cp_type_quals (type);
15805   if (quals)
15806     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
15807
15808   return result;
15809 }
15810
15811 /* EXPR is an expression which is not type-dependent.  Return a proxy
15812    for EXPR that can be used to compute the types of larger
15813    expressions containing EXPR.  */
15814
15815 tree
15816 build_non_dependent_expr (tree expr)
15817 {
15818   tree inner_expr;
15819
15820   /* Preserve null pointer constants so that the type of things like
15821      "p == 0" where "p" is a pointer can be determined.  */
15822   if (null_ptr_cst_p (expr))
15823     return expr;
15824   /* Preserve OVERLOADs; the functions must be available to resolve
15825      types.  */
15826   inner_expr = expr;
15827   if (TREE_CODE (inner_expr) == STMT_EXPR)
15828     inner_expr = stmt_expr_value_expr (inner_expr);
15829   if (TREE_CODE (inner_expr) == ADDR_EXPR)
15830     inner_expr = TREE_OPERAND (inner_expr, 0);
15831   if (TREE_CODE (inner_expr) == COMPONENT_REF)
15832     inner_expr = TREE_OPERAND (inner_expr, 1);
15833   if (is_overloaded_fn (inner_expr)
15834       || TREE_CODE (inner_expr) == OFFSET_REF)
15835     return expr;
15836   /* There is no need to return a proxy for a variable.  */
15837   if (TREE_CODE (expr) == VAR_DECL)
15838     return expr;
15839   /* Preserve string constants; conversions from string constants to
15840      "char *" are allowed, even though normally a "const char *"
15841      cannot be used to initialize a "char *".  */
15842   if (TREE_CODE (expr) == STRING_CST)
15843     return expr;
15844   /* Preserve arithmetic constants, as an optimization -- there is no
15845      reason to create a new node.  */
15846   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15847     return expr;
15848   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15849      There is at least one place where we want to know that a
15850      particular expression is a throw-expression: when checking a ?:
15851      expression, there are special rules if the second or third
15852      argument is a throw-expression.  */
15853   if (TREE_CODE (expr) == THROW_EXPR)
15854     return expr;
15855
15856   if (TREE_CODE (expr) == COND_EXPR)
15857     return build3 (COND_EXPR,
15858                    TREE_TYPE (expr),
15859                    TREE_OPERAND (expr, 0),
15860                    (TREE_OPERAND (expr, 1)
15861                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15862                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15863                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15864   if (TREE_CODE (expr) == COMPOUND_EXPR
15865       && !COMPOUND_EXPR_OVERLOADED (expr))
15866     return build2 (COMPOUND_EXPR,
15867                    TREE_TYPE (expr),
15868                    TREE_OPERAND (expr, 0),
15869                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15870
15871   /* If the type is unknown, it can't really be non-dependent */
15872   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15873
15874   /* Otherwise, build a NON_DEPENDENT_EXPR.
15875
15876      REFERENCE_TYPEs are not stripped for expressions in templates
15877      because doing so would play havoc with mangling.  Consider, for
15878      example:
15879
15880        template <typename T> void f<T& g>() { g(); }
15881
15882      In the body of "f", the expression for "g" will have
15883      REFERENCE_TYPE, even though the standard says that it should
15884      not.  The reason is that we must preserve the syntactic form of
15885      the expression so that mangling (say) "f<g>" inside the body of
15886      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
15887      stripped here.  */
15888   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15889 }
15890
15891 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15892    Return a new TREE_LIST with the various arguments replaced with
15893    equivalent non-dependent expressions.  */
15894
15895 tree
15896 build_non_dependent_args (tree args)
15897 {
15898   tree a;
15899   tree new_args;
15900
15901   new_args = NULL_TREE;
15902   for (a = args; a; a = TREE_CHAIN (a))
15903     new_args = tree_cons (NULL_TREE,
15904                           build_non_dependent_expr (TREE_VALUE (a)),
15905                           new_args);
15906   return nreverse (new_args);
15907 }
15908
15909 #include "gt-cp-pt.h"