OSDN Git Service

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